我已经设置了许多使用 SSL 的虚拟主机。一切正常。然后我需要将 SSL 客户端身份验证添加到其中之一(我们称之为 SVN 主机)。为 SVN 主机启用客户端证书后,主机停止工作,改为使用默认虚拟主机(这意味着将提供不匹配的服务器证书,因此既不能访问安全主机,也不能进行客户端身份验证工作)。
这是我正在使用的虚拟主机配置:
<VirtualHost *:443>
ServerName svn.anydomain.com
SSLEngine on
SSLOptions +StrictRequire
SSLProtocol -all +TLSv1
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!SSLv3:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/certs/svn.crt
SSLCertificateKeyFile /etc/certs/svn.key
SSLCertificateChainFile /etc/certs/starcom/sub.class1.server.ca.pem
SSLCACertificateFile /etc/certs/cacert.crt
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
SSLVerifyClient require
SSLVerifyDepth 2
SSLUserName SSL_CLIENT_S_DN_CN
<Location /path0>
DAV svn
SSLRequireSSL
SVNPath /var/svn/path0
#Require valid-user
</Location>
<Location /path1>
DAV svn
SSLRequireSSL
SVNPath /var/svn/path1
#Require valid-user
</Location>
</VirtualHost>
另外,我似乎只在 Mac OS X 上遇到了这个问题。我可以毫不费力地从 Windows 8 访问主机。基本上,在我的 Mac 上,我只能使用 curl 中的这些选项(有时,不一致)
curl -v -v -v -1 -k --cacert Documents/Certs/CACert.pem --cert Documents/Certs/ClientCert.pem https://svn.anydomain.com/path1
这反而失败了(注意 SSLv3 而不是 TLSv1 的 -3 而不是 -1)
curl -v -v -v -3 -k --cacert Documents/Certs/CACert.pem --cert Documents/Certs/ClientCert.pem https://svn.anydomain.com/path1
并返回默认虚拟主机的证书。这种行为(错误的虚拟主机)是我在我的 Mac(Safari、Eclipse+Subversive、Cornerstone 等)上对该域的任何访问所获得的。
有任何想法吗?