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

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

我的公司从供应商处购买了通配符证书。此证书已成功配置为 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/

祝你好运!

相关内容