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

 

SSL 인증서 파일 포맷 종류 - crt, cer, csr, pem, der, pfx, p12, p7b, jks, key - SecureSign

SSL 인증서 파일 포맷 종류 - crt, cer, csr, pem, der, pfx, p12, p7b, jks, key - SecureSign

www.sslcert.co.kr


인증서 파일 확장자를 .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

 

[Nginx] SSL 적용하기

SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security)은 전송계층 상에서 클라이언트, 서버에 대한 인증 및 데이터 암호화를 수행한다. 클라이언트와 서버 양단 간 응용계층 및 TCP 전송계층 사이에서

velog.io

https://www.comodossl.co.kr/Certificate/ssl-installation-guides/Nginx.aspx

 

Nginx : 인증서 적용 - HanbiroSSL

SSL 보안 서버 인증 가장 합리적인 가격의 Sectigo SSL 인증을 통해 귀사의 웹서버에 접속하는 회원들의 개인 정보를 안전하게 보호해 주시기 바랍니다. --> 본 가이드는 인증서 파일 설정시 참고 예

www.comodossl.co.kr

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기