AWS 프리티어 중 Amazon Linux2를 사용하는 서버에서 HTTPS를 서비스에 등록해보겠습니다.
HTTPS가 없더라도 크게 문제는 없지만, 많은 회사들이 SSL을 사용하고 있기 때문에, 적용해보고자 하였습니다.
1. Let's Encrypt 설치하기
- 비용을 지불해서 사용하는 유료 인증서도 있지만, 최근 오픈소스 인증서인 Let's Encrypt가 등장해서 무료로 HTTPS를 사용할수 있게되었습니다.
- Let's Encrypt 설치 및 업데이트를 쉽게 해주는 certbot이 등장해서 사용하기도 굉장히 수월해졌습니다.
- AWS 서버에 접속하여, Let's Encrypt(certbot)를 설치하도록 하겠습니다.
- 다음 명령어를 입력합니다. (EPEL을 다운로드( Certbot에 필요한 종속성을 공급하는데 필요 ))
sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/
- 설치가 완료되었다면, 다음 명령어를 입력하여 리포지토리 패키지를 설치합니다.
sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm
- 리포지토리 패키지도 설치가 완료되었다면, epel를 활성화를 시키도록 하겠습니다.
sudo yum-config-manager --enable epel*
- 다음 두 명령을 차례대로 입력하여 certbot을 설치합니다.
sudo yum install -y certbot python2-certbot-apache
sudo yum install certbot-nginx
2. Nginx
- 만약, nginx가 설치가 안되어있다면, 다음 명령어를 통해 설치를 진행합니다.
1. nginx 설치
sudo yum install nginx
2. nginx 실행
sudo service nginx start
3. nginx 실행 확인
ps -ef | grep nginx
- nginx 설정파일에서 server name을 입력해주도록 하겠습니다.
sudo vi /etc/nginx/nginx.conf
또는
sudo vi /etc/nginx/conf.d/default.conf
3. Let's Encrypt 적용하기
참고!!!
Let'S Encrypt를 적용하기 위해서는 도메인이 필요합니다.
- 아래 명령어를 통해서 nginx에 Let's Encrypt를 적용하도록 하겠습니다.
sudo certbot --nginx
- 해당 명령어가 입력되면, 다음과 같이 진행됩니다.
- nginx 설정에서 server_name을 지정 안했을 경우.
- server_name(도메인)을 입력합니다. 입력시에는 도메인간에 공백 또는 콤마로 구분합니다.(ex: example.com www.example.com)
- nginx 설정에서 server_name을 지정한 경우.
- server_name(도메인)이 자동으로 매칭되는 것을 확인이 되었다면, 엔터를 입력하여 진행하시면 됩니다.
- 도메인 설정 후 설치를 진행하면 Certbot은 Nginx의 구성을 완료하고 성공 및 기타정보를 보고합니다.
- Let's Encrypt 설치가 정상적으로 성공하셨다면, 해당 도메인의 https 접속을 확인합니다.
4. Let's Encrypt 자동갱신
- Certbot은 무료로 제공하다보니 기본적으로 90일의 만료기간이 있습니다.
- 90일마다 서버에 접속하여 새로운 인증서를 발급하는 것은 일정 확인과 직접 작업에 대한 어려움이 있기 때문에, 이를 cron을 통해 자동화를 하도록 하겠습니다.
- 해당 파일을 수정하여 cron을 지정하도록 하겠습니다.
sudo vi /etc/crontab
- 다음의 내용을 입력 후 저장을 합니다.
...
39 1,13 * * * root certbot renew --no-self-upgrade
- 위의 명령은 다음과 같습니다.
- 39 1,13 * * * : 매일 1시 39분, 13시 39분에 실행하도록 합니다.
- root : 명령이 root 권한으로 실행하도록 합니다.
- certbot renew --no-self-upgrade : Let's Encrypt 인증서를 갱신합니다.
renew는 Certbot이 이전에 얻은 모든 인증서가 점검하고 만료 날짜가 다가오고 있는 인증서를 갱신합니다.
--no-self-upgrade 플래그를 사용하면 Certbot이 사용자의 개입 없이 자체 업그레이드하지 않습니다.
- 시간 설정은 임의로 작성한 것이지만, Certbot 개발자는 최소한 매일 두 번 명령을 실행하는 것을 제안한다고 합니다.
- 시간 설정은 90일에 안쪽으로 원하시는 날짜에 맞춰서 작성하셔도 되겠습니다.
- 모든 설정이 끝났다면 cron을 재실행하여 적용시키도록 합니다.
sudo systemctl restart crond
- 이제 cron을 통해서 인증서도 자동으로 갱신이 될 것 입니다.
출처
'Infra > aws' 카테고리의 다른 글
[AWS] 프리티어 종료(EC2, Elastic IP, RDS, Route 53 등 종료하기) (0) | 2022.04.25 |
---|---|
AWS(Amazon Web Service)란? (0) | 2021.04.10 |