考虑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:无法获得颁发者证书)而SSL握手到上游时,同时使用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_代理_module.html
关闭proxy_ssl_verify;启用或禁用对代理HTTPS服务器证书的验证。proxy_ssl_verify_depth编号;在代理的HTTPS服务器证书链中设置验证深度。proxy_ssl_trusted_certificate文件;指定具有可信CA证书的文件,格式为PEM格式,用于验证代理HTTPS服务器的证书。
发布于 2021-02-09 15:12:46
如文档所述,proxy_ssl_trusted_certificate
期望CA证书(S)用于验证上游服务器的TLS证书。您似乎提供了上游服务器的TLS证书链。提供CA证书(S)。
https://serverfault.com/questions/1052968
复制相似问题