Certbot
Certbot 사용법
1. Certbot 설치하기
먼저 서버의 패키지 목록을 업데이트하고 Certbot 및 Nginx용 플러그인을 설치합니다.
sudo apt update
sudo apt install certbot python3-certbot-nginx2. SSL 인증서 발급 및 자동 설정
Certbot의 가장 큰 장점은 Nginx 설정을 알아서 분석하고 SSL을 적용해 준다는 점입니다.
방법 A: 자동 설정 (권장)
인증서 발급은 물론, Nginx 설정 파일(.conf)까지 자동으로 수정해 줍니다.
sudo certbot --nginx -d example.com -d www.example.com-d: 적용할 도메인을 입력합니다.- 실행 후 이메일 입력, 약관 동의 절차를 거치면 끝납니다.
- HTTP를 HTTPS로 자동 리다이렉트할지 물어보는데, 웬만하면
2 (Redirect)를 선택하세요.
방법 B: 인증서만 발급 (수동 설정 선호 시)
설정 파일 건드리는 게 싫다면 인증서 파일만 받을 수도 있습니다.
sudo certbot certonly --nginx -d example.com3. 설치 경로 확인
발급이 완료되면 인증서 파일들은 다음 경로에 저장됩니다. (직접 설정 시 필요)
- 인증서 전체 체인:
/etc/letsencrypt/live/도메인명/fullchain.pem - 개인키:
/etc/letsencrypt/live/도메인명/privkey.pem
4. 인증서 자동 갱신 테스트
Let's Encrypt 인증서는 90일 동안만 유효합니다. 하지만 Certbot을 설치하면 보통 자동으로 갱신 스케줄러(cron)가 등록됩니다. 제대로 작동하는지 미리 테스트해 볼 수 있습니다.
sudo certbot renew --dry-runTip: 위 명령어를 입력했을 때 에러가 없다면, 앞으로 유효기간 만료 30일 전마다 시스템이 알아서 갱신을 진행합니다.
5. 자주 쓰는 주요 명령어 모음
| 명령어 | 설명 |
|---|---|
certbot certificates | 현재 서버에 설치된 인증서 목록과 만료일 확인 |
certbot renew | 수동으로 모든 인증서 갱신 시도 |
certbot delete --cert-name 도메인명 | 특정 도메인의 인증서 삭제 |
⚠️ 주의사항
- 80번 포트 개방: 인증 과정에서 Let's Encrypt 서버가 내 서버에 접속해야 하므로, 방화벽에서 80(HTTP)과 443(HTTPS) 포트가 열려 있어야 합니다.
- 도메인 연결: 당연히 해당 도메인이 현재 서버의 IP를 가리키고 있어야 인증이 성공합니다.
Certbot을 이용한 Dynu 도메인 인증서 발급
파이썬 환경(pip3)과 격리된 도구 관리(pipx), 그리고 실제 Certbot 발급까지 이어지는 배포 서버 초기화 및 재구축 가이드입니다.
이 과정은 시스템의 파이썬 환경을 건드리지 않으면서, certbot만 독립된 공간에 가두어 플러그인 충돌을 원천 차단하는 가장 표준적인 방식입니다.
1단계: 기존 찌꺼기 강제 삭제 (Purge All)
어설프게 남아있는 설정이 "이미 설치됨" 에러를 만듭니다. 모든 경로를 싹 비웁니다.
# 1. pip3 설치분 삭제 (시스템 보호 무시 옵션 포함)
sudo pip3 uninstall certbot certbot-dns-dynu -y --break-system-packages 2>/dev/null
# 2. apt 설치분 삭제
sudo apt remove --purge certbot -y 2>/dev/null
sudo apt autoremove -y
# 3. pipx 관련 폴더 및 캐시 강제 삭제 (핵심)
sudo rm -rf /root/.local/pipx
sudo rm -rf /root/.cache/pipx
sudo rm -rf ~/.local/pipx
sudo rm -rf ~/.cache/pipx
# 4. 꼬여있는 심볼릭 링크 및 실행 파일 삭제
sudo rm -f /usr/bin/certbot
sudo rm -f /usr/local/bin/certbot2단계: pipx 설치 및 환경 구성
pipx를 설치하고, sudo 환경에서도 명령어를 찾을 수 있도록 설정합니다.
# 1. pipx 설치
sudo apt update
sudo apt install pipx -y
# 2. root 환경에 pipx 경로 등록
sudo pipx ensurepath
# 3. 현재 쉘에 설정 반영
source ~/.bashrc
sudo -i source /root/.bashrc # root 쉘 환경 업데이트3단계: Certbot 재구축 (The Clean Build)
이제 pipx를 통해 아무런 간섭이 없는 깨끗한 가상환경에 Certbot을 설치합니다.
# 1. Certbot 설치 (이때 /root/.local/pipx/venvs/certbot 경로에 독립 환경 생성됨)
sudo pipx install certbot
# 2. Dynu 플러그인을 Certbot 전용 환경에 주입 (Inject)
sudo pipx inject certbot certbot-dns-dynu
# 3. 시스템 어디서든 'certbot'을 부를 수 있게 연결
sudo ln -sf /root/.local/bin/certbot /usr/bin/certbot4단계: 설치 결과 확인
아래 명령어를 입력했을 때, dns-dynu가 리스트에 보인다면 성공입니다.
sudo certbot plugins5단계: Dynu API 인증 파일 만들기
Certbot이 자동으로 DNS를 수정할 수 있도록 API 키를 파일로 저장해야 합니다.
# 설정 폴더 생성 (없다면)
mkdir -p ~/.secrets/certbot/
# 파일 생성
nano ~/.secrets/certbot/dynu.ini내용 입력 (본인의 API Key 입력):
dns_dynu_auth_token = YOUR_DYNU_API_KEY보안 설정 (매우 중요):
chmod 600 ~/.secrets/certbot/dynu.ini6단계: Certbot으로 Dynu 인증서 발급
이제 DNS-01 챌린지 방식으로 인증서를 발급받습니다. 배포 서버의 지연 시간을 고려하여 120초 대기 옵션을 넣습니다.
sudo certbot certonly \
--authenticator dns-dynu \
--dns-dynu-credentials /home/jace/.secrets/certbot/dynu.ini \
--dns-dynu-propagation-seconds 120 \
-d "jace1.mywire.org" \
-d "*.jace1.mywire.org" \
--agree-tos \
-m gnedu.biz@gmail.com--dns-dynu-propagation-seconds 120: 아까 겪으신 시간 문제를 해결하기 위해, DNS에 값을 쓰고 2분 동안 대기하도록 설정
7단계: Nginx 설정에 적용하기
발급이 성공하면 /etc/letsencrypt/live/jace1.mywire.org/ 경로에 파일이 생깁니다. 이를 Nginx 설정 파일에 넣으세요.
server {
listen 443 ssl;
server_name jace1.mywire.org docs.jace1.mywire.org;
ssl_certificate /etc/letsencrypt/live/jace1.mywire.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jace1.mywire.org/privkey.pem;
# 보안 설정 추천
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://localhost:4000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}8. 왜 이 방식이 더 안정적인가요?
- 멱등성: Certbot은 인증서가 이미 있고 유효기간이 넉넉하면 아무 작업도 하지 않습니다. Caddy처럼 실행할 때마다 조마조마하며 DNS를 건드리지 않습니다.
- 분리된 관리: DNS 문제로 인증서 발급이 실패해도 Nginx 서버 자체는 (기존 인증서가 있다면) 죽지 않고 잘 돌아갑니다.
- 수동 제어:
propagation-seconds를 넉넉히 줄 수 있어 Dynu의 느린 전파 속도를 확실히 기다려줄 수 있습니다. - pip3 vs pipx:
pip3는 도서관 전체에 책을 꽂는 것이라면,pipx는 책 한 권을 위한 개인 서재를 따로 만드는 것입니다. Certbot 같은 독립 도구는 무조건pipx가 유리합니다. - 갱신(Renew): 이렇게 설치해도
sudo certbot renew는 똑같이 작동합니다. - 권한 에러 발생 시:
/home/jace/.secrets/certbot/dynu.ini파일의 권한이600인지, 소유자가jace혹은root인지 다시 확인하세요.
9. 갱신(Renew) 설정
인증서 갱신은 sudo certbot renew 명령어로 수행하며, 보통 크론탭(crontab)에 등록해서 자동화합니다. 갱신 후 Nginx를 재시작하도록 deploy-hook을 걸어두면 완벽합니다.
# 갱신 테스트용
sudo certbot renew --dry-run