CSR을 만들고 SSL 인증서 파일을 발급 받는 과정은 무사히 마쳤다고 생각하고 생략하기로 한다.
필자는 기관에 요청하여 받은 인증서 파일이 base64 방식으로 인코딩된 .p7b 파일과 DER 방식으로 인코딩된 .cer 파일로 2개였다.
둘 중에 하나로 원하는 걸 사용하면 되고, 두 인증서 포맷은 다음과 같은 특징이 있으므로, 참고하면 된다.
또한, 다양한 인증서 관련 파일 포맷에 대한 설명이 아래 링크에 있으니, 확인하면 되겠다.
- .p7b 확장자
- PKCS#7 포맷
- [‘서버 인증서’ + ‘Root 인증서’ + ‘Chain 인증서’] 를 모두 담을 수 있어, SSL 인증서 적용 또는 이전 시에 상당히 유용하고 편리
- Windows 에서는 자동 인식, 일부 서버에서는 p7b 포맷으로만 인증서 설정이 되는 경우도 있다.
- 인증서 내 private key 는 포함 X. key 파일에 대한 설정(nginx 에서는 ‘ssl_certificate_key’ 구문)은 별도의 키 파일로 잡아주어야 한다.
- .cer 확장자
- Windows 에서는 기본 인식되는 확장자
- 대부분 PEM 포맷이나, Binary 포맷일 때도 있음
- 주로 Windows 기반에서 인증서 파일임을 구분하기 위해서 사용되는 확장자
- .crt 확장자와 거의 동일한 의미
SSL 인증서 파일 포맷 종류 - crt, cer, csr, pem, der, pfx, p12, p7b, jks, key - SecureSign
인증서 파일 확장자를 .p7b → .pem 변환
대부분의 글들이 .pem 확장자 기준으로 설명하므로, 나도 혼란을 방지하기 위해 .p7b → .pem 변환 먼저 수행하겠다. .p7b 확장자와 .pem 확장자는 변환 시 100% 호환된다고 생각해도 무방할 듯 하다.
아래 명령어를 수행하여 확장자를 .pem 으로 변환하자!
openssl pkcs7 -in [발급받은 .p7b 인증서] -out [.pem으로 만들 파일 이름.pem] -print_certs -text
# ex) openssl pkcs7 -in Issued_Cert.p7b -out Integrated_Cert.pem -print_certs -text
SSL 인증서(.pem 확장자 기준) 적용하기
이제 변환된 .pem 파일과 CSR 발급 시 사용한 key 파일을 SSL 인증 옵션 구문에 함께 넣어주면 된다.
필자는 특정 사이트에 대한 server 옵션들을 모아둔 파일인 sites-available/{사이트명} 파일에 아래 구문을 넣었다.
server {
listen 443 ssl;
server_name Example.co.kr;
ssl_certificate [변환한 Cert 파일명.pem 파일 경로];
ssl_certificate_key [decrypted 키 파일명.key 파일 경로];
ssl_session_timeout 5m;
# SSL 취약성 제거 위한 설정
ssl_protocols SSLv3 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
include proxy_params;
# 동일 host 내의 gunicorn 서버로 request 전달하기 위함
proxy_pass <http://unix>:{gunicorn의 unix .sock 파일 경로};
}
}
위 구문을 추가한 nginx site 설정 파일명을 ‘test_ssl’ 이라고 가정하면,
아래 명령어를 수행하여 sites-available/test_ssl 사이트 설정 파일을 sties-enabled/PRD 파일로 심볼릭 링크를 걸고, nginx 를 재기동하여 사이트 설정을 load하여 테스트 해보자.
# test_ssl -> PRD 심볼릭 링크
ln -s /etc/nginx/sites-available/test_ssl /etc/nginx/sites-enabled/PRD
# nginx 관련 파일 syntax 검사
nginx -t
# nginx 새로운 설정 적용 방법1 - 설정파일만 reload
nginx -s reload
# nginx 새로운 설정 적용 방법2 - nginx 재기동
systemctl restart nginx
http://{Domain Name}:443/ 으로 접속했을 때, 이상 없이 해당 웹 사이트 접속이 된다면, SSL 인증서 설정이 문제 없이 적용 된 것이다.
만약 뭔가 문제가 생겼다면, ‘PRD’ 심볼릭 링크를 제거하고, 기존의 site 설정 파일인 ‘test_old’ 파일로 다시 심볼릭 링크를 걸고, nginx 설정 파일을 리로드하여 롤백하면 된다.
# 새롭게 적용한 site 설정 파일인 'PRD' 심볼릭 링크 제거
rm /etc/sites-enabled/PRD
# 기존에 사용하던 site 설정 파일인 'test_old' 심볼릭 링크 걸기
ln -s /etc/sites-available/test_old /etc/sites-enabled/PRD
# nginx 설정 파일 리로드
nginx -s reload
http → https 리다이렉션 설정하기
SSL을 적용하였으니, 기존의 사이트 설정에 있는 LISTEN 80 블록은 아래와 같이 변경해주어야 한다.
필자의 경우, 아래와 같이 servername {ip} 인 블럭과 servername {domain name} 인 블럭 두 개를 설정하여,
IP와 80 포트로 접속하는 경우, domain name과 80포트로 접속하는 경우 모두를 https://{domain-name} 으로 리다이렉션 하도록 설정하였다.
참고로, [::] 은,
# {IP}:80, {domain name}:80, www.{domain name}:80 으로 접속하는 경우 리다이렉션 설정
server {
listen 80;
server_name Example.co.kr www.Example.co.kr 10.123.123.123;
return 301 https://Example.co.kr$request_uri;
}
위 설정을 한 후, 다시 심볼릭 링크 및 nginx 설정 reload를 한 후에, http://{IP}, http://Example.co.kr 로 접속해서 https://Example.co.kr 로 리다이렉션이 잘 되는 지 확인해보면 된다!
참고
https://velog.io/@coastby/Nginx-SSL-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0
https://www.comodossl.co.kr/Certificate/ssl-installation-guides/Nginx.aspx
'Middleware > 웹서버' 카테고리의 다른 글
[httpd] RedHat JBCS httpd 에서 Apache httpd로 이전하기 (1) (0) | 2024.04.07 |
---|---|
[httpd] Apache httpd의 로그 삭제 스크립트 및 crontab 등록하여 로그 파일 삭제 자동화하기 (0) | 2023.11.22 |
[IIS] IIS(웹서버) 구축_Windows Server 2019 환경 (0) | 2022.07.22 |
[httpd] Apache httpd Rewrite 모듈 설정 - 페이지 리다이렉션 하기 (0) | 2022.06.10 |
[httpd] Apache httpd Virtualhost 설정 - 한 서버에서 여러 웹사이트 서비스하기 (0) | 2022.06.10 |
최근댓글