我已将Nginx配置为反向代理,并且使用证书验证了每个客户端调用。但是当我在客户端计算机上浏览时,我收到“ 400错误的请求,未发送所需的SSL证书”
我启用了错误日志,并显示“客户端在读取客户端请求标头时未发送任何必需的SSL证书,客户端:xxxx,服务器:localhost,请求:“ GET /favicon.ico HTTP / 1.1”,主机:“ yyyy”,引荐来源网址:“ https://y.y.y.y/”
我无法弄清它要说的是什么问题。
我的Nginx配置更改 服务器{
error_log "C:/Error/error.log" debug;
listen 443 ssl;
server_name localhost;
#ssl_protocols TLSv1 TLSv1.1;
ssl_certificate "C:/Test/server.crt";
ssl_certificate_key "C:/Test/server.key";
ssl_client_certificate "C:/Test/ca.crt";
ssl_verify_client on;
#ssl_session_cache off;
#proxy_ssl_server_name on;
#proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#proxy_ssl_session_reuse off;
location / {
root html;
index index.html index.htm;
proxy_pass https://10.10.10.10/webservice;
}
谢谢, 维诺德G
答案 0 :(得分:1)
您的配置尝试使用其证书对客户端进行身份验证,并且看起来该客户端未发送该证书。 ** ssl_client_certificate **表示您要针对指向的受信任CA验证客户端证书。然后,服务器会要求客户端发送证书,并且在证书没有收到时必须失败。
可以在此处阅读该过程的图形指南以更好地理解: https://comodosslstore.com/blog/what-is-ssl-tls-client-authentication-how-does-it-work.html
进一步调试:
wireshark等工具可用于检查客户端是否正在发送证书 https://www.linuxbabe.com/security/ssltls-handshake-process-explained-with-wireshark-screenshot
使用Postman之类的工具来设置客户端证书,并检查服务器是否响应预期 https://blog.getpostman.com/2017/12/05/set-and-view-ssl-certificates-with-postman/
此领域的常见问题以及如何解决它们 https://www.thesslstore.com/blog/tls-handshake-failed/