【发布时间】:2020-06-03 08:54:53
【问题描述】:
我创建了一个 API(在 python 中),我希望与我的同事分享它。我创建了一个运行 API 的 docker 容器,并使用 nginx 来保护传入请求。 对于 SSL/TLS,我现在使用自签名证书。对于身份验证,我在 nginx 中指定需要客户端证书。然后我在 GCP 计算引擎实例上启动了 docker 容器。我确定实例的防火墙规则没问题,因为如果我禁用客户端身份验证设置,一切正常。我的同事可以毫无问题地访问 API。
当我打开客户端身份验证时,问题就开始了。我和两个同事安装了我们的客户证书。选择客户端证书后,我可以像同事 1 一样毫无问题地访问该网站。同事 2 收到要求提供证书的响应,他选择了他的证书,然后每次都得到 ERR_EMPTY_RESPONSE(在 google chrome、edge、postman 上......)。如果他不选择证书,他将获得标准
400 错误请求
未发送所需的 SSL 证书
nginx/1.14.2
这是预期的。
但是是什么导致了 ERR_EMPTY_RESPONSE?身份验证本身似乎有效。
相关nginx代码:
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name 0.0.0.0;
keepalive_timeout 70;
ssl_certificate /etc/ssl/certs/api-server-cert.pem;
ssl_certificate_key /etc/ssl/certs/api-server.pem;
ssl_client_certificate /etc/ssl/certs/CA-cert.pem;
ssl_verify_client on;
location / {
proxy_pass http://0.0.0.0:5000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
client_max_body_size 5M;
}
【问题讨论】:
-
请查看您服务器的错误日志。此外,
http://0.0.0.0:5000/不是正确的目标地址(这可能是问题的原因) - 要访问本地应用程序,请使用http://127.0.0.1:5000/
标签: ssl nginx ssl-certificate