Nginx ssl_trusted_certificate指令失效,启动报ssl_client_verify错误求助
解决Nginx启动报错:nginx: [emerg] no ssl_client_certificate for ssl_client_verify
嘿,这个问题我碰到过好多次了,咱们直接说问题根源和解决方案:
你配置里启用了ssl_verify_client optional,这个指令要求Nginx验证客户端证书,但你只设置了ssl_trusted_certificate,却漏掉了必须的ssl_client_certificate指令。
为什么会报错?
ssl_client_certificate的作用是告诉Nginx:哪些CA机构颁发的客户端证书是我们认可的,它会加载这些CA的证书到Nginx中,用来匹配客户端提交的证书 issuer。ssl_trusted_certificate则是用来做更深入的证书链验证(比如检查CRL吊销列表),但它不能替代ssl_client_certificate的作用。
所以当你开启客户端证书验证(哪怕是optional可选模式),Nginx必须知道从哪里获取可接受的客户端CA证书集合,否则就会抛出这个错误。
修改后的配置示例
把ssl_client_certificate指令加到你的server块里,指向你的证书bundle文件就可以(和ssl_trusted_certificate用同一个文件完全没问题):
# HTTPS server server { listen 4443; server_name localhost; ssl on; ssl_certificate /home/user/conf/ssl/server.pem; ssl_certificate_key /home/user/conf/ssl/server.pem; ssl_protocols TLSv1.2; ssl_verify_client optional; # 添加这一行,指定客户端证书的CA集合 ssl_client_certificate /home/user/ssl/certs/certificate_bundle.pem; ssl_trusted_certificate /home/user/ssl/certs/certificate_bundle.pem; include conf.d/api_proxy.conf; }
额外说明
如果你的certificate_bundle.pem里已经包含了所有需要的CA根证书和中间证书,这样配置就完全足够了。重启Nginx应该就能正常启动啦~
内容的提问来源于stack exchange,提问作者user1918858
相关产品推荐
相关产品推荐

