Apache 2,SSL和客户端证书

时间:2013-06-23 10:59:08

标签: apache2 authentication mod-ssl

我已经使用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

相反失败(注意-3而不是SSLv3的-1而不是TLSv1)

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等)。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在您的apache配置文件中,请确保已添加:

NameVirtualHost *:443

请参阅http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

确保NameVirtualHost在使用该IP和端口的任何<VirtualHost ...>之前。如果您忘记/错放了NameVirtualHost行或浏览器不支持SNI,Apache将选择第一个可用的vHost。

答案 1 :(得分:1)

您是否在httpd.conf中调高了日志级别?尝试启用调试消息并运行tail -f error_log以查看是否显示任何有趣的内容。

SSL客户端身份验证的常见问题是SSLVerifyDepth参数。 SSLVerifyDepth号码必须至少与客户端证书链中的证书数量一样大。
示例:SSLVerifyDepth 10

  

深度实际上是中间证书颁发者的最大数量,即验证客户端证书时允许遵循的最大CA证书数量。深度为0表示仅接受自签名客户端证书,默认深度为1表示客户端证书可以自签名,或者必须由服务器直接知道的CA签名(即CA的证书是根据SSLCACertificatePath)等。
  
http://www.modssl.org/docs/2.6/ssl_reference.html