【发布时间】:2019-07-04 04:52:07
【问题描述】:
我在 docker 注册表之前设置了 NGINX 作为代理。注册表使用 tls 对用户进行身份验证(并且配置正确;我可以使用证书在集群内拉取图像)。 nginx是这样配置的:
server {
listen 443;
server_name default_server;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
if ($remote_addr != xxx) {
return 403;
break;
}
proxy_set_header Host $host;
proxy_pass https://xxx:xxx;
break;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
现在,当我尝试使用这样的有效证书进行卷曲时:
curl -v --key client.key --cert client.cert xxx:xxx/v2/_catalog
我在 docker 注册表日志中收到 http: TLS handshake error from xxx:xxx: tls: client didn't provide a certificate 错误。 nginx 配置正确还是缺少某些东西?关于如何进一步调试的任何想法?
NGINX 日志状态:
[error] 8#8: *65 SSL_do_handshake() failed (SSL: error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:SSL alert number 42) while SSL handshaking to upstream,
【问题讨论】:
-
你在哪里卷曲?同一个nginx服务器?
-
我的本地电脑
-
试试看:curl -v --key client.key --cert client.cert xxx:443/v2/_catalog
-
这个有效:
curl -v -k --key client.key --cert client.cert docker-registry-ip:port/v2/_catalog这个无效:curl -v -k --key client.key --cert client.cert https://localhost:443/v2/_catalog导致SSL routines:ssl3_get_record:wrong version number -
更改 server_name 本地主机;证书应该归你用来卷曲的域(localhost 或 xxx 域)所有,然后再次卷曲
标签: docker nginx tls1.2 docker-registry nginx-reverse-proxy