이 글은 2년 이상 지난 이야기에요. 읽으실때 참고!
Nginx 체인 인증서 적용

eruLabo의 SSL 인증서가 거의 만료때가 다가와서 2년 연장하면서 새로 인증작업을 다시하는 도중에 체인 인증서라는 것을 적용해보았습니다.

 

체인 인증서란 루트 인증서와 발급받은 인증서 간의 연결을 보장해주는 인증서로써 쉽게말해 각자 홈페이지에서 사용하고 있는 인증서가 어디의 인증서버에서 발급해준건지 중계 및 검증을 안내해주는 것입니다. 요즘은 대부분의 경우엔 없어도 되긴하는데 일부 브라우저에서는 이 체인인증서를 등록하지 않으면 설령 해당 홈페이지가 인증서를 보유하고 있어도 그를 신뢰하지 않는다고 나옵니다. 마치 인증서는 확인은 되는데 그 인증서자체를 신뢰할 수 없는 느낌이네요.

 

또 인증서 갱신을 하는 과정에서 이전 인증서와 새 인증서의 검증에서도 사용한다고는 하는데 최근에는 발급기관 신뢰도 검사가 주 목적인듯 하네요.

 

어찌되었든 nginx에서 체인인증서를 적용하는것에 대해서 기록합니다.

 

 

우선 인증서 발급기관에서 도메인 인증서와 함께 체인 인증서를 발급해주어야 합니다. 그래서 총 3개의 인증서 파일을 하나로 합쳐서 서버에 등록하면 됩니다.

합치는 순서는 "도메인 인증서"-"체인 인증서"-"루트 인증서"입니다.

 

1
2
$ cat erulabo_com.crt rsa-dv.chain-bundle.pem AddTrustExternalCARoot.crt > nginx_ssl.crt
 
cs

 

리눅스의 cat 기능을 이용해 위의 3가지 인증서를 하나로 합쳐줍니다. 그리고 nginx 서버 설정으로 이동해 ssl 옵션을 server 아랫단계에 기재합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#sudo vi /etc/nginx/sites-available/default
...
 
server {
      listen 443 ssl default_server;
      listen [::]:443 ssl default_server;
  
      server_name erulabo.com;
      root /var/www/html;
      index index.html index.php;
      error_page 404 /404.php;
  
      ssl on;
      ssl_certificate /etc/nginx/ssl/nginx_ssl.crt;
      ssl_certificate_key /etc/nginx/ssl/erulabo_com_SHA256WITHRSA.key;
      ssl_prefer_server_ciphers on;
    ssl_session_timeout 5m;
    
    ...
 
cs

 

그리고 nginx를 재시작 해줍니다.

 

SSLShopper에서 도메인을 입력하면 아래와 같이 인증서 적용결과와 함께 체인인증서가 정상적인 검증절차를 밟고 있는지 확인할 수 있습니다. 만약 체인인증서가 적용되어있지 않다면 도메인 인증서까지만 확인 한 결과만 보여집니다.

 

결국 정리하면 체인인증서 적용하기위해 세가지 인증서를 하나로 합치는 것입니다.

아, 인증서 합치고 서버에 적용하는 도중에 nginx에러가 발생할 수 도 있습니다. 그럴 경우엔 합쳐진 nginx_ssl.crt 파일을 열어보면 아래와 같은 현상이 일어날 수 있습니다.

 

 

인증서 파일은 줄바꿈으로 구분되는 -----BEGIN CERTIFICATE------와 -----END CERTIFICATE-----안에 그 내용이 나열되게 되는데, cat 기능으로 합치다보면 가끔 저렇게 줄바꿈이 안되어 합쳐지는 경우가 있습니다. 이럴땐 vi 에디터를 통해서 줄바꿈 한번 해주면 해당 문제가 해결됩니다.

 

 

D.2019-06-20 V.268