客户端证书身份验证 Nginx SSL 直通
Client Certificate Authentication Nginx SSL Pass Through
我在 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,
终于找到解决办法了。 passthrough 功能仅嵌入在流指令中(它本身必须包含在 http 指令之外)。所以最后它非常简单和干净:
stream {
server {
listen 443;
allow <IP_TO_BE_ALLOWED>;
deny all;
proxy_pass xxx:xxx;
}
}
我在 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,
终于找到解决办法了。 passthrough 功能仅嵌入在流指令中(它本身必须包含在 http 指令之外)。所以最后它非常简单和干净:
stream {
server {
listen 443;
allow <IP_TO_BE_ALLOWED>;
deny all;
proxy_pass xxx:xxx;
}
}