客户端证书(Apache,Linux,OpenSSL)

我的公司从供应商处购买了通配符证书。 此证书已成功configuration为使用Apache 2.2来保护子域。 SSL端的一切工作。

现在我需要为这个子域生成x509客户端证书。 我沿着这个页面:( http://www.vanemery.com/Linux/Apache/apache-SSL.html ),从“创build用于身份validation的客户端证书”开始。

我已经生成了p12文件并成功导入到Firefox。 当我现在浏览到这个网站时,在FireFox中出现一个错误,提示“在加载页面的时候,服务器的连接被重置了。

我认为我的问题来自没有正确签署客户端。 当我签署客户端证书时,我正在使用RapidSSL(我们从中购买证书)的PEM文件(RapidSSL_CA_bundle.pem)作为-CA参数。 对于-CAkey参数,我正在使用服务器的私钥。 它是否正确?

可能是因为您正在使用错误密钥用法的客户端证书。 请确认您的密钥使用情况如下:

  • 危急
  • 签名
  • 不可否认
  • 密钥encryption

如果您正在使用扩展密钥用法,请检查

  • 不关键
  • TLS Web客户端身份validation
  • 电子邮件保护

在服务器端validation您是否拥有用于签署客户端证书的所有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进行debugging

 openssl s_client -connect server.example.net:443 -CAfile ../ca/caRoot.crt -cert client-Access.crt -key client-Access.key -showcerts 

或curl

 curl -kv --key client-Access.key --cert client-Access.crt --cacert ../ca/caRoot.crt https://server.example.net/ 

祝你好运!