通过 SSL 使用 Apache NameBased VirtualHosts 进行 NTLM 授权

通过 SSL 使用 Apache NameBased VirtualHosts 进行 NTLM 授权

我有一个通过 Apache 服务器前端的开发环境。此 Apache 服务器需要使用 SSL 和 Centrify 启用的 NTLM 身份验证/授权以及 AD 后端,使用组访问来查看网页。将有多个项目使用此环境,因此我想设置虚拟主机,这将允许每个项目使用任何特定的 Apache 模块修改自己的虚拟主机。Web 文件将位于 /var/www/project1 ; /var/www/project2 ;等等。

我已经正确配置了 DNS,将 *.domain 指向 apache 服务器,并且配置了将 altDNSName 字段设置为 *.domain 的通配符 SSL 证书。

问题在于NTLM身份验证部分:

如果我将浏览器指向https://主机名.fqdn/project1/index.html,NTLM 授权过程完全符合我的要求。我相信这会运行我的默认虚拟主机。

如果我将浏览器指向https://project1.domain/index.html,Apache 错误日志抱怨“用户对 /index.html 的 NTLM 身份验证失败。错误:登录失败。

<VirtualHost ipaddress:443>
    Servername "hostname.fqdn"
    DocumentRoot "/var/www/"

    SSLEngine on
    SSLCertificateFile  /path/to/cert.crt
    SSLCertificateKeyFile   /path/to/cert.key
</VirtualHost>

<VirtualHost ipaddress:443>
    ServerName "project1.domain"
    DocumentRoot "/var/www/project1"

    SSLEngine on
    SSLCertificateFile  /path/to/cert.crt
    SSLCertificateKeyFile   /path/to/cert.key
</VirtualHost>

<Directory "/var/www">
    Options Indexes FollowSymLinks

    SSLRequireSSL

    AllowOverride None

    Order allow,deny
    Allow from all
</Directory>

<Directory "/var/www/project1">
    AuthType CENTRIFYDC

    EnableBasicAuth     false
    EnableKerberosAuth  false
    EnableNtlmAuth      true

    Require group       required_ad_group
</Directory>

我尝试使用 IE 和 Firefox 进行此操作,确保 *.domain 位于 IE 的本地 Intranet 区域中,并且网络.自动-ntlm-auth.trusted-uris网络.协商-身份验证.受信任的 URI在 Firefox 中设置正确。

我已将范围缩小到 NTLM 问题,因为如果我删除 Centrify 指令,基于名称的虚拟主机将按我预期的方式工作。我尝试在每个虚拟主机内放置目录标记,也尝试使用位置标记,但未能取得任何进展。

答案1

我将首先创建两个完全独立的、按预期工作的 VirtualHost,然后通过逐步更改回到混合版本。

我怀疑你的 2 个 VirtualHosts 解析为类似这样的内容;

<VirtualHost ipaddress:443>
    Servername "hostname.fqdn"
    DocumentRoot "/var/www/"

    SSLEngine on
    SSLCertificateFile  /path/to/cert.crt
    SSLCertificateKeyFile   /path/to/cert.key

<Directory "/var/www">
    Options Indexes FollowSymLinks

    SSLRequireSSL

    AllowOverride None

    Order allow,deny
    Allow from all
</Directory>

<Directory "/var/www/project1">
    AuthType CENTRIFYDC

    EnableBasicAuth     false
    EnableKerberosAuth  false
    EnableNtlmAuth      true

    Require group       required_ad_group
</Directory>


</VirtualHost>

<VirtualHost ipaddress:443>
    ServerName "project1.domain"
    DocumentRoot "/var/www/project1"

    SSLEngine on
    SSLCertificateFile  /path/to/cert.crt
    SSLCertificateKeyFile   /path/to/cert.key



<Directory "/var/www/project1">
    AuthType CENTRIFYDC

    EnableBasicAuth     false
    EnableKerberosAuth  false
    EnableNtlmAuth      true

    Require group       required_ad_group
</Directory>

</VirtualHost>

因此,我会测试类似的东西,然后将它们移出彼此的子目录,并查看哪些指令有冲突

答案2

经过进一步调查,发现问题不在于 Apache 配置。似乎浏览器传递了 NTLM,Apache 接收了它,但 Centrify 没有正确验证它。现在我需要弄清楚问题出在哪里,但那是另一个话题了。

相关内容