https로 만들어봅시다! - Nginx 체인 인증서(SSL) 구매 및 적용
1. 도메인 등록내역 확인
보유하고 있는 도메인이 없다면 우선 구매를 해야한다.
도메인을 구매할 수 있는 사이트는 가비아, 후이즈, 고대디 등 많지만 가장 간단한 후이즈로 진행해본다.
위와 같이 다양한 주소가 나오는데 예산대에 맞춰 구매하면 될 것 같다!
만약 구매해놓은 도메인이 있다면?
도메인 구매할 수 있는 사이트에 접속, 구매 도메인에 대한 정보를 확인해놓고 가지고 있으면 된다.
후이즈나 가비아등 도메인 구매가능 사이트에 접속하여 보유하고 있는 도메인을 검색하면 아래와 같은 내용이 쭉 뜰 것이다.
내가 가지고 있는 도메인 정보가 이후 Comodo SSL 인증서 신청 시 필요하기에 꼭 확인을 해놓아야 한다.
2. Comodo SSL 인증서 신청
SSL 인증서를 발급받을 수 있는 기관과 그 대행사는 서칭을 하면 많이 나오는데 그 중 사용경험이 있고, 가격이 저렴한 인증서인 Comodo Positive SSL 인증서를 발급받았다. 기간은 1년이며, 부가세 포함 33,000원이다. 자세한 보증 및 지원내용은 아래 링크에서 확인 가능하다.
www.comodossl.co.kr/products/detail/ssl-certificate-positive.aspx
서브도메인(*.kakao.com와 같은 도메인) 적용 및 암호화 뚫렸을 시 보상금액, Green-Bar 지원여부에 따라 인증서 비용이 천차만별이다.
신청은 상기 도메인 정보, 도메인 정보에 등록된 admin email 주소만 잘 알고 있으면 별다른 어려움 없이 신청 가능하다.
(등록 admin email 주소로 SSL 인증기관에서 발급 전 확인 메일을 보내주고 인증을 요청하기에 이메일 접속, 확인이 가능해야 한다)
3. Comodo SSL 인증서 파일 합치기
인증서 발급이 완료되면 인증서 파일을 다운받고, 이 파일 중 일부를 하나의 인증서 형태로 합쳐야 한다.
다운 받게 되면 발급일자-도메인.pfx.zip 파일 하나 있고, 이를 무의식적으로 더블클릭을 하면 .pfx 파일이 압축해제되어 나오게 된다.
참고로 pfx 파일은 personal exchange format 파일로서, 공공 또는 개인 정보를 교환할 때 사용되는 파일양식으로, 한국어 검색 시 대부분
인증서 파일이라고 번역되서 나오게 된다.
아무튼, 인증서 파일이기에 pfx파일을 더블클릭하게 되면 맥 기준, 키체인 접근이라는 앱이 뜨면서 멘붕을 겪을 수 있는데 당황하지 말고
자신이 쓰는 IDE를 켜보도록 하자!
IDE를 켜서 pfx 파일을 로딩하게 되면 아래와 같이 파일 목록이 주루룩 나온다.
많은 파일이 들어있어 뭘 골라야될지 고민되겠으나 이 중 우리가 필요한 것은 단 세가지로, 도메인 인증서, 체인 인증서, 루트 인증서이다.
1) 도메인 인증서 - 도메인명.crt 파일
2) 체인 인증서 - rsa-dv.chain-bundle.pem
3) 루트 인증서 - AddTrustExternalCARoot.crt
이 세가지 파일을 cat 명령어를 통해 하나의 인증서 파일로 묶어준다.
cat 도메인명.crt rsa-dv.chain-bundle.pem AddTrustExternalCARoot.crt > 인증서 파일명.crt
많이 왔다. 인제 Nginx가 이 파일을 잘 바라보게만 세팅해주면 SSL 인증서 적용 (https 적용)은 완료이다!
4. Nginx에서 SSL 인증서 적용하기
1) 자신의 서버(AWS 또는 회사 자체서버)에 접근하여 인증서 파일을 저장할 폴더를 생성한다.
(폴더는 아무곳에나 만들어도 되지만 nginx 하단에 ssl이라는 폴더를 만들어서 많이 관리하는 듯 싶다)
2) 생성폴더로 만든 '인증서 파일명.crt' 그리고 자신의 개인키 (일자-도메인명_SHA256WITHRSA.key), 총 2개 파일을 옮겨준다.
(자신 장비에서 인증서 파일을 하나로 합쳤을 가능성이 높기에 옮기는데 파일질라와 같은 FTP툴을 쓰면 훨씬 빠르게 작업이 가능할 것이다.)
3) nginx 하위 sites-available 폴더로 접근, 각 도메인별 conf 파일에 관리자 권한으로 코드 편집하여 마무리 짓는다.
아마 보통 443 포트를 사용하고 있을테니 443 포트에 아래와 같이 작성해보자.
server {
listen 443 ssl default_server; # 기본 접속포트가 443임을 명시해주면 굿!
listen [::]:443 ssl default_server;
server_name 자신 도메인명을 넣어주자;
ssl on;
ssl_certificate /nginx/ssl/합친 인증서 파일.crt; # crt 파일 경로를 넣어준다.
ssl_certificate_key /nginx/ssl/개인키_SHA256WITHRSA.key; # key 파일 경로를 넣어준다.
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3; # TLS 1.2, 1.3버전은 구글링 고!
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:202020; # 톰캣으로 프록시 패스!
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;
}
}
*꿀팁 추가
아래와 같이 코드 작성해주면 80번(http)으로 클라이언트가 접근해도 443포트(https)로 리디렉션이 걸리게 된다!
server {
listen 80;
listen [::]:80;
server_name 도메인명 써주세요;
rewrite ^ https://$server_name$request_uri? permanent;
}
5. 마무리
실제로 도메인에 접근하여 자물쇠가 채워지는지 확인해보면 SSL 인증서가 적용되었는지 정확하게 확인할 수 있다.
아니면 각 인증서 제공 사이트에서 인증서 적용 체커를 제공해주니 활용해도 좋다.
www.comodossl.co.kr/products/ssl-checker.aspx
1) SSL 인증서 미적용 시 (http)
2) SSL 인증서 적용 시 (https)
참고 글:
www.comodossl.co.kr/certificate/ssl-installation-guides/Nginx.aspx