我正在尝试通过 nginx 代理将搜索请求从 Web 服务器发送到另一台服务器。我有 server_hostname.pem 文件作为服务器证书,ca-chain.cert.pem 文件作为客户端证书。但是,我没有看到来自目标服务器的任何搜索结果。当我对该服务器:端口执行 curl 命令时,我看到 400 Bad Request for SSL 证书错误。我认为这肯定是证书问题。然后我尝试查看 nginx 的错误日志。我发现 26:不支持的证书目的错误。为了从 Web 服务器验证目标服务器的证书,我尝试了以下命令:openssl s_client -connect target_server:port -CAfile web_server.pem
而且,我看到返回代码 21(无法验证第一个证书)。有人知道如何解决此问题吗?提前谢谢。我对 SSL/TLS 的理解非常基础。所以,如果有人需要有关此问题的更多详细信息,请告诉我。
答案1
证书实际上由三部分组成:私钥、公钥和证书颁发机构 (CA) 链。在这种情况下,服务器证书是私钥,您应该发布公钥作为客户端密钥,并且该链也应该可供服务器和客户端使用 - 通常在配置中有一个位置,通常称为 CA 或颁发机构证书链。您收到此错误的原因是,您在需要客户端证书/公钥的地方传递了 CA 链,而 CA 链的目的不是识别特定主机,而是确认识别主机的颁发机构。