본문 바로가기

리눅스 관련

Certbot, Let's Encrypt로 SSL 인증서 갱신하기(Ubuntu, NGINX)

반응형

이 글을 보고 계신다면,

SSL인증서를 발급받고 3개월이 지나신 분일 겁니다.

잘 오셨습니다.

 

certbot을 사용하여 갱신을 해보도록 하겠습니다.

 

certbot설치방법은 아래의 내용을 참조하세요.

https://retromakers.tistory.com/27

 

certbot을 사용하여 우선 테스트를 진행해봅니다.

"--dry-run"옵션을 주시면 됩니다.

$sudo certbot renew --nginx --dry-run

아무 문제가 발생하지 않으면 아래처럼 로그가 나오고 

Congratulation메시지를 받아볼 수 있습니다.

저의 경우는 사이트2곳을 같이 돌리고 있어 2종류가 나오는 로그입니다.

$ sudo certbot renew --nginx --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/www.홈페이지1.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for 홈페이지1
http-01 challenge for www.홈페이지1
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/www.홈페이지1/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/www.홈페이지2.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for www.홈페이지2
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/www.홈페이지2/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/www.홈페이지1/fullchain.pem (success)
  /etc/letsencrypt/live/www.홈페이지2/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)

 

여기까지 진행되신분은 다음에는 별거 없습니다.

dry-run옵션을 빼고 진해하시면 됩니다.

$ sudo certbot renew --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/홈페이지1.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/홈페이지2.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for www.홈페이지2
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/www.홈페이지2/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/www.홈페이지1/fullchain.pem expires on 2023-03-22 (skipped)
Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/www.홈페이지2/fullchain.pem (success)

갱신되었습니다.

축하드립니다!

외국사람들은 Congratulation을 많이 좋아하는 거같습니다.

 

하지만, 에러나신 분들을 위하여 준비하였습니다.

Attempting to renew cert (www.홈페이지) from /etc/letsencrypt/renewal/www.홈페이지.conf  produced an unexpected error: Problem binding to port 80: Could not bind to IPv4 or IPv6.. Skipping.

가장 흔하게 보이는 에러 문구입니다.

 "Problem binding to port 80"

 

80번포트에 바인딩을 못한다네요.

우선 네트워크 상황을 봅니다.

$ sudo netstat -lntp | grep "80 "
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      16004/nginx: master
tcp6       0      0 :::80                   :::*                    LISTEN      16004/nginx: master

 nginx가 점유하고 있네요.

이런경우 nginx를 잠시 끄고 certbot을 진행하시면 됩니다.

 

$ sudo service nginx stop
$ sudo netstat -lntp | grep "80 "

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      16004/nginx: master
tcp6       0      0 :::80                   :::*                    LISTEN      16004/nginx: master

 아직 nginx가 점유하고 있네요.

프로세스 번호를 확인하면 root계정이 16004를 사용하고있어

이를 kill로 죽입니다.

16004번호는 임의의 값이니, ps -ef로 나온 로그의 번호를 확인하여 죽이시면 됩니다.

$ ps -ef | grep nginx
root     16004     1  0 13:45 ?        00:00:00 nginx: master process nginx -c /etc/nginx/nginx.conf
www-data 16598 16004  0 13:54 ?        00:00:00 nginx: worker process
www-data 16599 16004  0 13:54 ?        00:00:01 nginx: worker process
hyunj    20476 14391  0 14:56 pts/3    00:00:00 grep --color=auto nginx
$ sudo kill 16004

이후, 다시 certbot으로 갱신을 진행하면 되겠습니다.

 

감사합니다.

반응형