NGINX를 사용한 SSL/TLS 오프로딩

NGINX 및 NGINX Plus는 대부분의 SSL/TLS 요구 사항을 처리할 수 있는 다양한 기능을 제공합니다. OpenSSL과 표준 프로세서 칩의 성능을 사용하여 비용 효율적인 SSL/TLS 성능을 제공합니다. 표준 프로세서 칩의 성능이 계속해서 증가하고 칩 공급업체가 암호화 가속 지원을 추가함에 따라 특수 SSL/TLS 칩보다 표준 프로세서 칩을 사용하는 비용 이점도 계속해서 확대되고 있습니다.

NGINX에서 HTTPS 트래픽을 해독하면 많은 이점이 있습니다.

SSL/TLS를 사용하는 NGINX 및 NGINX Plus에는 세 가지 주요 사용 사례가 있습니다.

목차

1. SSL/TLS 오프로딩
2. Origin 서버에 대한 SSL/TLS 암호화
3. End-to-End 암호화
4. 클라이언트 인증서
5. 추가 보안 기능
6. 예시

1. SSL/TLS 오프로딩

NGINX를 프록시로 사용하면 백엔드 서버에서 SSL 암호 해독 처리를 오프로드할 수 있습니다. 프록시에서 암호 해독을 수행하면 여러 가지 이점이 있습니다.

  • 향상된 성능 – SSL 암호 해독을 수행할 때 가장 큰 성능 저하가 초기 핸드셰이크(Handshake)입니다. 성능 향상을 위해 암호 해독을 수행하는 서버는 SSL Session ID를 캐시하고 TLS Session 티켓을 관리합니다. 이 작업이 프록시에서 수행되면 동일한 클라이언트의 모든 요청이 캐시된 값을 사용할 수 있습니다. 백엔드 서버에서 수행되는 경우 클라이언트의 요청이 다른 서버로 이동할 때마다 클라이언트는 다시 인증해야 합니다. TLS 티켓을 사용하면 이 문제를 완화하는 데 도움이 될 수 있지만 모든 클라이언트에서 지원되는 것은 아니며 구성 및 관리가 어려울 수 있습니다.
  • 백엔드 서버의 활용도 향상 – SSL/TLS 처리는 CPU를 많이 사용하며 Key 크기가 증가함에 따라 점점 더 집약적이 되고 있습니다. 백엔드 서버에서 이 작업을 제거하면 가장 효율적인 콘텐츠 전달에 집중할 수 있습니다.
  • 지능형 라우팅 – 프록시는 트래픽을 해독하여 헤더, URI 등과 같은 요청 콘텐츠에 액세스할 수 있으며 이 데이터를 사용하여 요청을 라우팅할 수 있습니다.
  • 인증서 관리 – 모든 백엔드 서버가 아닌 프록시 서버에서만 인증서를 구매하고 설치하면 됩니다. 이렇게 하면 시간과 비용이 모두 절약됩니다.
  • 보안 패치 – SSL/TLS 스택에 취약점이 발생하면 적절한 패치를 프록시 서버에만 적용하면 됩니다.

2. Origin 서버에 대한 SSL/TLS 암호화

백엔드 서버로 보내는 트래픽을 암호화하기 위해 NGINX가 필요할 수 있습니다. 이러한 요청은 라우팅 결정을 내리기 위해 NGINX가 해독해야 하는 암호화된 트래픽 또는 일반 텍스트로 NGINX 서버에 도착할 수 있습니다. 백엔드 서버에 대한 keepalive 연결 풀을 사용하면 SSL/TLS 핸드셰이크 수가 최소화되므로 SSL/TLS 성능이 최대화됩니다. 이것은 이미 암호화되지 않은 트래픽을 자동으로 암호화한 후 “https”에 프록시하도록 NGINX를 구성하여 매우 간단하게 달성됩니다.

3. End-to-End 암호화

NGINX는 복호화와 암호화를 모두 수행할 수 있으므로 NGINX가 여전히 Layer 7 라우팅 결정을 내리면서 모든 요청의 End-to-End 암호화를 달성할 수 있습니다. 이 경우 클라이언트는 HTTPS를 통해 NGINX와 통신하고 요청을 해독한 다음 백엔드 서버로 보내기 전에 다시 암호화합니다. 이는 프록시 서버가 백엔드 서버와 함께 데이터 센터에 배치되지 않은 경우 바람직할 수 있습니다. 점점 더 많은 서버가 클라우드로 이동함에 따라 프록시와 백엔드 서버 사이에 HTTPS를 사용해야 하는 필요성이 높아지고 있습니다.

4. 클라이언트 인증서

NGINX는 SSL/TLS 클라이언트 인증서를 처리할 수 있으며 선택 사항 또는 필수 항목이 되도록 구성할 수 있습니다.
클라이언트 인증서는 암호를 요구하지 않고 시스템에 대한 액세스를 사전 승인된 클라이언트로만 제한하는 방법이며, NGINX가 클라이언트 인증서가 유효한지 여부를 확인하는 CRL(인증서 해지 목록)에 해지된 인증서를 추가하여 인증서를 제어할 수 있습니다.

5. 추가 보안 기능

다음을 포함하되 이에 국한되지 않는 이러한 사용 사례를 지원하는 데 도움이 되는 여러 다른 기능이 있습니다.

  • 여러 인증서 – 단일 NGINX 인스턴스는 서로 다른 도메인에 대한 많은 인증서를 지원할 수 있으며 수십만 개의 인증서를 지원하도록 확장할 수 있습니다. 자체 인증서가 필요한 각 도메인과 함께 많은 IP 주소 및 도메인을 제공하는 NGINX 인스턴스를 갖는 것이 일반적인 사용 사례입니다.
  • OCSP 스테이플링 – 이 기능이 활성화되면 NGINX는 클라이언트가 서버의 인증서를 확인하는 데 사용할 수 있는 인증 기관에서 서명한 타임스탬프가 있는 OCSP 응답을 포함하여 OCSP 서버에 직접 연결하여 성능이 저하되는 것을 방지합니다.
  • SSL/TLS 암호 – 활성화할 암호를 지정할 수 있습니다.
  • SSL/TLS 프로토콜 – SSLv2, SSLv3, TLSv1, TLSv1.1 및 TLSv1.2를 포함하여 활성화할 프로토콜을 지정할 수 있습니다.
  • 체인 인증서 – NGINX는 웹사이트의 인증서가 CA(인증 기관)의 루트 인증서가 아닌 일련의 중간 인증서에 의해 직접 서명될 때 사용되는 인증서 체인을 지원합니다. 웹 서버는 중간 인증서가 포함된 ‘인증서 체인’을 제공하므로 웹 클라이언트는 웹사이트 인증서를 신뢰할 수 있는 루트 인증서에 연결하는 신뢰 체인을 확인할 수 있습니다.
  • HTTPS 서버 최적화 – NGINX는 Worker 프로세스 수를 구성하고 keepalive 연결을 사용하며 SSL/TLS 세션 캐시를 사용하여 SSL/TLS 성능을 최대화하도록 조정할 수 있습니다.

자세한 내용은 다음 리소스를 확인하세요.

6. 예시

다음은 NGINX의 보안 기능에 대한 몇 가지 예입니다. 이 예제에서는 NGINX 구성에 대한 기본적인 이해가 있다고 가정합니다.

다음 구성은 http://www.example.com에 대한 HTTP 트래픽을 처리하고 이를 업스트림 그룹에 프록시합니다.

upstream backends {
    server 192.168.100.100:80;
    server 192.168.100.101:80;
}

server {
    listen      80;
    server_name www.example.com;

    location / {
        proxy_pass http://backends;
    }
}

이제 HTTPS 지원을 추가하여 NGINX가 인증서와 Private Key를 사용하여 트래픽을 해독하고 HTTP를 통해 백엔드 서버와 통신하도록 합니다.

upstream backends {
    server 192.168.100.100:80;
    server 192.168.100.101:80;
}

server {
    listen              80;
    listen              443 ssl; # 'ssl' parameter tells NGINX to decrypt the traffic
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt; # The certificate file
    ssl_certificate_key www.example.com.key; # The private key file
  

    location / {
        proxy_pass http://backends;
    }
}

또는 HTTP를 통해 트래픽을 수신하고 HTTPS를 통해 백엔드 서버로 보내는 경우:

upstream backends {
    server 192.168.100.100:443;
    server 192.168.100.101:443;
}

server {
    listen      80;
    server_name www.example.com;

    location / {
        proxy_pass https://backends; # 'https' prefix tells NGINX to encrypt the traffic
    }
}

프로덕션급의 NGINX Plus를 사용해 보려면 지금 무료 30일 평가판을 시작하거나 당사에 연락하여 사용 사례에 대해 논의하십시오.

사용 사례에 대해 최신 소식을 빠르게 전달받고 싶으시면 아래 뉴스레터를 구독하세요.