我有一个运行商业(rapidssl)签名证书的 apache 2 主机,我需要生成客户端证书进行身份验证。
我创建了一个 CA(根据http://www.cafesoft.com/products/cams/ps/docs30/admin/ConfiguringApache2ForSSLTLSMutualAuthentication.html) 并相应地修改了我的 apache 配置文件。
<VirtualHost *:443>
Servername SITEtest.XXX.com
DocumentRoot /SITE/html
CustomLog /SITE/html.log vhost_combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/comercialcert.cer
SSLCertificateChainFile /etc/apache2/ssl/comercialcert.int
SSLCertificateKeyFile /etc/apache2/ssl/comercialcert.key
<Directory /SITE>
AllowOverride All
SSLRequireSSL
SSLCACertificateFile /etc/apache2/ssl/selfsignedcaCA.crt
SSLVerifyClient require
SSLVerifyDepth 1
SSLOptions +StrictRequire +StdEnvVars +ExportCertData +FakeBasicAuth
</Directory>
</VirtualHost>
我把用同一个 CA 生成的 pkcs12 文件导入到浏览器。每次我尝试访问时,apache 错误日志上都会出现错误“重新协商握手失败:客户端不接受!?”。
如果我在 SSLCertificateFile 中使用我的 CA 生成的证书,一切都会正常工作,但由于浏览器将 Web 服务器证书识别为自签名证书,因此它无法按预期工作。
更多细节:
Apache/2.2.9(Debian Lenny)mod_ssl/2.2.9 OpenSSL/0.9.8g
答案1
您可能正在使用已将 tis 重新协商解决方法移植到其中的 Apache 发行版。一个快速的尝试是添加指令SSLInsecureRenegotiation off
。如果不起作用,请将您的SSLVerifyClient
指令更改为Optional
。
这将使服务器面临该目录位置的 TLS 重新协商漏洞,但在 Debian 更新其发行版(或您自定义编译自己的发行版)之前,您对此无能为力。