본문 바로가기

OS/Linux

[LetsEncrypt] certbot을 이용한 SSL 인증서 발급(standalone, txt dns 레코드(dns challenge))

반응형

certbot 설치

환경 : CentOS7 x64

yum install certbot

 

 

 

 

standalone 방식

 

조건

  • webserver의 중지가 필요하다.
  • dns에 도메인등록
  • dns 에 등록된 IP와 webserver의 라우팅 가능한 IP가 일치해야 한다.

 

SSL 인증서 발급받기

# certbot certonly --standalone -d test.test.com

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): <메일주소>
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
Account registered.

 

 

메일주소 입력 외 Y눌러 진행하면 된다.

 

 

 

 

TXT DNS 레코드 방식(dns challenge)

 

이 방식을 사용할 수 있는 경우를 예로 들면  NAT 환경에서 webserver가 사설 IP를 가져야 하는 경우 dns challenge를 통해 발급 받을 수 있다.

 

 

조건

  • DNS 레코드를 수정할 수 있는 권한이 있어야 한다.

 

 

 

SSL 인증서 발급받기

# certbot certonly -d test.test.com --manual --preferred-challenges dns

dns-01 challenge for test.test.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.test.test.com with the following value:

HYabwwq-2BJO48jyl6XCeBd6vTXcPkyO65psua0Mumk

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

 

 

엔터 눌러 진행하기전에 DNS TXT 레코드 등록을 한다.

 

 

 

TXT DNS 레코드 등록

 

클라우드플레어를 예로 아래와 같이 등록한다.

 

 

레코드 등록 확인을 한다.

# dig _acme-challenge.test.test.com txt

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> _acme-challenge.test-st-patch.sbside.com txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36883
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;_acme-challenge.test.test.com. IN TXT

;; ANSWER SECTION:
_acme-challenge.test.test.com. 300 IN TXT "HYabwwq-2BJO48jyl6XCeBd6vTXcPkyO65psua0Mumk"

 

 

등록확인이 완료되면 엔터를 눌러 SSL 인증서를 발급 받는다.

 

 

 

 

인증서 갱신

LetsEncrypt SSL 인증서는 90일이 유효기간으로 갱신 만료일 30일 이내 부터 갱신을 할 수 있다.

 

인증서가 갱신되면 webserver를 재시작 할 필요가 있으므로 이와 관련된 설정을 진행한다.

# vim /etc/letsencrypt/renewal/test.test.com
...
[renewalparams]
pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

 

 

crontab을 예로 한달에 1번 혹은 일주일에 1번 갱신 작업 스케줄을 짜는게 좋다.

# crontab -e

## 매월 1일 오전 9시에
0 9 1 * * certbot renew --quiet

## 매주 일요일 오전 9시에
0 9 * * 7 certbot renew --quiet
반응형