* Let's Encrypt에서 발행해 주는 무료 SSL 증명서 사용
> 무료이기 때문에 인증서의 유효기간은 3개월.
> 자동으로 3개월마다 갱신할 수 있도록 할거임.
> Let's Encrypt를 사용하기 위해서 설치해야 하는 프로그램 = Certbot
> 쉘에서 Certbot을 설치하고 도메인에 연결하면 Let's Encrypt에서 발행한 SSL 인증서를 사용할 수 있는 것임.
1. 쉘로 내 서버에 접속하여 관리자 권한 실행
> sudo su
2. 오픈 ssl 설치를 위해 아래 명령어 실행
> dnf install openssl mod_ssl
> [y/N] : 선택하는 입력란 나오면 y 치고 enter
3. certbot이 python에 의존해서 돌아가는 프로그램이기 때문에 python과 함께 라이브러리 pip 설치 -> python 환경이 만들어진 것
> sudo dnf install -y python3 augeas-libs pip
4. python 가상 환경을 조금 더 설정해야 함. 아래 명령어 실행
> sudo python3 -m venv /opt/certbot/
> ls /opt/certbot
> 파일 디렉토리가 보이면 정상적으로 설치된 것.
5. pip 최신 버전으로 업그레이드 (pip는 python의 패키지 관리프로그램임)
> sudo /opt/certbot/bin/pip install --upgrade pip
6. certbot 설치
> sudo /opt/certbot/bin/pip install certbot
7. certbot 설치 후 내 서버에 certbot이 어디에 있는지 경로를 알려줘야 certbot실행 가능
> sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
> 설치가 완료 됐으면 certbot을 이용해서 인증서를 받아야 함.
> 인증서를 받고 내 도메인에 연결만 해주면 끝.
8. 웹사이트 멈추기
> sudo systemctl stop httpd
9. certbot 이용해서 인증서 받기
> sudo certbot certonly --standalone
> 이메일입력, Y, N, 도메인입력
10. 받은 인증서를 Apache 설정 프로그램에 설정하기 (ssl에 관한 config 파일 수)
> sudo vi /etc/httpd/conf.d/ssl.conf
> 맨 아래로 가서 'i'를 누르고 virtualhost 추가.
> 도메인 수정해서 입력하고 'esc', :wq로 수정 내용 저장 후 에디터 나가기.
<VirtualHost *:443>
DocumentRoot "/var/www/html" ServerAlias 도메인
SSLEngine on SSLCertificateFile /etc/letsencrypt/live/도메인/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/도메인/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/도메인/chain.pem
</VirtualHost>
11. Apache 설정 수정 했으니 재실행하기
> sudo systemctl restart httpd
--> 웹브라우저에서 [ https://도메인 ] 입력해서 잘 나오면 ssl 인증서 적용 성공!
12. 인증서 자동 갱신 설정하기
> sudo dnf install cronie-noanacron
> y
> sudo vi /etc/crontab
> 추가할 내용 : 30 1 * * 2 root /usr/bin/certbot renew --post-hook "systemctl reload httpd"
> 매주 화요일, 1시 30분에 root 권한으로 명령어 실행하겠다.
( root /usr/bin/certbot renew --post : 리뉴얼 하는 명령어임. 30일 이내에 요청을 한다면 리뉴얼이 되는 것. 나는 자동 갱신임.)
아래 추가 내용
Let's Encrypt 인증서를 얻는 방식에는 크게 2가지가 있습니다:
- standalone 방식 (현재 사용 중)
- 인증 과정에서 certbot이 독립적으로 임시 웹서버를 실행
- 포트 80을 사용해야 해서 Apache를 중지해야 함
- 간단하지만 인증서 갱신 시 서비스 중단 필요
- webroot 방식
- Apache가 실행 중인 상태에서 웹 서버의 디렉토리를 통해 인증
- 웹 서버 중단 없이 인증 가능
- 지정된 웹 루트 디렉토리(/var/www/html)를 통해 인증
현재는 standalone 방식을 사용 중이므로, 인증서 갱신 때마다:
- Apache 중지
- 인증서 갱신
- Apache 재시작
이 과정이 필요합니다.
기존 설정대로 유지한다면, crontab의 갱신 명령에 Apache 중지/시작 명령을 포함해야 합니다.
> 30 1 * * 2 root systemctl stop httpd && /usr/bin/certbot renew && systemctl start httpd
이렇게 하면 매주 화요일 새벽 1시 30분에 잠시 서비스가 중단되긴 하지만, 현재 설정을 크게 바꾸지 않고도 자동 갱신이 가능합니다!
하지만 대부분 서비스는 webroot 방식을 많이 사용합니다.
그 이유는:
- 서비스 연속성
- 인증서 갱신 시 서비스 중단 없음
- 사용자 경험에 영향 없음
- 안정성
- Apache 재시작 과정에서 발생할 수 있는 문제 방지
- 갱신 실패 시에도 기존 서비스 영향 없음
- 유지보수 용이성
- 자동화가 더 안전함
- 관리가 더 쉬움
따라서 지금 설정을 webroot 방식으로 변경하는 것을 추천드립니다! 😊
standalone 방식은 주로:
- 초기 설정 시
- 테스트 서버에서
- 개발 환경에서 사용됩니다.
standalone 방식에서 webroot 방식으로 변경하는 순서입니다:
1. 현재 Apache가 실행 중인지 확인(webroot는 아파치 실행 중인 상태에서 해야함) sudo systemctl status httpd
2. webroot 방식으로 인증서 재설정 sudo certbot certonly --webroot -w /var/www/html -d naranghae.com -d www.naranghae.com
3. crontab 설정 수정 sudo vi /etc/crontab
기존 설정을:30 1 * * 2 root /usr/bin/certbot renew --post-hook "systemctl reload httpd"
다음과 같이 수정:30 1 * * 2 root certbot renew --webroot -w /var/www/html --post-hook "systemctl reload httpd"
4. 갱신 테스트 (Apache 중지 없이)sudo certbot renew --dry-run
이렇게 하면 서비스 중단 없이 인증서 갱신이 가능해집니다! 👍
(현재 내 인증서 상태 확인 명령어 - 만료일 확인 가능: sudo certbot certificates)
그래도 안되면,
www.naranghae.com에 대한 인증서가 아직 standalone 방식으로 설정되어 있는 것 같습니다.
이것도 webroot 방식으로 변경해야 합니다.
1. 먼저 기존 www 인증서 설정 삭제:sudo rm /etc/letsencrypt/renewal/www.naranghae.com.conf
2. 다시 한 번 webroot 방식으로 인증서 설정:sudo certbot certonly --webroot -w /var/www/html -d naranghae.com -d www.naranghae.com
(1 선택)
3. 설정 후 다시 테스트:sudo certbot renew --dry-run
이렇게 하면 두 도메인 모두 webroot 방식으로 설정되어 Apache를 중지하지 않고도 갱신이 가능해질 것입니다! 👍
인증서 갱신 주기
Let's Encrypt의 인증서는 유효기간이 90일이지만, certbot renew 명령은 다음과 같은 조건에서 작동합니다:
- 기존 인증서의 유효기간이 30일 미만일 경우에만 갱신이 수행됩니다.
- 30일 이상 유효기간이 남아 있다면 갱신이 이루어지지 않습니다.
'AWS 설정들' 카테고리의 다른 글
EP04. LAPM 설치 + AWS 서버와 도메인 연결 (0) | 2024.09.25 |
---|---|
EP03. xshell 세션 등록 + 키 로그인 (0) | 2024.09.25 |
EP02. AWS 프리티어 사용하기 위한 설정들(계정생성, 인스턴스 생성, 탄력적IP, 보안그룹 설정) (0) | 2024.09.25 |
EP01. 도메인 구매 (0) | 2024.09.25 |