apache2 - Apache 2、SSL 和客户端证书

标签 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

这反而会失败(注意 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 等)时遇到的情况。

有什么想法吗?

最佳答案

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

NameVirtualHost *:443

参见http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI

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

关于apache2 - Apache 2、SSL 和客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17260063/

相关文章:

ios - 如何快速更改现有通知的用户信息?需要维护用户登录记录

authentication - 即使使用 AuthorizeFilter,Asp.Net Core MVC 中间件也返回 404 而不是 401

Apache:允许一台主机使用 TLS 1.0,同时强制所有其他主机使用 1.2?

ssl - 支持 Apache ssl 的虚拟主机返回随机 400 错误请求

ssh - Dropzone-服务器响应0代码

apache2 不适用于不同端口

php - 将我的网站从 Windows Apache Server 移植到 Linux Apache 服务器,并出现警告

ubuntu - 从本地网络访问 apache

php - 来自更多位置的 "Remember me"

apache - Jenkins + Apache + SSL = 无可用更新