문서 보기문서 편집수정 내역 Let's Encrypt (덤프버전으로 되돌리기) [[분류:컴퓨터 보안]] [목차] [[파일:letsencrypt-logo-horizontal.svg]] [[https://letsencrypt.org/|공식 홈페이지]] == 개요 == 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년동안 제공되지만 결제는 --예산관리--하여간 엔지니어에겐 귀찮고 번거로운 일이다. 최소한의 이런 불편한 부분을 자동화해준다. == 사용방법 == 여유가 된다면 [[https://letsencrypt.org/getting-started/]](영문) 읽어본뒤에 적용하면 된다. 상당한 커스텀세팅을 위해서는 문서의 클라이언트 옵션을 보는편이 좋다. 대부분의 런타임 플렛폼과 [[CLI]] LIB 타입이 나와있으므로 새로 구현 해야 하는 경우는 거의 없다. 클라이언트는 [[Python]] 기반이다. == 주의사항 == * '''80번 포트를 확인하자''' 인증서를 발급할 때, 반드시 80번 포트가 열려야 한다. 만약 열지 않고 진행한다면 발급해주지 않으며 방화벽이나 [[포트 포워딩]]을 통해서 열려 있나 확인해보자.[* 포트 포워딩으로 8080번 포트를 80번으로 연결할 수 있다. 이는 다른 포트도 마찬가지.] * '''발급 수 제한''' 중복되는 도메인에 성공과 실패에 관계 없이 1주일 안에 5회 재발급이 카운트된다면, 해당 시간부터 1주일 동안 발급을 받을 수 없다.[* 단, 사용자가 취소해서 작업을 중단할 경우 카운트되지 않는다.] === 인증서 발급 방식 === Let's Encrypt가 인증서를 발급하는 방식에는 3가지가 있으며, 주로 Let's Encrypt가 추천하는 인증서 발급 프로그램인 [[https://certbot.eff.org/|Certbot]]을 사용한다. * '''Standalone''' standalone 명령어를 사용하면 Certbot에 내장된 세팅을 사용해서 도메인만으로 인증서가 발급 되고, 갱신 절차도 자동으로 처리된다. *.example.com 형태의 와일드카드 서브 도메인 인증서는 발급할 수 없다. * '''Webroot''' webroot 명령어를 사용하면 자신의 웹 서버에서 작동중인 웹 사이트를 이용해서 인증서를 발급하고, 갱신 절차도 자동으로 처리된다. *.example.com 형태의 와일드카드 서브 도메인 인증서는 발급할 수 없다. * '''DNS''' 도메인이 연결된 DNS에 TXT 레코드를 생성해서 인증서를 발급하는 방식으로, 인증서 발급 과정에 웹 서버가 필요 없고 *.example.com 형태의 와일드카드 서브 도메인 인증서를 발급할 수 있다. * 매번 인증서를 갱신할 때마다 DNS에 TXT 레코드를 새로 생성해야 하므로, 외부에서 TXT 레코드를 입력할 수 있도록 DNS가 API를 제공하는 경우에는 갱신 과정을 자동으로 처리할 수 있다. [[http://blog.minase.moe/2|CloudFlare API를 통한 예시]] * API가 여의치 않은 경우(웹 패널 방식)에는 Chrome 확장 프로그램으로 만들어 쓰거나 직접 웹 폼을 전송하여 구현이 가능하다. [[https://github.com/buschtoens/le-challenge-cloudflare|#]], [[https://github.com/publishlab/node-acme-client#acme-node|#]] 단독 노드 플랫폼에서 작동을 원하는 경우 쓴다. auto 모드에서는 dns-01 스펙에 문제가 있으므로 쓰지 말아야 한다. === 간단한 방법 === 1. [[https://certbot.eff.org/|Certbot 홈페이지]]에 들어가서 자신의 서버 사양을 선택하면 설명 화면이 나온다. 1. 문서를 읽으면서 터미널에 명령어를 입력한다. 1. 몇몇 정보를 입력하면 알아서 설정해주고, 3개월 마다 갱신도 자동으로 해준다. 또는 사전에 빌트인된 [[웹 호스팅]]을 사용하는 방법이 있다. === [[Tomcat]]에서 인증받는 방법 === 위의 과정들과는 다르게, Tomcat의 경우 수동적으로 맞출 수밖에 없다. Tomcat 파일을 tar.gz 배포형 기준으로 작성했으며, Tomcat 서버 폴더를 /etc/tomcat로 한 상태로 가정한다. 1. tomcat 서버를 켠다. 이때, 외부에서 80번 포트로 자신의 Tomcat 서버가 접속되는지 확인한다. 1. [[https://certbot.eff.org/|Certbot 홈페이지]]로 들어가서 자신의 서버 사양을 선택하면 설명 화면이 나온다. 1. {{{certbot certonly -webroot}}}를 입력한다. 1. 자신의 도메인과 Webroot폴더인 /etc/tomcat/webapps/ROOT를 입력해서 인증서를 받는다.[* {{{webapps/ROOT}}} 폴더.] 1. conf폴더에 있는 server.xml에서 주석 처리된 Http11NioProtocol를 찾아 주석을 제거한다.[* html, jsp, xml과 같은 파일들의 주석은 {{{}}}로 이루어져 있다.] 1. {{{}}} 내부에는 다음과 같이 고쳐야 한다. 단, {{{type="RSA"}}}는 그대로 둔다. {{{ certificateKeyFile="/etc/letsencrypt/live/[자신의 도메인]/privkey.pem" certificateFile="/etc/letsencrypt/live/[자신의 도메인]/cert.pem" certificateChainFile="/etc/letsencrypt/live/[자신의 도메인]/fullchain.pem" }}} 1. Tomcat 서버를 재시작한다. 1. Tomcat 서버의 manager 페이지의 시스템 진단서의 인증서들로 들어가면 인증서 정보가 나온다. 이때, 인증서 정보가 나온다면 적용이 된 상태다. === 이전 방법 === [[우분투|ubuntu]]에서 테스트된 내용이다. 1. {{{git clone https://github.com/certbot/certbot}}}을 입력하여 클라이언트를 받는다. 1. 다운로드한 폴더에 들어간다. 1. (apache나 nginx의 가상 호스트를 사용할 경우) 각각 {{{./certbot-auto --apache -d (도메인; -d 도메인 이름을 추가로 입력할 수 있다)}}} {{{./certbot-auto --nginx -d (도메인)}}} (standalone) {{{./certbot-auto certonly --standalone --email (이메일) -d (도메인)}}} 1. (standalone으로 발급받았을 시) apache나 nginx 등에 연결한다. 인증서의 기본 경로는 {{{/etc/letsencrypt/live/(도메인 이름)}}}이다. == 관련 문서 == * [[TLS]] * [[인증서]] * [[PEM]]캡챠되돌리기