如何配置 Nginx 双向 SSL 的密钥库?

如何配置 Nginx 双向 SSL 的密钥库?

我想配置我的 Nginx 以使用相互 SSL 来验证连接到我的服务器的客户端。因此,我在 nginx conf 中有以下设置:

access_log   /var/www/logs/app.nginx-access.log;
error_log    /var/www/logs/app.nginx-error.log info;

# SSL config
ssl                  on;
ssl_session_cache    shared:SSL:5m;
ssl_session_timeout  10m;
ssl_ciphers  HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers  on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/letsencrypt/live/domain-name.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain-name.com/privkey.pem; # managed by Certbot

#setting for mutual ssl with client
ssl_client_certificate /etc/nginx/ssl/clients.crt;
ssl_verify_client on;
ssl_verify_depth 10;

然后我在 中添加了一个测试客户端证书(.crt 文件),并重新启动 nginx 服务器进行测试。当我使用全链 pem(内部有两个中间 CA 主机)通过 cmdclients.crt连接时,nginx 错误日志记录了:curl

2020/10/28 09:32:51 [info] 15940#15940: *7 client SSL certificate verify error: (2:unable to get issuer certificate) while reading client request headers, client: 172.104.96.232, server: ...

我搜索了一下,发现 openssl 无法将 chained-cert 文件一直验证到其根 CA。我使用的是 ubunbu v16,发现/etc/ssl/certs文件夹中已经指定了一堆根 CA。

我的问题是如何指定 Nginx/openssl 来查看该目录并找到合适的根 CA 进行验证?

谢谢你!

答案1

如果你读过文档ssl_client_certificate将会看到它说:

指定用于验证客户端证书的 PEM 格式的受信任 CA 证书文件

因此,您将根 CA 证书添加到此文件,并配置您的客户端以将最终实体(客户端)证书与任何中间 CA 证书一起发送。

相关内容