Apache2 Apache 2、SSL和客户端证书
我已经使用SSL设置了许多虚拟主机。一切都很顺利。然后,我需要将SSL客户端身份验证添加到其中一个(我们称之为SVN主机)。为SVN主机启用客户端证书后,主机停止工作,而将使用默认虚拟主机(这意味着将提供不匹配的服务器证书,这样既不能访问安全主机,也不能进行客户端身份验证) 以下是我正在使用的虚拟主机配置: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
<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