我的公司从供应商处购买了通配符证书。此证书已成功配置为 Apache 2.2 以保护子域。SSL 端一切正常。
现在我需要生成 x509 客户端证书来颁发给这个子域。我按照这个页面操作:(http://www.vanemery.com/Linux/Apache/apache-SSL.html),从“创建用于身份验证的客户端证书”开始。
我已经生成了 p12 文件并成功将其导入 Firefox。现在当我浏览该网站时,FireFox 中出现错误“页面加载时,与服务器的连接被重置。”
我认为我的问题是由于没有正确签署客户端。当我签署客户端证书时,我使用 RapidSSL(我们从其处购买了证书)的 PEM 文件 (RapidSSL_CA_bundle.pem) 作为 -CA 参数。对于 -CAkey 参数,我使用服务器的私钥。这样正确吗?
答案1
可能是您使用的客户端证书的密钥用法不正确。请验证您的密钥用法是否正确:
- 批判的
- 签名
- 不可否认性
- 密钥加密
如果您正在使用扩展密钥用法,请检查
- 不严重
- TLS Web 客户端身份验证
- 电子邮件保护
在服务器端,验证您是否拥有用于签署客户端证书的所有 CA 证书,并且已设置相关的 PKI 层次结构。在典型的 Apache 设置中,如下所示:
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /var/www/
ServerName service.example.net
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
</Directory>
SSLEngine on
SSLOptions +StdEnvVars
SSLCertificateFile /usr/local/ssl/certs/Server.crt
SSLCertificateKeyFile /usr/local/ssl/private/Server.key
SSLCACertificateFile /usr/local/ssl/certs/caRoot.cacert.pem
SSLVerifyClient require
ErrorLog logs/service.example.net-443-error_log
LogLevel info
CustomLog logs/service.example.net-443-access.log combined
最后,你可以尝试使用老版本的 openssl 进行调试
openssl s_client -connect server.example.net:443 -CAfile ../ca/caRoot.crt -cert client-Access.crt -key client-Access.key -showcerts
或卷曲
curl -kv --key client-Access.key --cert client-Access.crt --cacert ../ca/caRoot.crt https://server.example.net/
祝你好运!