let’s encrypt를 이용하면 무료로 SSL 인증서를 받을 수 있고, 특히나 v2 api를 이용하면 와일드카드 인증서까지 받을 수 있기 때문에 개인들은 구지 돈내고 유료 SSL 인증서를 발급 받을 필요는 없을것 같다.
내 경우는 DNS를 cloudflare로 모두 옮겼기 때문에 certbot-dns-cloudflare를 이용해서 인증서를 발급/갱신하도록 설정했다.
패키지 설치하기
패키지 설치는 아래처럼 하면 된다.
1 |
sudo apt-get install python3-certbot-dns-cloudflare |
DNS challenge 등록하기
DNS challenge를 등록하기 전에 cloud flare my profile 메뉴에서 apikey를 가져와야 한다.
apikey를 가져왔으면 아래와 같은 내용으로 /root/.secrets/cloudflare.ini 파일을 만들자.
1 2 |
dns_cloudflare_email = "..." dns_cloudflare_api_key = "..." |
여기까지 왔으면 준비는 끝났고, 이제 아래 커맨드를 통해 challenge를 생성하면 된다.
1 2 3 4 5 6 |
sudo certbot certonly \ --server https://acme-v02.api.letsencrypt.org/directory \ --preferred-challenges dns-01 \ --dns-cloudflare \ --dns-cloudflare-credentials /root/.secrets/cloudflare.ini \ -d "unfix.net,*.unfix.net,mytears.org,*.mytears.org" |
-d 옵션 뒤에 사용하고 싶은 도메인들을 주루룩 적어주면 되고, 뭔가 동의하라고 하면 동의해주자.
정상적으로 동작했으면,
/etc/letsencrypt/live 밑에 인증서가 생성된다. (위 예제의 경우
/etc/letsencrypt/live/unfix.net)
인증서 확인하기
아마 제대로 됐겠지만, 인증서에 내가 원하는 도메인들이 다 등록되어 있는지 확인하기 위해선 아래 커맨드를 활용하면 된다.
1 |
sudo openssl x509 -in /etc/letsencrypt/live/unfix.net/fullchain.pem -noout -text |
출력되는 내용 중에 alternative name 부분에 내가 요청한 도메인들이 들어있으면 정상인거 같다.
1 2 |
X509v3 Subject Alternative Name: DNS:*.mytears.org, DNS:*.unfix.net, DNS:mytears.org, DNS:unfix.net |
apache virtual host에 SSL 인증서 적용하기
아래는 내 블로그용 virtualhost 설정인데, rewrite 모듈을 이용해서 http로 접근한 경우 https로 리다이렉트 되도록 설정했고, SSL용 virtual host에서 letsencrypt를 통해 발급받은 인증서를 사용하도록 설정했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<VirtualHost *:80> ServerName b.mytears.org DocumentRoot /usr/share/wordpress Alias /wp-content /home/tee/blog/wp-content <IfModule mod_ssl.c> RewriteEngine on RedirectMatch 301 ^(.*)$ https://b.mytears.org$1 </IfModule> </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerName b.mytears.org DocumentRoot /usr/share/wordpress Alias /wp-content /home/tee/blog/wp-content SSLEngine on SSLCertificateFile /etc/letsencrypt/live/unfix.net/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/unfix.net/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/unfix.net/chain.pem </VirtualHost> </IfModule> |
아래 커맨드로 mod_ssl을 활성화시키자
1 |
sudo a2enmod ssl |
참고로 rewrite 모듈이 기본으로 활성화되어 있는지 기억이 안나는데, rewrite 모듈 관련 에러가 나는 경우 아래와 같은 커맨드를 통해 모듈을 활성화시켜주면 된다.
1 |
sudo a2enmod rewrite |
virtualhost를 적용했으면 apache 설정을 다시 로드할 필요가 있다.
1 |
sudo apachectl -k graceful |
AWS 방화벽 룰 추가하기
이거 때문에 좀 삽질을 했는데, 기본으로 AWS lightsail 인스턴스의 방화벽은 http, ssh 만 허용하도록 되어 있으므로 방화벽 허용 룰에 https를 추가해야할 필요가 있다.
인스턴스를 선택하고 …>관리>네트워크 메뉴로 가서 위와 같은 항목을 찾은 뒤 다른 항목 추가 버튼을 눌러서 https를 추가해주자.
cronjob 등록하기
자동으로 인증서를 갱신하도록 하기 위해 cronjob을 등록하기 위해 우선 아래와 같은 내용으로 /etc/cron.daily/certbot 파일을 만들자.
1 2 3 |
#!/bin/bash certbot renew --quiet --post-hook "apachectl -k graceful" > /dev/null 2>&1 |
이제 cron이 위 파일을 실행시킬 수 있도록 퍼미션을 조정해주면 된다.
1 |
sudo chmod 755 /etc/cron.daily/certbot |
참고자료
두번째 링크껄 많이 참고했는데, 해놓고 나서 보니 첫번째 링크대로 따라하는게 더 깔끔한거 같다. OTL
- https://www.eigenmagic.com/2018/03/14/howto-use-certbot-with-lets-encrypt-wildcard-certificates/
- https://bjornjohansen.no/wildcard-certificate-letsencrypt-cloudflare
Similar Posts:
- AWS Lightsail ubuntu instance로 워드프레스 만들기
- 내가 참여했던 오픈소스
- 스팸 필터 성능 공개 -_-v
- Sender Rewrite Scheme
- 메일에 서명 추가했습니다.