ubuntu에서 letsencrypt ssl 인증서 사용하기 (with cloudflare dns)

let’s encrypt를 이용하면 무료로 SSL 인증서를 받을 수 있고, 특히나 v2 api를 이용하면 와일드카드 인증서까지 받을 수 있기 때문에 개인들은 구지 돈내고 유료 SSL 인증서를 발급 받을 필요는 없을것 같다.

내 경우는 DNS를 cloudflare로 모두 옮겼기 때문에 certbot-dns-cloudflare를 이용해서 인증서를 발급/갱신하도록 설정했다.

패키지 설치하기

패키지 설치는 아래처럼 하면 된다.

DNS challenge 등록하기

DNS challenge를 등록하기 전에 cloud flare my profile 메뉴에서 apikey를 가져와야 한다.

apikey를 가져왔으면 아래와 같은 내용으로 /root/.secrets/cloudflare.ini 파일을 만들자.

여기까지 왔으면 준비는 끝났고, 이제 아래 커맨드를 통해 challenge를 생성하면 된다.

-d 옵션 뒤에 사용하고 싶은 도메인들을 주루룩 적어주면 되고, 뭔가 동의하라고 하면 동의해주자.

정상적으로 동작했으면, /etc/letsencrypt/live 밑에 인증서가 생성된다. (위 예제의 경우
/etc/letsencrypt/live/unfix.net)

인증서 확인하기

아마 제대로 됐겠지만, 인증서에 내가 원하는 도메인들이 다 등록되어 있는지 확인하기 위해선 아래 커맨드를 활용하면 된다.

출력되는 내용 중에 alternative name 부분에 내가 요청한 도메인들이 들어있으면 정상인거 같다.

apache virtual host에 SSL 인증서 적용하기

아래는 내 블로그용 virtualhost 설정인데, rewrite 모듈을 이용해서 http로 접근한 경우 https로 리다이렉트 되도록 설정했고, SSL용 virtual host에서 letsencrypt를 통해 발급받은 인증서를 사용하도록 설정했다.

아래 커맨드로 mod_ssl을 활성화시키자

참고로 rewrite 모듈이 기본으로 활성화되어 있는지 기억이 안나는데, rewrite 모듈 관련 에러가 나는 경우 아래와 같은 커맨드를 통해 모듈을 활성화시켜주면 된다.

virtualhost를 적용했으면 apache 설정을 다시 로드할 필요가 있다.

AWS 방화벽 룰 추가하기

이거 때문에 좀 삽질을 했는데, 기본으로 AWS lightsail 인스턴스의 방화벽은 http, ssh 만 허용하도록 되어 있으므로 방화벽 허용 룰에 https를 추가해야할 필요가 있다.

인스턴스를 선택하고 …>관리>네트워크 메뉴로 가서 위와 같은 항목을 찾은 뒤 다른 항목 추가 버튼을 눌러서 https를 추가해주자.

cronjob 등록하기

자동으로 인증서를 갱신하도록 하기 위해 cronjob을 등록하기 위해 우선 아래와 같은 내용으로 /etc/cron.daily/certbot 파일을 만들자.

이제 cron이 위 파일을 실행시킬 수 있도록 퍼미션을 조정해주면 된다.

참고자료

두번째 링크껄 많이 참고했는데, 해놓고 나서 보니 첫번째 링크대로 따라하는게 더 깔끔한거 같다. OTL

Similar Posts:

Facebooktwitterlinkedinmail

Leave a Reply