본문 바로가기

Development/Servers

Nginx 에 코모도 Positive SSL 적용기

Nginx 에 코모도 Positive SSL 적용기


한비로 HanbiroSSL 에서 코모도 포지티브를 신청, 가장 저렴한 편이다.
결제하고 메일을 한 번 받아서 인증하고 하루 이틀 지나면

최종 인증 파일이 담긴 메일을 받는다.


순서는 다음과 같다.


홈페이지 내용은 좀 복잡해 보인다…
압축 파일을 풀어서 또는 그대로 업로드, 서버에서 풀던 아무튼 풀어 다음과 같은 파일들을 확인한다.

설명서에는 아래와 같은 내용이 포함된다.


파일 종류 설명

.crt - 서버응답인증서 (CA에서 발급된 인증서 PEM 텍스트)
.key - CSR 자동생성 신청시, 같이 자동 생성된 개인키 (SHA1 알고리즘, PEM 텍스트, 패스워드 없음)
.pfx - 개인키+서버응답인증서 패키징된 인증서 (설치시 암호 필요)
.pfx.txt - pfx 를 이용해서 인증서 설치시 필요한 해제 암호
.Chain.zip - 설치가 필수인 체인 인증서 모음 압축 파일 

주요 상품별 체인 인증서

[Positive 계열 상품]
루트 인증서 : AddTrustExternalCARoot.crt
체인 인증서 : PositiveSSLCA2.crt

[Comodo 계열 상품]
루트 인증서 : AddTrustExternalCARoot.crt
체인 인증서 : COMODOSSLCA.crt

[Free 30 Days 상품]
루트 인증서 : AddTrustExternalCARoot.crt
체인 인증서 : UTNAddTrustSGCCA.crt
체인 인증서 : ComodoUTNSGCCA.crt
체인 인증서 : EssentialSSLCA_2.crt

[EV 상품]
루트 인증서 : AddTrustExternalCARoot.crt
체인 인증서 : COMODOAddTrustServerCA.crt
체인 인증서 : COMODOExtendedValidationSecureServerCA.crt

포지티브 용은 아래와 같은 파일들이 포함되어 있다.


기본적으로 아래와 같이 세팅하면 된다.


server {
        server_name domain;

        listen  443;

        ssl     on;
        ssl_certificate         domain.crt;
        ssl_certificate_key     domain.SHA1.key;

        ssl_session_timeout     5m;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass http://127.0.0.1:3100;
                proxy_redirect off;
        }
}

리스타트 하면

사파리와 크롬에서는 정상적인 인증서 세팅이 가능하다.

하지만 파이어폭스에서는 루트인증서를 확인할 수 없다는 경고가 나타난다.



다시 살펴보자.


pfx.txt
domain.crt
domain.pfx
domain.SHA1.key
PositiveSSL.Chain.zip


루트 인증을 위해 PositiveSSL.Chain.zip 도 푼다.


addTrustExternalCARoot.crt
PositiveSSLCA2.crt


첫번째 것은 루트 인증서
두번째 것은 체인 인증서


인증서를 합치자.


콘솔에서 파이프를 사용해 인증서(그냥 텍스트 파일이다)를 붙이자.

$ cp domain.crt chainedSSL.crt
$ cat addTrustExternalCARoot.crt >> chainedSSL.crt
$ cat PositiveSSLCA2.crt >> chainedSSL.crt

순서는 루트 인증서를 먼저 붙이고 그 다음 체인 인증서를 붙인다. 순서가 변경되면 제대로 동작하지 않는다.


server {
        server_name domain;

        listen  443;

        ssl     on;

        ssl_certificate         chainedSSL.crt;
        ssl_certificate_key     domain.SHA1.key;

        ssl_session_timeout     5m;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass http://127.0.0.1:3100;
                proxy_redirect off;
        }
}

server {
        server_name domain;
        listen  80;
        rewrite ^ https://domain$request_uri? permanent;
}


일반 포트로 접속하는 http 에도 요청을 받아들이기 위해 rewrite 도 사용해준다.


리스타트 한다. 파이어폭스에서도 이상없이 서비스 된다.