https://docs.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-
해당 문서를 보면 TLS 1.3을 Windows 2022부터 지원하는 것으로 확인된다.
Window 2016 이하 Server에서 TLS 1.3을 지원하기위해 Nginx를 Proxy로 사용하고
Nginx서버를 IIS와 연결하여 서비스하도록 구성한다.
*Nginx는 TLS 1.3을 지원
IIS 셋팅이 완료된 상태 이후부터 설명한다.
SSL(TLS1.3) 통신을 위한 인증서 생성
위 링크를 통해 Private Key와 CRT파일을 생성하고 잘 보관해둔다.
이미 인증서를 가지고 있다면 해당 링크는 패스해도 된다.
Nginx 설치 및 서비스 등록
위 링크를 통해 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 |