NGINX不会提示客户端使用SSL证书

在我们的设置上,我们要提醒用户一个客户端SSL证书。 所有证书都由StartSSL颁发。

问题是即使ssl_verify_client on; 设置为“开启”时,网站/浏览器不会提示input证书。

我怎样才能让NGINX提示客户端证书?

这与这个没有答案的问题有关 。

nginx版本:nginx / 1.9.11

我们的服务器configuration:

 server { listen 80; server_name example.com; # enforce https return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name example.com; # strenghen ssl security ssl_certificate SOMECERT; ssl_certificate_key SOMEKEY; ssl_client_certificate SOMECERT; ssl_verify_client on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; ssl_dhparam SOMEPARAM; # allow longer uri client_header_buffer_size 256k; large_client_header_buffers 8 1024k; # Add headers to serve security related headers add_header Strict-Transport-Security "max-age=15768000; preload;"; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; root /var/www/SOMEFOLDER; index index.php; client_max_body_size 1G; client_body_timeout 600s; # only allow clients with valid client ssl certificate if ($ssl_client_verify != SUCCESS) { return 403; } location ~* \.php$ { fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_read_timeout 600; } } 

几天前我也在同一个问题上挣扎,终于在今天解决了我的问题。 我的问题是我在Chrome中不正确地安装了客户端证书。

我遵循这些步骤来build立相互的TLS身份validation,并得到cURL工作没有任何问题最初: http : //nategood.com/client-side-certificate-authentication-in-ngi

然后,我继续在我的浏览器中安装client.crt以进行客户端身份validation。 这是我出错的地方。 已签名的X.509证书本身不包含客户端的私钥,因此浏览器无法将其识别为客户端身份validation的有效方式。 客户端必须知道私钥才能certificate它拥有向服务器提供的X.509证书。

于是我生成了PKCS12文件,它将X.509客户机证书和私钥组合在一起,并将其安装在浏览器中。 然后我重新启动浏览器和nginx服务器。 这一次,Chrome提示我select已configuration的PKCS12configuration文件,而IE则是自动选取的。

以下是如何创buildPKCS12configuration文件的示例: https : //www.tbs-certificates.co.uk/FAQ/en/288.html

Firefox似乎在自己的怪异世界,因为它不能导入与IE和Chrome一起工作的相同的PKCS12configuration文件。

希望这可以帮助。