NGINX 无法获取颁发者证书

NGINX 无法获取颁发者证书

我正在使用 NGINX Web 服务器。配置我的网站,使用以下设置,当用户第一次向网站发出请求时,需要出示证书:

ssl_client_certificate /path/to/ca/cert/ca.crt;
        ssl_verify_client on;

当用户访问该网站时,系统会提示他出示证书。但在选择证书后,他收到以下消息:

400 Bad Request
The SSL certificate error
nginx/1.12.2

访问日志显示: "GET / HTTP/2.0" 400 633 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"

错误日志显示: client SSL certificate verify error: (2:unable to get issuer certificate) while reading client request headers, client: 190.130.110.5, server: $xyz.net, request: "GET / HTTP/2.0", host:

跑步openssl verify -CAfile /etc/nginx/certs/ca.crt /etc/nginx/certs

导致以下错误:

unable to load certificate
140622725740432:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:707:Expecting: TRUSTED CERTIFICATE

我对 NGINX 还很陌生,缺乏想法。请帮忙。

答案1

您的客户端必须向服务器出示链中除根 CA 之外的所有证书。

如果您的客户端是浏览器,它必须能够访问颁发客户端证书的 CA 证书以及所有其他中间 CA 证书(但不一定包括根 CA 证书)。

当使用 OpenSSL 等命令行工具时,客户端证书文件必须是一组证书,它以客户端证书开始并按顺序包含所有其他 CA 证书,直到但不一定包括根 CA 证书。

在这两种情况下,发送根是可选的,但没有任何用处。

欲了解更多信息,请阅读RFC 5246 第 7.4.6 节,指的是第 7.4.2 节certificate_list结构。

相关内容