DDD 동아리 진행 중 API 서버의 SSL 적용이 필요해서 무료 인증서인 Let's Encrypt 를 해보기로 했다.
Docker 로 Blue / Green 배포 환경이여서 Docker 자체 내에 심어야하는 줄 알았는데 그냥 nginx 기준으로 심으면 되는 거였다.
Nginx 설치
아래 링크를 확인하여 설치 및 설정
Ubuntu 기준 certbot 설치
- Ubuntu 16.04 이하
apt-get update sudo apt-get install certbot apt-get install python-certbot-nginx
- Ubuntu 18.04 이상
apt-get update sudo apt-get install certbot apt-get install python3-certbot-nginx
Certbot 이용하여 SSL 인증서 발급
- 단일 도메인
sudo certbot --nginx -d example.com
- 여러개 도메인
sudo certbot --nginx -d example.com -d www.example.com
nginx 플러그인을 이용하여 도메인을 쉽게 추가할 수 있다. 성공적으로 완료되면 도메인 설정 파일 내에 443 관련 소스가 자동으로 추가되어 있을 것이다.
443 관련 설정
AWS 에서 인바운드에 HTTPS 포트 개방을 해준다.
Let’s Encrypt 인증서 자동 갱신
먼저 아래 명령어를 통해 똑바로 실행되는지 확인한다.
certbot renew --dry-run
위 명령어는 실제로 재발급 하지 않고 테스트 용도이다. 만약 제대로 되지 않으면 출력되는 오류에 대해 처리를 해야한다.
certbot
매일 실행할 명령을 추가한다. 이 예에서는 매일 정오에 명령을 실행한다. 이 명령은 서버의 인증서가 다음 30일 이내에 만료되는지 확인하고 만료되면 갱신한다. --quiet
지시문은 출력 certbot
을 생성하지 않도록 한다
crontab
파일을 연다
sudo crontab -e
그리고 맨 아래에 다음을 추가한다.
0 12 * * * /usr/bin/certbot renew --quiet
파일을 저장하고 닫는다.
Error
- 처음에
sudo certbot certonly -d "example.com" --manual --preferred-challenges dns
처럼 dns 및 manual 로 발급 받아서
TXT Record 값을 AWS Route 53 에 등록하는 방식으로 했는데 이렇게 하니까 재발급 하려고 할 때 제대로 이루어지지 않았다.
TXT Record 값을 얘가 알아서 바꿔줄수 없기 때문이라서 (방법이 있는것 같긴한데 쉬운 길로..) 인증서를 다시 삭제 하고sudo certbot --nginx -d "example.com"
처럼nginx
플러그인을 통해 쉽게 적용 시켰다.
참고
'Server > Nginx' 카테고리의 다른 글
Nginx Domain 설정 (1) | 2023.03.20 |
---|---|
Nginx 설치 (0) | 2023.03.20 |