마지막 수정 날짜 : 2018년 5월 28일
SSL 설정은 그렇게 어렵지 않다.
기본 설정만으로 하는 경우에는 아래와 같은 화면이 뜰 수도 있는데 (OpenSSL 버전이나 기본적인 설정이 어떻게 되어있느냐에 따라 다르다)
지금은 크롬이 이렇게 나오지 않지만, 예전에는 이런 식으로 나왔었다.
이게 중요한 게 아니라.. SSL 설정은 그렇게 어렵지 않다.
본인의 SSL 인증서를 보면 Chain 인증서, CA1 인증서, 그리고 본인의 인증서가 따로 되어있는 경우도 있고 전체가 되어 있는 경우도 있다.
Root 인증서를 제외하고 Chain 인증서와 본인 인증서를 합치자2.
그 다음에는 아래와 같이 시행해주면 된다.
— 내용 추가 (2016. 09. 10)
먼저 DHParam 파일을 생성하자.
openssl 파일이 있는 곳에서 다음과 같이 명령어를 치면 된다.
1 |
openssl dhparam -out dhparam.pem 4096 |
이제 이 파일을 이용해서 아래 설정을 하자.
OCSP 설정은 인증서를 구입하면 오는 zip 파일에 root 파일이 있으니 그것을 이용하면 된다. (잘 모르면 OCSP 부분만 주석처리 하자.)
나는 간단하게 ssl.conf 와 같이 파일을 저장해 두었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
ssl on; ssl_certificate 인증서.crt; ssl_certificate_key 인증서 키.key; ssl_ciphers EECDH+CHACHA20:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:!MD5; # 3DES 는 SWEET32 관련 내용으로 인해 제거되었음. # 추가하려면 :!MD5 부분 옆에 EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES 추가 ssl_dhparam dhparam.pem; # DHParam 파일 ssl_session_cache builtin:3000 shared:SSL:20m; ssl_session_timeout 30m; ssl_session_tickets on; ssl_ecdh_curve secp384r1; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_stapling on; # OCSP ssl_stapling_verify on; # OCSP ssl_trusted_certificate CA Root.pem; # CA Root 파일. OCSP 설정에 필요. resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 20s; # http 단에 아래 설정 추가 # HSTS ON # HSTS 는 필요한 경우에만 설정할 것. HSTS 는 https 를 강제로 사용하게 하는(?) 헤더. add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; |
— 내용 추가 (2016.09.06)
— 내용 추가 2 (2017.04.08) – 3DES 이슈로 인한 ssl_cipher 수정
이제 본인의 기본 사이트 설정을 보자. 대부분 아래와 같이 되어있을 것이다.
1 2 3 4 5 |
server { listen 80; server_name .haka.se; ~~~~ bla bla; } |
해당 내용을 다음과 같이 수정 해 보자. (http 로 들어오면 https 로 리다이렉트 되는 것까지 추가)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
server { listen 80; server_name [도메인]; location / { rewrite ^(.*) https://$host$1 permanent; } } server { listen 443 ssl spdy http2; # HTTP2 혹은 spdy 둘 중 하나 알아서 쓸 것. (1.9 버전 이상 = http2 / 미만 : spdy) server_name [도메인]; root [디렉토리]; include ssl.conf; # 위에 ssl.conf 로 저장한 것을 그대로 사용. # ~~ 기타 location 설정은 본인의 소스 그대로 사용할 것. } |
이렇게 하고 nginx -s reload 를 실행하면 정상적으로 리다이렉트 및 ssl 이 적용된다!