Web Hosting

[Amazon Lightsail] 아마존 라이트세일 워드프레스(WordPress) let’s encrypt 인증서(SSL) 수동 갱신하는 방법


Let’s Encrypt Expiry Bot 으로 부터 메일이 한 통 도착했다.

https 무료 90일 인증서 만료 30일 이전에 갱신하라고 알림을 주는 것 같다.

3개월 마다 인증서 갱신작업을 해야하지만 무료라는 점에서 만족한다.


아마존 AWS에서 운영중인 워드프레스블로그의 SSL인증서 갱신 방법에 대해 적어본다.

아래 커뮤니티도 있으니 도움 받을 수 도 있다.

https://community.letsencrypt.org/

 

Let’s Encrypt Community Support

Let’s Encrypt Community Support

community.letsencrypt.org

참고로 만료일이 30일 이상 남은 경우에는 인증서를 갱신할 수 없다.

 

 

Bitnami가 제공하는 “bncert-tool” 를 사용하여 SSL 인증서 갱신하는 방법

1. 아래 명령어를 실행하여 letsencrypt인증서 파일을 찾는다.

sudo grep -irl "$(openssl s_client -verify_quiet -showcerts -connect 나의도메인주소:443 2>/dev/null | sed -n '/BEGIN/,/END/{p;/END/q}' | head -n 3 | tail -n 2)" /opt/bitnami/letsencrypt /etc/letsencrypt

 

아래와 같이 인증서 위치를 찾을 수 있다.

/opt/bitnami/letsencrypt/certificates/나의도메인주소.com.crt

 

2. 인증서 파일이 /opt/bitnami/letsencrypt의 하위 디렉터리에 있으면 인증서는 bncert-tool 또는 Lego 클라이언트를 사용하여 설치되었을 수 있다. 인증서 확인을 위해 다음 명령을 실행한다.

sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt list


 

1단계의 명령 출력이 이전 명령에서 제공한 인증서 경로와 일치하면 bncert-tool 또는 Lego를 사용하여 인증서가 설치한 것이다. 만약  인증서 파일이 /etc/letsencrypt의 하위 디렉터리에 있으면 인증서가 Certbot을 사용하여 설치되었을 수 있다.  그러한 경우에는 다음 명령어를 실행하여 인증서 정보를 확인한다.

sudo certbot certificates

 

3. bncert-tool 또는 Lego 도구를 사용하여 설치한 Let’s Encrypt 인증서 갱신하기위해 다음 명령을 실행한다.

sudo /opt/bitnami/ctlscript.sh stop
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --path="/opt/bitnami/letsencrypt" renew --days 90
sudo /opt/bitnami/ctlscript.sh start

위 명령어에 포함된  EMAIL-ADDRESS 및DOMAIN은 본인의 이메일 주소와 도메인주소로 변경해야한다. 

만약 SSL인증서를 설치할 때 등록한 이메일 주소가 기억나지 않는다면 아래 명령어를 실행하여 확인할 수 있다.

sudo ls /opt/bitnami/letsencrypt/accounts/acm*

 

인증서 갱신을 완료했다면 아래 명령어를 통해 인증서만료일을 확인한다.

sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt list

지금까지 인증서 갱신하는 명령어의 실행결과를 캡쳐한 결과는 다음과 같다.


 

Certbot를 사용하여 SSL 인증서 갱신하는 방법

(Certbot 도구를 사용하여 설치된 Let’s Encrypt 인증서 갱신하기)

certbot를 사용중인 경우라면 아래 명령어를 사용하여 갱신해도 된다. 인증서 갱신하기 전에 Dry Run(드라이 런) 옵션을 사용하여 시뮬레이션을 해볼 수 있다.  갱신 명령어에 이 옵션을 추가해서 실행하면 가짜로 갱신 테스트를 해볼 수 있다.

sudo certbot renew --dry-run

인증서 설치에 사용한 인증 방법을 결정한다. 이를 수행하기 위해 다음 명령을 실행한다. DOMAIN을 인증서의 기본 도메인 이름으로 바꾼다. 도메인 이름을 확인하려면 sudo certbot 인증서 명령을 실행한다.

sudo cat /etc/letsencrypt/renewal/DOMAIN.conf

명령 출력에서 인증자 파라미터 값을 본다.  인증자 파라미터 값이 독립실행형웹 루트, apachenginxdns-route53 등이면, 다음 명령을 실행하여 갱신을 완료한다.

sudo /opt/bitnami/ctlscript.sh stop
sudo certbot renew
sudo /opt/bitnami/ctlscript.sh start

위의 명령은 갱신할 예정인 설치된 모든 인증서를 갱신한다.

인증자 파라미터 값이 수동이며 pref_challs 파라미터 값이 dns인 경우 자동 갱신을 설정할 수 없다. 다음 단계에 따라 수동으로 갱신해야 한다. 인증서를 갱신할 때마다 이 단계를 반복해야 한다.

 

1.    이 방법을 사용하려면 도메인의 DNS 공급자에 TXT 레코드를 추가해야 한다. 이 과정은 다소 시간이 걸릴 수 있으므로 Linux GNU 화면에서 명령을 실행하여 세션 시간 초과를 방지하는 것이 제일 좋다. Screen 세션을 시작하려면 다음 명령을 입력한다.

screen -S letsencrypt

 

2.    다음 명령을 실행하고 Domains 파라미터 값을 찾는다. 다음 예에서는 DOMAIN 을 인증서의 기본 도메인 이름으로 바꾼다.

sudo certbot certificates -d DOMAIN

 

3.    다음 명령을 실행하여 인증서를 갱신한다. -d 옵션을 사용하여 이전 명령에서 찾은 각 도메인을 동일한 순서로 포함해야 한다. 추가적인 도메인을 포함하는 경우 현재 도메인을 제거하거나, 도메인의 순서를 변경하면, 원래 인증서가 갱신되는 대신 DOMAIN-001 이름으로 새 인증서가 생성될 수 있다.

sudo certbot certonly --manual --preferred-challenge dns -d DOMAIN-1 -d DOMAIN-2 --force-renewal

 

4.    도메인의 DNS 레코드에 TXT 레코드를 추가하여 지정된 도메인을 소유 여부를 확인하라는 메시지가 표시된다.  Let’s Encrypt는 검증에 반드시 사용해야 하는 하나 또는 여러 개의 TXT 레코드를 제공한다.

 

5.    화면에 TXT 레코드가 표시되면 먼저 도메인의 DNS에 제공된 레코드를 추가한다. TXT 레코드가 인터넷 DNS로 전파된다는 것을 확인할 때까지 ENTER 키를 누르면 안된다. 또한 현재 화면 세션이 종료되므로 CTRL+D를 누르지 안된다.

 

6.    TXT 레코드가 인터넷 DNS로 전파되었는지 확인하려면 DNS 텍스트 조회에서 찾아본다. 텍스트 상자에 다음 텍스트를 입력하고 TXT 조회를 선택하여 확인한다. example.com을 사용자 도메인으로 바꿔야 한다.

_acme-challenge.example.com

7.    TXT 레코드가 인터넷의 DNS로 전파된 경우 페이지에 TXT 레코드 값이 표시된다. 이제 화면으로 돌아가서 Enter 키를 누른다.

8.    참고: 셸에서 제거된 경우 명령 screen -r SESSIONID를 사용하여 다시 가져온다. 명령 screen -ls를 실행하여 세션 ID를 가져온다

 

9.    Certbot 프롬프트에서 다른 TXT 레코드를 추가하라는 메시지가 표시되면, 5~8단계를 다시 완료한다.

10.    SSL 인증서가 생성되면 “인증서를 받았습니다.”라는 메시지가 나타난다.

 

 

인증서 자동 갱신 처리 하는 방법(crontab에 추가하자)

1. 현재 등록된 crontab 정보를 출력하는 명령어는 다음과 같다.

sudo crontab -l

2. crontab에 내용을  입력 및 저장 방법은 vi에디터와 동일하다.  저장시 콜론(:)입력 후 wq 입력하면 저장할 수 있다.

sudo crontab -e

 

3. 다음 예제는 매일 새벽 5시에 자동으로 갱신하는 작업을 추가하고 apache 서버를 재시작하는 방법이다.

crontab -e
0 5 * * * /usr/bin/certbot renew --renew-hook="systemctl restart httpd"

 

실행 명령어 뒤에 –renew-hook옵션은 인증서 갱신이 성공했을 경우에만 아파치 서버를 재시작하기 위한 조건이다.

crontab 규칙은 다음과 같다.


토요일 새벽 5시에 갱신처리를 한다면 다음과 같이 설정하면 된다.

인증서를 90일 마다 갱신해야함으로 본인의 주기에 맞게 설정하면 될 듯 하다.

0 5 * * 6  /usr/bin/certbot renew --renew-hook="systemctl restart httpd"

4. 크론탭 실행 로그 보는 명령어는 다음과 같다.

view /var/log/syslog

 

[REFERENCE]

 

Lightsail의 Bitnami 스택에서 SSL 인증서 갱신하기

3.    다음 명령을 실행하여 인증서를 갱신합니다. -d 옵션을 사용하여 이전 명령에서 찾은 각 도메인을 동일한 순서로 포함해야 합니다. 추가적인 도메인을 포함하는 경우 현재 도메인을 제거

aws.amazon.com

 

 

Leave a Reply

error: Content is protected !!