환경
- Ubuntu 22.04.3 LTS
- certbot 1.21.0
certbot설치
다음 명령어로 certbot을 설치함.
sudo apt install certbot python3-certbot-nginx
certification 발행받기.
아래 진행은 도메인 네임 ds31x.site
라는 도메인 명에서 code.test.me
서브도메인 명을 certbot의 chain으로 삼아 certification을 발행받는 것을 목표로 함. (해당 도메인 명들을 자신의 것으로 바꾸어야 함)
sudo certbot -d test.me -d code.test.me --manual --preferred-challenges dns certonly --dry-run
--dry-run
옵션은 일종의 시뮬레이션으로 성공해도 실제 certification 발행이 되지 않는다.- 즉, 테스트용이다.
- 1시간 정도에 계속해서 certification발행 과정에 문제가 발생하면 letsencrypt에서 해당 도메인명에 대한 인증서 발급이 일정시간 잠기기 때문에 꼭
--dry-run
으로 성공하고 나서 실제 진행을 하길 권한다. - 처음에 약 3시간 정도 잠겼던 경험이 있음.
질문 등에 합리적(?)으로 대답해야 한다.
인증서 갱신 안내 등을 받을 email address와 서비스 약관동의 등에 대한 질문이 있다.
가장 중요한 건 인증서를 발급받을 대상 도메인 이름의 소유자 인지 체크하는 부분으로 DNS TXT record를 지시한 키와 값으로 추가하고 이를 확인하는 부분이다.
대략 다음과 같은 메시지이다.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.code.test.me.
with the following value:
_b5snIfsfybd8PhH8KjBnv_VZNa2S-zIuewzggNEi48
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
- 해당 검증을 위해선 도메인 TXT record를 수정하고 나서
- 반드시
dig
등을 통해 실제 수정이 되었는지를 확인하고 난 이후 certification 발급을 진행하기위한 Enter를 입력해야 한다. - 다른 terminal을 띄우고 꼭 해당 TXT record가 제대로 반영이 된 것을 확인하고 나서 해야 한다.
dig
나 host
명령어로 해당 문자열이 TXT record로 제대로 반영되었는지를 확인해야 한다.
다음은 host
로 TXT record를 확인한 경우임.
$ host -t txt _acme-challenge.code.test.me
_acme-challenge.code.test.me descriptive text "_b5snIfsfybd8PhH8KjBnv_VZNa2S-zIuewzggNEi48"
다음은 dig
를 사용한 경우임.
$ dig _acme-challenge.code.test.me TXT
; <<>> DiG 9.18.12-0ubuntu0.22.04.2-Ubuntu <<>> _acme-challenge.code.test.me TXT
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21015
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;_acme-challenge.codetest.me. IN TXT
;; ANSWER SECTION:
_acme-challenge.code.test.me. 60 IN TXT "_b5snIfsfybd8PhH8KjBnv_VZNa2S-zIuewzggNEi48"
;; Query time: 40 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sun Sep 10 14:20:24 UTC 2023
;; MSG SIZE rcvd: 116
해당 검증과정에서 여러 TXT record입력을 요구할 때, 앞서 입력한 TXT record를 변경하지 말고 새로 추가해서 처리해야 한다.
(여러개를 추가해도 되니 꼭 새로 추가로 처리하자.)
nginx 설정에 HTTPS 통신 구성하기
다음 명령어를 통해 certbot
이 자동으로 설정을 추가해준다.
sudo certbot --nginx -d code.test.me
문제없이 진행되면 다음과 같은 메시지가 뜬다
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for code.test.me
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/code.test.me/fullchain.pem
Key is saved at: /etc/letsencrypt/live/code.test.me/privkey.pem
This certificate expires on 2023-12-09.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for code.ds31x.site to /etc/nginx/sites-enabled/대상nginx.conf
Congratulations! You have successfully enabled HTTPS on https://code.test.me
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/etc/nginx/sites-enabled/대상nginx.conf
을 확인하여 문제 없는지 체크한다.sudo nginx -t
로 확인해서 문제 없는지 체크하는게 좋다.
nginx를 바뀐 설정으로 다시 시작시킨다.
sudo systemctl reload nginx.service
- 웹브라우저로 https 동작여부를 확인한다.
참고자료
https://atl.kr/dokuwiki/doku.php/let_s_encrypt_certbot_wildcard_certificates
https://yoyostudy.tistory.com/60
'WebApp' 카테고리의 다른 글
[HTTPS] Certification 갱신 : certbot renew (0) | 2023.09.10 |
---|---|
[HTTPS] certbot 사용법 : chain 삭제 (0) | 2023.09.10 |
[Nginx] 설치 및 설정 추가. (0) | 2023.09.08 |
[WebApp] NginX 설정 관련 . (0) | 2023.08.01 |
[WebApp] CGI vs. WSGI (0) | 2023.07.31 |