考虑 nginx 的参数proxy_ssl_verify
,proxy_ssl_trusted_certificate
这些参数用于保护与上游服务器的通信。
# downstream server: nginx.conf
stream {
server {
# ...
proxy_ssl on;
proxy_ssl_verify on;
proxy_ssl_trusted_certificate /etc/nginx/ssl/upstream.example.com/chain.pem;
proxy_ssl_verify_depth 2;
}
}
我的印象是,对于proxy_ssl on
,nginx 会upstream.example.com
根据proxy_ssl_trusted_certificate
.
但是,我遇到了一个问题,即 nginx 无法与上游服务器建立安全连接并报告上游 SSL 证书验证错误: (2:unable to get issuer certificate) while SSL handshashing to upstream,同时验证证书openssl
确实有效。
# fullchain.pem: certificate sent by the upstream server
# chain.pem: CA certificate for `proxy_ssl_trusted_certificate`
# openssl verify -CAfile chain.pem fullchain.pem
fullchain.pem: OK
这让我想知道nginx实际上是如何进行验证的。有没有办法单独重现这个以调试为什么会发生错误?
文档
https://nginx.org/en/docs/http/ngx_http_proxy_module.html
proxy_ssl_verify on | 离开;启用或禁用代理 HTTPS 服务器证书的验证。
proxy_ssl_verify_depth 编号;在代理的 HTTPS 服务器证书链中设置验证深度。
proxy_ssl_trusted_certificate 文件;指定具有 PEM 格式的受信任 CA 证书的文件,用于验证代理 HTTPS 服务器的证书。
正如文档所说,
proxy_ssl_trusted_certificate
期望 CA 证书用于验证上游服务器的 TLS 证书。您似乎已经提供了上游服务器的 TLS 证书链。请改为提供 CA 证书。