클라이언트 인증서 인증을 사용하는 Gitblit용 역방향 프록시인 Nginx. SSL 핸드셰이크가 업스트림으로 핸드셰이크되는 동안 피어가 SSL 핸드셰이크에서 연결을 닫았습니다.

클라이언트 인증서 인증을 사용하는 Gitblit용 역방향 프록시인 Nginx. SSL 핸드셰이크가 업스트림으로 핸드셰이크되는 동안 피어가 SSL 핸드셰이크에서 연결을 닫았습니다.

클라이언트 인증서 인증을 통해 nginx를 gitblit의 역방향 프록시로 사용했습니다.

아래와 같이 nginx 구성이 주어졌습니다.

server {
listen       443 ssl http2 default_server;
server_name  _;

charset utf-8;

ssl_certificate      D:\cert.pem;
ssl_certificate_key  D:\key.pem;

ssl_session_cache    off;
ssl_session_timeout  1h;
ssl_buffer_size 8192;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers  HIGH:!aNULL:!MD5;

ssl_client_certificate D:\Program\GitBlit\gitblit-1.8.0\data\certs\ca.pem;
ssl_verify_client optional;

ssl_prefer_server_ciphers  on;
proxy_intercept_errors on;          

location /git {
    proxy_pass https://127.0.0.1:1111;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    
    proxy_ssl_verify off;
    proxy_ssl_name $host;
    proxy_ssl_server_name on;
    proxy_ssl_session_reuse off;
}
}

웹 클라이언트를 만들려면 ssl_verify_client optional;https://my_server/git로 이동할 때 클라이언트 인증서가 필요합니다. 그런데 502 잘못된 게이트웨이 오류가 발생했습니다. 아래와 같은 nginx 오류 로그가 있으며 gitblit에서는 오류 로그가 표시되지 않습니다.

2023/10/25 14:48:14 [error] 29404#2072: *43 peer closed connection in SSL handshake while SSL handshaking to upstream, client: 127.0.0.1, server: _, request: "GET /git/ HTTP/2.0", upstream: "https://127.0.0.1:1111/git/", host: "127.0.0.1"

내가 다음 페이지로 이동하면https://127.0.0.1:1111/git동일한 클라이언트 인증서를 제공하면 인증이 제대로 작동합니다. gitblit SSL 인증서는 자체 서명된 CA(ssl_client_certificate의 경우 D:\Program\GitBlit\gitblit-1.8.0\data\certs\ca.pem)에 의해 my_server에 서명됩니다.

nginx가 gitblit에서 SSL 인증서를 인식하지 못했거나 인증을 위해 클라이언트 인증서를 전달하지 못했기 때문입니까?

관련 정보