Bitnami Lightsail에서 wildcard SSL 인증서 발급받기

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/letsencrypt

API Key 발급

  1. Lego 사용을 위해 Cloudflare의 API 키 발급이 필요하다. Manage Account > Account API tokens > Create Token > Create Custom Token 을 선택한다.
  1. 토큰 생성페이지에서, Token name은 알아보기 편한 이름을 설정해준다. 그리고 권한은 Zone / DNS / Edit으로 설정한다. 추가로, Zone / Zone / Read 도 설정해준다.
    Zone Resources는 필수는 아니지만, 보안을 위해 해당 권한을 내가 선택한 도메인에만 할당하는 것을 권장한다.
  1. 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
  1. 잠시 기다리면 발급이 완료된다. 새로 발급된 인증서는 아래 경로에서 확인할 수 있다.
ls /opt/bitnami/letsencrypt/certificates
  1. 이어서 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'
  1. 기존 인증서를 백업하자.
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
  1. 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  ...