이전까지 프로젝트에서는 무료 SSL 호스팅인 letsencrypt
를 사용해서 https 리다이렉션을 적용했었다. 하지만 이번에는 처음으로 가비아를 통해 유료 SSL 인증서를 구매하여 적용하였다.
가비아를 통해 SSL을 호스팅하는 방식은 letsencrypt를 사용하여 적용하는 방법과 다르므로 정리해두려 한다.
가비아 홈페이지의 우측 상단의 My 가비아
를 클릭해서 이동한다.
My 가비아 페이지에 들어가서 중앙 부분을 보면 현재 이용 중인 서비스를 볼 수 있다. SSL 보안서버 인증서
가 필요하므로 해당 줄을 클릭한다.
그러면 위와 같이 구매한 ssl 보안서버 인증서 목록을 볼 수 있다. 지금은 인증이 완료되어 이용 기간이 적혀 있지만, 인증이 안 되어 있으면 인증서 등록 대기
라고 뜬다. 인증서를 등록 하려면 가비아 문서를 참고하면 된다.
(현 프로젝트에서 진행할 때는 웹(HTTP) 인증 방식
으로 인증을 하였다. 인증 파일을 받아 서버에 올리기만 하면 되므로 쉽게 진행하였다.)
그러면 다음과 같은 화면이 뜬다.
여기서 인증서 파일 요청
을 클릭한다.
인증서 및 개인키 파일을 다운로드 받기 위해 가비아에 가입할 때 사용했던 휴대전화나 이메일로 본인 인증을 완료하면 인증서
와 개인키 파일
을 다운로드 할 수 있다.
이렇게 총 4개의 파일을 다운로드 받은 후 인증서를 생성할 디렉터리에 올려놓는다.
(필자는 나중에 .conf
파일과 /etc/nginx/sites-available/default
파일에 등록하기 편하도록 /etc/nginx/ssl
이라는 디렉터리를 만들어 올려놓았다.)
1번 과정에서 다운로드 받은 4개의 파일(인증서 파일, 개인키 파일, 체인 인증서 파일, 루트 인증서 파일) 중 인증서 파일들만 사용하여 .pem을 만들 예정이다.
cat [도메인 인증서] [체인 인증서] [루트인증서] > [원하는 이름.pem]
ubuntu 20.04
환경을 기준으로 위의 명령어를 통해 .pem 파일을 생성할 수 있다.
이때 중요한 점은 도메인, 체인, 루트 인증서의 순서가 바뀌면 안 된다!
vim etc/nginx/nginx.conf
명령어를 통해 nginx.conf 파일을 수정한다.
http 블록
을 다음과 같이 설정한다.
http {
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
server {
server_name www.도메인명 도메인명;
location / {
proxy_pass http://127.0.0.1:9000;
}
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/[pem파일명].pem;
ssl_certificate_key /etc/nginx/ssl/[가비아에서 받은 키파일명].key;
ssl_prefer_ciphers on;
}
}
http 블록 안에 ssl 프로토콜을 설정해주고, ssl_prefer_server_ciphers on;
으로 설정해 둔 뒤 server 블록을 만들어 1, 2번에서 가져온 파일들을 등록한다.
파일 가장 아랫단에 다음과 같은 코드 블럭을 추가한다.
server {
listen 80;
server_name [aws eip 주소];
return 301 https://$host$request_uri;
}
server {
listen 80;
server_name [도메인명] www.[도메인명];
return 301 https://$host$request_uri;
}
sudo systemctl restart nginx
나 sudo service nginx reload
명령어를 통해 nginx를 재시작하면 위에서 작성한 파일들이 적용되고 https 리다이렉션 역시 적용된다.
가비아 똑같은 인증서 사용중인데 letsecrypt으로 생성할시 fullchain.pem과 chain.pem 두가지더군요. 이 문서에서 만든 pem파일은 아무레도 fullchain.pem파일 역할인듯 싶습니다. chain.pem파일 역할은 어떻게 해야할까요...?