我创建了一个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;
}
答案 0 :(得分:0)
不确定我应该删除此问题还是自己回答。 显然这不是服务器端的问题。某些防病毒软件会在没有警告的情况下阻止具有不受信任证书的网站。因此,将url / ip地址添加到防病毒白名单即可解决此问题。