본문 바로가기

Program

Windows 2016 이하 Server에서 TLS 1.3 적용

반응형

https://docs.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-

 

Protocols in TLS/SSL (Schannel SSP) - Win32 apps

The schannel SSP implements versions of the TLS, DTLS and SSL protocols. Different Windows versions support different protocol versions.

docs.microsoft.com

해당 문서를 보면 TLS 1.3을 Windows 2022부터 지원하는 것으로 확인된다.

Window 2016 이하 Server에서 TLS 1.3을 지원하기위해 Nginx를 Proxy로 사용하고

Nginx서버를 IIS와 연결하여 서비스하도록 구성한다.

*Nginx는 TLS 1.3을 지원

 

 

 

 

 

 

IIS 셋팅이 완료된 상태 이후부터 설명한다.

 

 

SSL(TLS1.3) 통신을 위한 인증서 생성

 

 

OpenSSL을 이용하여 인증서(CRT) 생성 방법

위 링크를 통해 Private Key와 CRT파일을 생성하고 잘 보관해둔다.

이미 인증서를 가지고 있다면 해당 링크는 패스해도 된다.

 

 

 

Nginx 설치 및 서비스 등록

 

 

nginx windows service로 등록

위 링크를 통해 Nginx를 설치하고 서비스로 실행 가능하도록 구성한다.

*Nginx가 실행이 안될경우 기존 IIS에서 사용 중인 Port와 충돌이 발생하였을 확률이 높다.

IIS에서 80포트가 실행 중인지 확인 후 Nginx를 다시 실행해보면 문제없을 것이다.

 

 

 

Nginx Proxy 설정

 

 

 

Nginx서비스를 중지하고 Nginx\conf\nginx.conf파일을 수정한다.

아래와 같은 파일로 변경한다. (노란색은 해당 경로에 맞게 변경한다.)

 명령어
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    # Site1 443 port
    server {
        listen 443 ssl;
        server_name Domain or IP;
        client_max_body_size 128M;

        ssl_certificate CRT파일 저장경로;
        ssl_certificate_key Private Key 저장 경로;
        ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 60m;
        ssl_protocols TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;

        ssl_prefer_server_ciphers on;
        ssl_stapling off;
        ssl_stapling_verify on;
        ssl_ecdh_curve secp384r1;

        add_header Strict-Transport-Security "max-age=63072000;" always;

        location / {
            proxy_pass         리다이렉트 IP:Port;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_connect_timeout 3000s;
            proxy_send_timeout 3000s;
            proxy_read_timeout 3000s;
            send_timeout 3000s;
            proxy_buffering off;
            proxy_buffer_size 128k;
            proxy_buffers 100 128k;
        }
    }
    
}

 

실제 적용한 nginx.conf

443 포트로 Nginx로 들어오면 127.0.0.1:80 포트(IIS)로 연결하도록 설정.

 명령어
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    # Site1 443 port
    server {
        listen 443 ssl;
        server_name localhost;
        client_max_body_size 128M;

        ssl_certificate C:\TLS13_TEST\host.crt;
        ssl_certificate_key C:\TLS13_TEST\host.key;
        ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 60m;
        ssl_protocols TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;

        ssl_prefer_server_ciphers on;
        ssl_stapling off;
        ssl_stapling_verify on;
        ssl_ecdh_curve secp384r1;

        add_header Strict-Transport-Security "max-age=63072000;" always;

        location / {
            proxy_pass         http://127.0.0.1:5317;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_connect_timeout 3000s;
            proxy_send_timeout 3000s;
            proxy_read_timeout 3000s;
            send_timeout 3000s;
            proxy_buffering off;
            proxy_buffer_size 128k;
            proxy_buffers 100 128k;
        }
    }
    
}

Nginx와 IIS 간 통신은 SSL 통신을 할 필요가 없으니 HTTP통신으로 설정하고

IIS 포트를 5317로 받을 수 있도록 설정한다.

 

Nginx 서비스를 시작하고 웹브라우저로 해당 서버에 https로 접속한다.

와이어 샤크로 확인 결과 TLS 1.3이 표시되는 것을 확인할 수 있다.

 

-끝-

 

반응형

'Program' 카테고리의 다른 글

OpenSSL을 이용하여 pfx에서 private key와 crt 추출  (0) 2021.09.10
nginx windows service로 등록  (0) 2021.09.08
OpenSSL을 이용하여 인증서(CRT) 생성 방법  (0) 2021.09.08
OpenCTI 설치  (0) 2021.06.17
CentOS 8 Git 설치방법  (0) 2021.06.14