Let's Encrypt
공식 홈페이지
1. 개요
Let's Encrypt는 사용자에게 '''무료'''로 TLS 인증서를 발급해주는 비영리기관이다. 몇 가지 TLS 인증서 종류 중에서 완전 자동화가 가능한 DV (Domain Validated, 도메인 확인) 인증서를 무료로 발급한다. 모질라 재단, 페이스북, 구글 등 많은 업체가 스폰서로 등록되어 있다. 2019-03-11 https://letsencrypt.org/2019/03/11/acme-protocol-ietf-standard.html에 이제는 ACME 프로토콜이 IETF표준(RFC 8555)으로 등재되었다고 띄웠다.
루트 도메인 (네이키드 도메인), 특정 서브 도메인 뿐만 아니라, 하나의 인증서로 모든 서브 도메인에 사용 가능한 *.example.com 형태의 와일드카드 서브 도메인 인증서도 무료로 발급하므로 그 활용이 폭넓다.
발급된 인증서는 유효기간이 90일이며 만료 30일 전부터 갱신할 수 있다. 갱신 가능 횟수는 무제한이다.
이런 서비스가 필요한 이유는 인증서 가격이 3만원에 이르고 와일드카드의 경우 15만원에 이르러 1년동안 제공되지만 결제는 하여간 엔지니어에겐 귀찮고 번거로운 일이다. 최소한의 이런 불편한 부분을 자동화해준다.
2. 사용방법
여유가 된다면 https://letsencrypt.org/getting-started/(영문) 읽어본뒤에 적용하면 된다. 상당한 커스텀세팅을 위해서는 문서의 클라이언트 옵션을 보는편이 좋다. 대부분의 런타임 플렛폼과 CLI LIB 타입이 나와있으므로 새로 구현 해야 하는 경우는 거의 없다.
클라이언트는 Python 기반이다.
2.1. 인증서 발급 방식
Let's Encrypt가 인증서를 발급하는 방식에는 3가지가 있으며, 주로 Let's Encrypt가 추천하는 인증서 발급 프로그램인 certbot을 사용한다.
- standalone
standalone 명령어를 사용하면 certbot에 내장된 세팅을 사용해서 도메인만으로 인증서가 발급 되고, 갱신 절차도 자동으로 처리된다. *.example.com 형태의 와일드카드 서브 도메인 인증서는 발급할 수 없다.
- webroot
webroot 명령어를 사용하면 자신의 웹 서버에서 작동중인 웹사이트를 이용해서 인증서를 발급하고, 갱신 절차도 자동으로 처리된다. *.example.com 형태의 와일드카드 서브 도메인 인증서는 발급할 수 없다.
- dns
도메인이 연결된 DNS에 TXT 레코드를 생성해서 인증서를 발급하는 방식으로, 인증서 발급 과정에 웹 서버가 필요 없고 *.example.com 형태의 와일드카드 서브 도메인 인증서를 발급할 수 있다.- 매번 인증서를 갱신할 때마다 DNS에 TXT 레코드를 새로 생성해야 하므로, 외부에서 TXT 레코드를 입력할 수 있도록 DNS가 API를 제공하는 경우에는 갱신 과정을 자동으로 처리할 수 있다. CloudFlare API를 통한 예시
- API 가 여의치 않은 경우(웹 패널방식)에는 크롬확장앱으로 만들어쓰거나 직접 웹폼을 전송하여 구현이 가능하다. #cloudflare(node) , https://github.com/publishlab/node-acme-client#acme-node 단독 노드 플랫폼에서 작동시키기 원하는 경우 쓴다. auto모드에서는 dns-01 스펙에 문제가 있으므로 쓰지 말아야한다.
2.2. 간단한 방법
1. Certbot 홈페이지로 들어가서 자신의 서버 사양을 선택하면 설명 화면이 나온다.
2. 문서를 읽으면서 터미널에 명령어를 친다.
3. 몇몇 정보를 입력하면 알아서 설정해주고, 3개월 마다 갱신도 자동으로 해준다.
또는 사전에 빌트인 된 웹호스팅을 사용하는 방법이 있다.
2.3. 이전 방법
ubuntu에서 테스트 됨.
1. git clone https://github.com/certbot/certbot 을 입력하여 클라이언트를 받는다.
2. 다운로드 받은 폴더에 들어간다.
3. (apache나 nginx의 virtual host를 사용할 경우) 각각
./certbot-auto --apache -d (도메인. -d 도메인 이름을 추가로 입력할 수 있다.)
./certbot-auto --nginx -d (도메인)
(standalone)
./certbot-auto certonly --standalone --email (이메일) -d (도메인)
4. (standalone으로 발급받았을시) apache나 nginx 등에 연결한다. 인증서의 기본 경로는 /etc/letsencrypt/live/(도메인 이름)/ 폴더이다.