이번에 회사 도메인의 SSL 인증서가 새로 발급되어 적용하려는데
다른 방식의 SSL을 구입하였는지 추가로 Chain 인증서가 함께 발급되었다.
Nginx에 적용하는 방법을 찾으며 수집한 정보를 기록하는 겸 기존에 SSL 적용법까지 정리해보려 한다.
기존에 이용하던 업체에서 인증서를 발급받을 경우, 보통 crt
파일을 전달받게 된다.
우리는 이 파일을 pem
파일로 변환해야 한다.
(가비아는 nginx 전용 pem 파일을 전달해준거같기도 하고..)
Chain 인증서?
Chain 인증서는 Root 인증서와 도메인 인증서 간 연결을 인증해주는 인증서라고 한다.
인증서를 전달받으면 아마 Root 인증서, Chain 인증서, Domain 인증서, Key 파일 총 4개를 전달받을 수 있다.
전달받은 파일들을 하나의 crt
인증서 파일로 합쳐야 한다.
# Linux
cat Domain인증서.crt Chain인증서.crt Root인증서.crt > bundle.crt
# Windows는 메모장으로 각 파일의 내용을 하나로 합치면 된다.
합치고 난 이후, 아래와 같이 인증서 구분(개행)이 제대로 적용되어 있는지 확인해야 한다.
# 잘못된 경우
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
# 올바른 경우
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Root , Chain, Domain 인증서 병합본을 nginx에 적용할 경우 제대로 적용되지 않는 현상이 있다.
아래에서는 방법만 설명하고, 실제 conf에는 crt를 사용하여 적용한다.
우선 파일을 변환하기 위해서는 openssl
을 이용한다.
(설치 방법은 따로 정리하겠다.)
전달받은 crt
파일 (또는 변환한 crt
파일)을 아래 명령어로 pem
으로 변환할 수 있다.
# 전달받은 crt (혹은 변환한 crt) : bundle.crt
openssl x509 -inform PEM -in bundle.crt > bundle.pem
key 파일은 적용해본 결과 pem
으로 변환하지 않아도 큰 문제는 없었지만,
혹시 모르니 일단 기록해본다.
openssl rsa -in bundle.key -text > bundle.key.pem
이제 nginx설정만 바꾸면 끝난다.
SSL 설정은 각 도메인의 server
섹터에서 변경할 수 있다.
conf.d
분리를 해놓지 않았다면 nginx.conf
에서, 분리를 해놓았다면 해당 파일에서 수정하면 된다.
기존 설정은 아래와 같이 server_name에 해당 도메인이 들어간 상태로 적용되어 있을 것이다.
server {
listen 80;
listen [::]:80;
server_name sample.co.kr;
location / {
}
}
해당 설정 파일에 SSL을 적용시켜보자.
server {
listen 443;
listen [::]:443;
server_name sample.co.kr;
location / {
}
ssl on;
# ssl_certificate [인증서 전체 경로]
# ssl_certificate /var/cert/bundle.pem;
ssl_certificate /var/cert/bundle.crt;
# ssl_certificate_key [Key 파일 위치]
ssl_certificate_key /var/cert/bundle.key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
}
# 일반 HTTP로 접속 시 HTTPS로 Redirect 설정
server {
if ($host = sample.co.kr) {
return 301 https://$host$request_uri;
}
listen 80;
listen [::]:80;
server_name sample.co.kr;
return 404;
}
ssl_certificate
로 인증서 파일을 설정하고, ssl_certificate_key
로 인증서 비밀키를 설정, 기타 설정을 마무리하면 SSL 적용이 완료된다.
테스트는 SSL 테스트 사이트 에서 본인의 도메인 주소를 입력하여 테스트할 수 있다.
테스트 시, 아래와 같이 Chain이 불안정하다는 메세지가 표시될 수 있다.
해당 메세지가 표시될 경우, 앞서 메모한 대로 pem
대신 변환을 거치지 않은 crt
파일 (Root + Chain + Domain crt)을 적용시킬 경우 해결됬다.
위 코드는 이전에 작업한 코드를 바탕으로 작성된 것이다.
분명 그때 ssl_ciphers
는 다른 오류가 있어 적용한것인데.. 왜 적용했는지 기억이 안난다 ㅎ
ssl 상세 설정에 대한 설명은 나중에~