태그 보관물: ssl

ssl

업스트림 SSL을 사용하는 리버스 프록시 인 nginx SSL을 통해

클라이언트가 자체 서명 된 인증서를 설치할 필요없이 연결할 수 있도록 내부 API에 대한 프록시를 작성 중입니다.

클라이언트 (빌드, 소유 및 내부에서만 사용)는 SSL을 통해 nginx 상자에 연결되며 XSendfile 을 사용 하여 응용 프로그램 수준 (레일 앱)에서 자격 증명을 확인합니다. 자격 증명이 유효하면 연결이 nginx로 다시 전달되며 여기서 proxy_pass를 사용하여 업스트림 서버로 연결을 보냅니다.

이제 이것은 표준 http 연결에 효과적이지만 인증서를 믹스에 추가하는 방법을 알아 내려고합니다.

이 질문은 거의 동일 이 하나 ,하지만 어색 인증서 요구 사항.

nginx에서도 가능합니까? 더 나은 해결책이 있습니까?

또한 클라이언트-> nginx에서 http를 설정하고 nginx에서 API로 자체 서명 된 인증서를 설정했습니다.



답변

nginx를 사용하려는이 질문에 걸려 넘어지는 사람은 일반 프록시처럼 이것을 설정하고 백엔드에서 자체 서명 된 인증서를 수락하려면 내 보낸 pem 인증서 (및 키)를 제공하고 SSL 확인을 설정해야합니다 떨어져서. 예를 들면 다음과 같습니다.

...

server {
    listen       10.1.2.3:80;
    server_name  10.1.2.3 myproxy.mycompany.com;

    location / {
         proxy_pass                    https://backend.server.ip/;
         proxy_ssl_trusted_certificate /etc/nginx/sslcerts/backend.server.pem;
         proxy_ssl_verify              off;

         ... other proxy settings
    }

보안 백엔드가 IP / 포트 쌍마다 여러 호스트가 제공되는 서버 이름 식별 SNI를 사용하는 proxy_ssl_server_name on;경우 구성 에 포함해야 할 수도 있습니다 . 이것은 nginx 1.7.0 이상에서 작동합니다.


답변

나는 당신이 아마 이런 것을 원한다고 생각합니다 (이 예제에서는 분명히 단순화되었습니다).

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    upstream backend {
        server mybackendserver:443;
    }

    server {
        server_name localhost;
        listen 443 ssl;
        ssl_certificate /etc/nginx/server.crt;
        ssl_certificate_key /etc/nginx/server.key;
        ssl_verify_client off;
        location / {
            proxy_pass  https://backend;
            proxy_set_header Host $http_host;
            proxy_set_header X_FORWARDED_PROTO https;
        }
    }
}

예를 들어 프록시 된 호스트 이름이 nginx 프록시 서버에서 사용 된 호스트 이름과 같지 않은 경우 “Host”를 명시 적으로 변경해야합니다.


답변

앞으로이 문제를 겪는 사람에게는 nginx를 사용하지 않았습니다.

대신 “클라이언트 모드”에서 stunnel을 사용했습니다. 설정이 매우 쉽고 필요한 것을 정확하게 수행합니다.


답변