특정 위치에서만 클라이언트 인증서를 확인하는 Nginx


14

우리는 Nginx를 웹 애플리케이션 서버에 대한 리버스 프록시로 사용합니다. Nginx는 SSL을 처리하지만 그렇지 않으면 리버스 프록시 역할을합니다.

요청에 유효한 클라이언트 인증서가 /jsonrpc필요하지만 다른 곳에서는 요구하지 않습니다. 우리가 찾은 가장 좋은 방법은

server {
  listen       *:443 ssl;

  ssl on;
  ssl_certificate         /etc/nginx/server.crt;
  ssl_certificate_key     /etc/nginx/server.key;
  ssl_client_certificate  /etc/nginx/client-ca.crt;

  ssl_verify_client optional;

  location /jsonrpc {
    if ($ssl_client_verify != "SUCCESS") { return 403; }

    proxy_pass          http://localhost:8282/jsonrpc-api;
    proxy_read_timeout  90;
    proxy_redirect      http://localhost/ $scheme://$host:$server_port/;
  }
}

이것은 대부분의 브라우저에서 잘 작동하지만 Safari 및 Chrome-on-Android와 같은 일부 브라우저는 웹 사이트의 위치에 관계없이 클라이언트 인증서를 제공하라는 메시지를 표시합니다.

우리는 어떻게 Nginx가 우리의 /jsonrpc위치를 제외한 모든 곳에서 클라이언트 인증서를 수락하지만 실제로 신경 쓰지 않습니까?

답변:


8

두 번째 서버 블록을 대신 시도하지 않는 이유는 무엇 입니까? 코드 복제는 좋지 않지만 때로는 피할 수없는 경우가 있습니다. / jsonrpc가 API를 나타내므로 아직 사용하지 않는 경우 자체 하위 도메인을 사용할 수 있다고 가정합니다.

server {
  listen       *:443 ssl;
  server_name api.example.com;

  ssl on;
  ssl_certificate         /etc/nginx/server.crt;
  ssl_certificate_key     /etc/nginx/server.key;
  ssl_client_certificate  /etc/nginx/client-ca.crt;

  ssl_verify_client on;

  location =/jsonrpc {
    proxy_pass          http://localhost:8282/jsonrpc-api;
    proxy_read_timeout  90;
    proxy_redirect      http://localhost/ $scheme://$host:$server_port/;
  }
}

server {
  listen       *:443 ssl;

  ssl on;
  ssl_certificate         /etc/nginx/server.crt;
  ssl_certificate_key     /etc/nginx/server.key;
  ssl_client_certificate  /etc/nginx/client-ca.crt;

  ssl_verify_client off;

  location / {
    proxy_pass          http://localhost:8282/;
    proxy_read_timeout  90;
    proxy_redirect      http://localhost/ $scheme://$host:$server_port/;
  }
}

이것이 올바른 구성을 모두 같은 server블록 에 배치하는 방법을 알 수 없다면 아마도 우리가 결국 할 일 입니다. 우리는 Apache를 사용할 때 이와 같은 문제가 없었으므로 여기에서 작동하는 설정이 있기를 바랍니다.
Eli Courtwright

1
@EliCourtwright이 질문은 오래 전에 알고 있지만 두 개의 서버 블록보다 더 나은 솔루션을 찾은 적이 있습니까?
N Jones

2
@NJones : 안타깝게도 그게 우리가해야 할 일입니다.
Eli Courtwright

동일한 도메인 www.example.com에 대해 모든 것이 응답해야하는 경우 이와 같은 접근 방식이 여전히 효과가 있습니까?
Freedom_Ben
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.