Apache2 Apache 2、SSL和客户端证书

Apache2 Apache 2、SSL和客户端证书,apache2,authentication,mod-ssl,Apache2,Authentication,Mod Ssl,我已经使用SSL设置了许多虚拟主机。一切都很顺利。然后,我需要将SSL客户端身份验证添加到其中一个(我们称之为SVN主机)。为SVN主机启用客户端证书后,主机停止工作,而将使用默认虚拟主机(这意味着将提供不匹配的服务器证书,这样既不能访问安全主机,也不能进行客户端身份验证) 以下是我正在使用的虚拟主机配置: <VirtualHost *:443> ServerName svn.anydomain.com SSLEngine on SSLOptions +StrictRequir

我已经使用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>
这反而会失败(请注意,对于SSLv3而不是TLSv1,使用-3而不是-1)

并返回默认虚拟主机的证书。这种行为(错误的虚拟主机)是我在Mac上访问该域(Safari、Eclipse+Subversive、基石等)时得到的


有什么想法吗?

在apache配置文件中,确保添加了:

NameVirtualHost *:443


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

您是否在httpd.conf中调高了日志级别?尝试在启用调试消息并跟踪错误日志的情况下运行,以查看是否显示任何有趣的内容。 SSL客户端身份验证的一个常见问题是SSLVerifyDepth参数。SSLVerifyDepth编号必须至少与客户端证书链中的证书数量相同。
示例:SSLVerifyDepth 10

深度实际上是中间证书颁发者的最大数量,即验证客户端证书时允许遵循的最大CA证书数量。深度为0表示只接受自签名客户端证书,默认深度为1表示客户端证书可以自签名或必须由服务器直接知道的CA签名(即CA的证书位于SSLCACertificatePath下),等等


谢谢我的配置已按您所述进行设置。有趣的是,如果我删除“sslverifyclientrequire”指令,一切都会正常工作。实际上,只有该指令使我的配置失败:-(听起来这个问题与您的客户机本身有关,而不是Apache config。Safari和基石都使用OSX密钥链,请确保您的客户机证书和密钥链在密钥链管理器中可用(仔细检查客户机证书本身是否有私钥)。需要手动设置Eclipse+Subversive,说明如下:
curl -v -v -v -3 -k --cacert Documents/Certs/CACert.pem --cert Documents/Certs/ClientCert.pem  https://svn.anydomain.com/path1
NameVirtualHost *:443