어제 테스트 서버에서 HTTPS(SSL) 적용을 성공하여 적용 방법을 공유하고자 포스팅하게 되었다. HTTPS를 적용하기 위해서는 SSL 인증서가 필요하다.
일반적인 업체에서는 돈을 주고 인증서를 구매하여 적용을 한다.
하지만 우리는 Let’s Encrypt를 활용하여 무료로 인증서를 적용해볼 예정이다.
Tested Environment
CentOS 7 (SELinux)
LEMP Stack(Linux + Nginx + MariaDB + PHP(PHP-FPM) 7)
위의 환경이 얼추 비슷하면 따라올 수 있을 것이다.
Certbot 설치
# yum -y install certbot-nginx
위 명령어로 certbot을 설치를 먼저 해준다. ‘certbot’은 letsencrypt.org의 api와 연동이 되어 있어 SSL 인증서를 쉽게 설치하고 갱신할 수 있게 도와준다.
이전에는 그냥 certbot을 설치해서 시도를 했었는데 certbot-nginx를 다운받아서 진행하면 SSL인증서를 받고나서 Nginx의 컨피그 설정 변경 부분에서도 지원을 해준다.
SSL 인증서 설치
# certbot –nginx -d test.com
설치가 끝났다면 위와 같이 명령어를 내려준다. ‘test.com’부분은 사용할 URL을 입력해주면 된다. 캡쳐부분이나 명령어 설명 부분에서는 내가 설정했던 개인정보는 지웠다.
어차피 테스트베드이긴 하지만, 보안 취약점이 될 수 있을거란 걱정이 있기 때문이니 양해 부탁한다.
저 명령어를 치게되면 인증서 관련하여 갱신 안내나 공지를 받을 이메일을 적게된다. 아무거나 적게되면 나중에 인증서가 만료되어 사이트가 제대로 동작하지 않게되는 문제가 발생할 수 있으니 실제 자주 확인하는 이메일을 적어줄 수 있도록 하자.
다음 질문으로 이메일 공유되는거 괜찮냐고 물어보는데 Y를 입력하고 넘어가준다. 어차피 N하면 못받게 할거면서 괜한걸 하고 있다.
그 다음에는 기존 HTTP로 접근하던 트래픽에 대해 HTTPS로 Redirect 할 것인지를 물어본다. 1은 안한다는 것이고 2는 한다는 것이다.
나는 2를 체크했는데 자동으로 certbot이 내 Nginx의 default.conf파일을 고쳐줬다. 아마 장단점이 있을 것 같은데, 정상동작은 확인하였다.
여기서 결정에 고민이 있을 사람들을 위해 간단한 이야기를 하자면, 웹사이트를 운영하는 사람들은 한번쯤 들어봤을 것이다.
SEO라는 것을. 우리는 웹사이트를 곳곳의 웹마스터도구에 등록을 해두고 사이트의 정보와 글을 검색되게끔 하는데, 대부분의 웹마스터도구는 도메인이 같아도 HTTP와 HTTPS를 다른 사이트로 인식을 한다고 한다.
그리고 HTTPS로 통신하는 사이트를 더 신뢰하고 점수를 높게 준다고 한다.
그래서 대부분 Redirect를 설정한다.
하지 않더라도 상관은 없지만 차후 다른 사이트로 인식하는 과정에서 두개 사이트의 포스트가 겹쳐서 문제가 발생할 수 있으니 그 부분은 참고하고 진행하길 바란다.
# ls /etc/letsencrypt/live/test.com
위 과정이 끝나면 위의 경로에 들어가 ‘cert.pem, chain.pem, fullchain.pem, privkey.pem’ 4개 파일이 존재하는지 확인해주자.
다 존재한다면 제대로 설치가 된 것이다.
# openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
DH Param은 일부 암호화 알고리즘에 사용되는 커다란 난수 하나를 미리 생성해 두어 암호화 성능을 향상시키고 보안을 높이는 방법이다.
뒤에 붙는 2048은 복잡도 정도인데, 크게할 수록 보안성이 높아지지만 그만큼 성능면에서는 떨어진다.
# vim /etc/nginx/nginx.conf
…
ssl_dhparam /etc/ssl/certs/dhparam.pem;
…
위 명령어를 치고 들어가 nginx.conf 파일에 한줄을 추가해줘야 한다.
아까 만든 DH Prameter를 추가해주는 것인데 http 블록 안에 추가해주면 된다.
캡쳐해둔게 너무 비어있어서 당황스럽겠지만 다 지워버리고 access_log 한줄만 남겨두었다.
위치를 참고하라고 한줄만 남겨두었다.
Nginx SSL 세팅
# vim /etc/nginx/conf.d/default.conf
위 명령어를 치고 들어가서 하단 윗부분(‘}’를 기준으로)은 기존 Server 블록 안에 추가해주면 되고, 신규 서버 블록을 생성해서 아래 부분을 그대로 쳐주면 된다.
위 내용은 certbot이 자동으로 생성해준 것이다.
그래서 윗부분에 보면 ‘ssl_dhparam’이 있는데, 이걸 지워줘야 한다.
안지워도 상관은 없다.
근데 내가 알기로는 nginx.conf 파일 안에서 default.conf파일을 읽는 것이기 때문에 아마 이대로 두면 내가 만든 DH파라미터 파일은 의미가 없어질 것이다.
# nginx -t
# systemctl restart nginx
완료하고나면 nginx 컨피그 이상유무를 체크한 후에 재시작을 해주면 된다.
Comments 1
bitwarden rs 구축하려고 보다가 댓글 남깁니다. 그냥 bitwarden 같은 경우에는 그냥 bitwarden.sh파일을 이용하면 되서 https 설정을 따로 안해줘도 되는데 rs는 이런 자동화가 없더라구요. https 구축하는데 참고하겠습니다. 감사합니다.