我正在尝试使用客户端证书来限制对apache2 Web服务器的安全访问。但是,安装后,谷歌浏览器会返回ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED错误。
首先,我通过创建CA密钥和X509 PEM文件来设置Web服务器的CA:
openssl genrsa -out CA.key 2048
openssl req -x509 -new -nodes -key CA.key -days 7300 -out CA.pem
我已经在apache2中设置了该网站的现有证书,用于受信任的第三方分配的https通信。以下是此网站的apache2 conf设置,其中包括上面生成的证书的SSLCACertificateFile,SSLOptions,SSLVerifyClient和SSLVerfiyDepth指令:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName site.aname.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/site
<Directory /var/www/html/site>
Options FollowSymLinks
AllowOverride All
Require all granted
SSLOptions +StdEnvVars
SSLVerifyClient require
SSLVerifyDepth 1
</Directory>
LogLevel debug
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCACertificateFile /etc/apache2/ssl/site/CA.pem
SSLCertificateFile /etc/apache2/ssl/site/fullchain.pem
SSLCertificateKeyFile /etc/apache2/ssl/site/privkey.pem
Include /etc/apache2/ssl/site/options-ssl-apache.conf
</VirtualHost>
</IfModule>
这将在没有客户端证书的情况下完成Web服务器的配置和测试,并获得预期的错误。
然后我生成客户端证书并与CA签署,然后使用以下私钥将其打包在pkcs12中:
生成:
openssl genrsa -out user.key 2028
openssl req -new -key user.key -out user.csr
签收:
openssl x509 -sha256 -req -in user.csr -out user.crt -CA CA.pem -CAkey CA.key -CAcreateserial -days 1095
创建PKCS12:
openssl pkcs12 -export -out user.pfx -inkey user.key -in user.crt
然后将生成的user.pfx安装在运行chrome的用户计算机上。
尝试连接时,Chrome要求输入选择的密钥,结果是错误ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED。
在Windows 10下运行的Chrome版本为:74.0.3729.169版(官方内部版本)(64位)
更新: 我可以使用以下命令从另一台Linux服务器成功连接curl:
curl --cert user.crt --key user.key --pass password https://site.aname.com/
但是,与Windows 10命令行相同的结果是: curl:(35)schannel:下一个InitializeSecurityContext失败:未知错误(0x80090027)-参数不正确
答案 0 :(得分:0)
已解决,方法是确保已签名的用户证书是“版本3” X.509证书,并在v3扩展中同时指定“密钥用法”和“增强的密钥用法”属性。通过修改X509登录请求或如果您使用openssl CA命令,可以实现openssl.conf文件。