Bitnami Lightsail에서 wildcard SSL 인증서 발급받기
서버비용과 도메인 비용은 꾸준히 내는데, 블로그로만 쓰기에는 아쉬워서 웹서비스를 추가해보려고 했다. 그런데, 기존에 bncert-tool로 받았던 SSL 인증서가 wildcard용이 아니어서, 서브 도메인에서 사용이 불가능했다. 이를 해결하고자 wildcard ssl 인증서를 새로 발급받았다.
AWS 에 올려져 있는 글을 참조해서 SSL을 새롭게 발급받았다. DNS 공급자에 따라서 발급받는 방법이 약간씩 달라진다. 이 글은 Cloudflare를 기준으로 작성했다
Lego tool
기존에 사용한 bncert-tool은 wildcard SSL 인증서를 지원하지 않기 때문에 Lego tool을 사용한다. Bitnami ghost를 사용해 설치했으면 아래와 같은 경로에 Lego가 존재할 것이다.
cd /opt/bitnami/letsencryptAPI Key 발급
- Lego 사용을 위해 Cloudflare의 API 키 발급이 필요하다. Manage Account > Account API tokens > Create Token > Create Custom Token 을 선택한다.

- 토큰 생성페이지에서, Token name은 알아보기 편한 이름을 설정해준다. 그리고 권한은 Zone / DNS / Edit으로 설정한다. 추가로, Zone / Zone / Read 도 설정해준다.
Zone Resources는 필수는 아니지만, 보안을 위해 해당 권한을 내가 선택한 도메인에만 할당하는 것을 권장한다.

- API키 생성후 발급받은 API키를 복사하고, AWS lightsail 터미널로 돌아와서 환경변수 셋업을 해준다. 그리고 lego를 실행해준다.
export CLOUDFLARE_DNS_API_TOKEN=********
/opt/bitnami/letsencrypt/lego --email [email protected] \
--dns cloudflare \
-d '*.example.com' \
-d 'example.com' \
run- 잠시 기다리면 발급이 완료된다. 새로 발급된 인증서는 아래 경로에서 확인할 수 있다.
ls /opt/bitnami/letsencrypt/certificates- 이어서 fullchain 파일을 만든다.
sudo bash -lc 'cat /opt/bitnami/letsencrypt/certificates/padopado.co.kr.crt /opt/bitnami/letsencrypt/certificates/padopado.co.kr.issuer.crt > /opt/bitnami/letsencrypt/certificates/padopado.co.kr.fullchain.crt'- 기존 인증서를 백업하자.
sudo mv /opt/bitnami/apache/conf/bitnami/certs/server.crt /opt/bitnami/apache/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/apache/conf/bitnami/certs/server.key /opt/bitnami/apache/conf/bitnami/certs/server.key.old
- Apache cert 경로를 새 인증서로 연결한다. 그리고, 권한을 정리하고 마지막으로 apache를 재시작한다. 마지막으로 크롬을 통해 홈페이지에 접속해서 확인을 하면 wildcard가 적용된 인증서로 적용된 것을 확인할 수 있다.
sudo ln -sf /opt/bitnami/letsencrypt/certificates/padopado.co.kr.key /opt/bitnami/apache/conf/bitnami/certs/tls.key
sudo ln -sf /opt/bitnami/letsencrypt/certificates/padopado.co.kr.fullchain.crt /opt/bitnami/apache/conf/bitnami/certs/tls.crt
sudo chown root:root /opt/bitnami/letsencrypt/certificates/padopado.co.kr.key
sudo chmod 600 /opt/bitnami/letsencrypt/certificates/padopado.co.kr.key
9-1. 마지막으로 자동으로 갱신해주는 크론을 구성하자. 먼저 이전에 발급 받은 API token을 저장해두자.
sudo mkdir -p /opt/bitnami/letsencrypt/.secrets
sudo nano /opt/bitnami/letsencrypt/.secrets/cloudflare.env
``` 파일 내용
CLOUDFLARE_DNS_API_TOKEN="발급받은_API_토큰"
```
sudo chown root:root /opt/bitnami/letsencrypt/.secrets/cloudflare.env
sudo chmod 600 /opt/bitnami/letsencrypt/.secrets/cloudflare.env
9-2. 갱신 스크립트를 작성하자.
sudo mkdir -p /opt/bitnami/letsencrypt/scripts
sudo nano /opt/bitnami/letsencrypt/scripts/renew-wildcard.sh
``` 파일 내용
#!/bin/bash
set -a
source /opt/bitnami/letsencrypt/.secrets/cloudflare.env
set +a
/opt/bitnami/letsencrypt/lego [email protected] --dns cloudflare --domains "padopado.co.kr" --domains ">
/opt/bitnami/ctlscript.sh restart apache
```
sudo chmod +x /opt/bitnami/letsencrypt/scripts/renew-wildcard.sh
9-3. 크론 등록을 하고 마무리 하자.
sudo crontab -e
``` 아래 내용을 파일에 추가
0 3 * * * /opt/bitnami/letsencrypt/scripts/renew-wildcard.sh >/dev/null 2>&1
```
9-4. 마지막으로 기존 bncert툴이 기존 인증서를 자동 갱신하기 하던 크론탭을 수정하자.
sudo crontab -e -u bitnami
``` 기존 코드 주석처리
# 5 9 * * * sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt ...