我正在使用 httpd 2.2.3 在 RHEL5 上配置我的 Apache 服务器。用户使用具有多个证书的智能卡进行身份验证,但我们希望将浏览器显示的选择限制为特定的。我们已经弄清楚了如何通过将 SSLCADNRequestFile 设置为包含该特定类型证书的中间链的 .pem 来做到这一点。
问题是我们在单个 IP 上定义了多个基于名称的虚拟主机。即使服务器名称不匹配,Apache 似乎也会根据该 IP 上的第一个虚拟主机将响应发送到它接受的证书的浏览器。因此,除非我在第一个虚拟主机或服务器级别定义 SSLCADNRequestFile,否则我无法限制证书选择。此外,所有其他虚拟主机都会受到此设置的影响。
有没有办法使用基于名称的虚拟主机并为每个虚拟主机定义 SSLCADNRequestFile?我的配置有点不同,所以可能还有其他问题在起作用,下面是我的大致配置。
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/certificate.crt
SSLCertificateKeyFile /etc/pki/tls/private/private.key
SSLCACertificateFile /etc/pki/tls/certs/root-certs.pem
SSLCADNRequestFile conf.d/certs-email-only.pem
SSLVerifyClient none
SSLVerifyDepth 2
SSLOptions +ExportCertData
DocumentRoot /var/www/mysite
ServerName www.mysite.com
DirectoryIndex main.html
ProxyPass /api/login ajp://localhost:8009/backend/login
ProxyPassReverse /api/login ajp://localhost:8009/backend/login
Alias /login /var/www/login
<Directory /var/www/login>
DirectoryIndex login.html
</Directory>
ProxyPass /logout ajp://localhost:8009/backend/logout
ProxyPassReverse /logout ajp://localhost:8009/backend/logout
<Location /api>
SSLVerifyClient require
ProxyPass ajp://localhost:8009/backend
ProxyPassReverse ajp://localhost:8009/backend
ProxyPassReverseCookiePath /backend /api
ProxyPassReverseCookieDomain localhost www.mysite.com
</Location>
</VirtualHost>
<VirtualHost *:443>
# VirtualHost impacted by the SSLCADNRequestFile in the above vhost
</VirtualHost>