我想配置我的 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 证书一起发送。