Let's Encrypt

Let's Encrypt는 보안 웹사이트를 위한 인증서의 수동 생성, 유효성 확인, 디지털 서명, 설치, 갱신 등 종전의 복잡한 과정을 없애주는 자동화된 프로세스를 통해 전송 계층 보안(TLS) 암호화를 위해 무료 X.509 인증서를 제공하는 인증 기관이다. 2016년 4월 12일에 출범하였다.

개요

이 프로젝트는 어디에서든 접근 가능한 월드 와이드 웹 서버들에 대한 암호화된 연결을 생성하는 것이 목적이다. 지불, 웹 서버 구성, 유효성 확인 이메일 관리, 인증서 갱신 작업을 제거해주는데 이는 TLS 암호화를 구성하고 유지보수하는 복잡도를 상당히 낮추어준다는 것을 뜻한다. 리눅스 웹 서버에서 HTTPS 암호화를 구성하고 인증서를 인수하고 설치하는데에는 단지 두 개의 명령어만 실행하면 된다.
소프트웨어 패키지는 공식 데비안, 우분투 소프트웨어 저장소에 포함되었다. 암호화되지 않은 HTTP를 구식으로 처리하기 위한 모질라, 구글 등 주요 브라우저 개발사들의 현재 발안들은 Let's Encrypt에 의존하고 있다. 추후 이 프로젝트가 추후 모든 웹에 대한 암호화된 연결 수립의 기본 케이스로 취급될 가능성이 있을 것으로 간주된다.
완전한 자동화가 가능하다는 이유로 도메인 확인 인증서(domain-validated certificate)만이 발행된다. 기관 확인, 확장 확인 인증서(Extended Validation Certificate)는 사용할 수 없다.
가능한 투명하게 함으로써 자신이 소유한 신뢰성을 보호하고 공격 및 조작 시도로부터 보호하는 것이 목적이다. 이로써 투명한 보고서를 정기적으로 게시하고, 모든 ACME 트랜잭션을 공개 기록하며(예: 인증서 투명성을 사용함으로써) 개방형 표준과 자유 소프트웨어를 가능한 많이 사용한다.

수반되는 기관

Let's Encrypt는 공익 기관 ISRG(Internet Security Research Group)에 의해 제공되는 서비스이다. 주요 스폰서들은 전자 프런티어 재단(EFF), 모질라 재단, OVH, 아카마이, 시스코 시스템즈가 있다. 그 밖의 파트너들로는 IdenTrust, 미시간 대학교, 스탠퍼드 법학대학원, 리눅스 재단, Raytheon/BBN 테크놀로지스의 Stephen Kent, 코어OS의 Alex Polvi가 포함된다.

기술

2015년 6월, Let's Encrypt는 오프라인으로 보관되는, 하드웨어 보안 모듈에 개인 키가 저장된 RSA 루트 인증서를 생성하였다. 루트 인증서는 2개의 중간 인증서에 서명하기 위해 사용되며 이는 인증 기관 IdenTrust에 의해 상호 서명된다. 중간 인증서들 가운데 하나는 발행된 인증서를 서명하기 위해 사용되는 한편 다른 인증서는 최초 중간 인증서에 문제가 있을 경우를 대비하여 백업용으로 오프라인 보관된다. IdenTrust 인증서가 주요 웹 브라우저에 사전 설치되어 있는 까닭에 Let's Encrypt 인증서들은 설치 후에 정상적으로 유효성이 확인되고 수락되며 이는 브라우저 벤더들이 ISRG 루트 인증서를 트러스트 앵커로 포함하지 않더라도 상관이 없다.
Let's Encrypt 개발자들은 2015년 늦게 ECDSA(Elliptic Curve Digital Signature Algorithm) 루트 인증서도 생성할 예정이었으나 2016년 초로 연기되었다가 2018년으로 다시 연기되었다.

프로토콜

새로운 인증 기관의 등록을 자동화하기 위해 사용되는 시도-응답(challenge–response) 프로토콜은 ACME(자동화된 인증서 관리 환경)으로 부른다. 인증서에 의해 적용되는 도메인 상 웹 서버에 대한 다양한 요청을 수반한다. 잇따르는 응답이 예측된 바와 일치하는지의 여부에 따라 도메인 상의 등록자 통제가 보장(도메인 유효성 확인)된다. 이를 달성하기 위해 ACME 클라이언트 소프트웨어는 서버 네임 인디케이션(DVSNI, 즉 Domain Validation using Server Name Indication)을 사용하여 특수한 요청과 함께 ACME 인증 기관 서버에 의해 조회되는 시스템 서버 상에 특수한 TLS 서버를 구성한다.
유효성 확인 과정들은 별개의 네트워크 경로를 통해 수차례 수행된다. DNS 엔트리를 검사하는 일은 DNS 스푸핑 공격을 더 어렵게 하기 위해 지질학적으로 다양한 여러 위치에서 프로비저닝 처리된다.
ACME 통신은 HTTP 연결을 경유하여 JSON 문서들을 교환함으로써 이루어진다. 초안 사양은 깃허브에서 확인할 수 있으며, 특정한 판은 인터넷 표준을 위해 IETF(국제 인터넷 표준화 기구)에 인터넷 드래프트로 제출되었다.

소프트웨어 구현

인증 기관은 Go로 작성된 볼더(Boulder)라는 이름의 소프트웨어로 구성되며 ACME 프로토콜의 서버 사이드를 구현한다. 모질라 퍼블릭 라이선스(MPL) 제 2판으로 배포된 소스 코드가 포함되는 자유 소프트웨어로 게시된다. TLS 암호화 채널을 경유해 접근할 수 있는 REST API를 제공한다.
아파치 라이선스의 파이썬 인증서 관리 프로그램 certbot(이전 이름은 letsencrypt)은 클라이언트 사이드(등록자의 웹 서버)에 설치된다. 이것을 사용하면 인증서를 주문하고 도메인 유효성 확인 과정을 수행하고 인증서를 설치하고 HTTP 서버에 HTTPS 암호화를 구성한 다음 나중에 인증서를 주기적으로 갱신하는 것이 가능하다. 설치 후 사용자 라이선스에 동의하면 하나의 명령어만 실행해도 유효한 인증서를 설치할 수 있다. OCSP 스태플링이나 HSTS(HTTP Strict Transport Security)와 같은 추가 옵션도 사용할 수 있다. 자동 설정은 처음에는 아파치와 nginx에서만 동작했다.
Let's Encrypt는 90일 간 유효한 인증서들을 발행한다. 그 이유는 자동화를 장려하기 위함과 더불어 이러한 인증서들이 키 문제라든지 잘못 발행되는 것으로부터 제약이 있기 때문이다. 공식 certbot 클라이언트와 서드파티 클라이언트 대부분은 인증서 갱신의 자동화를 허용한다.
여러 언어로 된 여러 서드파티 클라이언트 구현체들이 공동체에 의해 개발되었다.

역사

Let's Encrypt 프로젝트는 2012년 두 명의 모잘라 직원 Josh Aas, Eric Rescorla에 의해 시작되었으며 전자 프런티어 재단의 Peter Eckersley와 미시간 대학교의 J. Alex Halderman이 동참하였다. Let's Encrypt를 지원하는 기업 ISRG는 2013년 5월에 동참하였다.
Let's Encrypt는 2014년 11월 18일 공개 발표되었다.
2015년 1월 28일, ACME 프로토콜이 표준화를 위해 IETF에 공식 제출되었다.
2015년 4월 9일, ISRG와 리눅스 재단은 협업을 선언하였다.
6월 초 루트 및 중간 인증서들이 생성되었다.
2015년 6월 16일, 서비스의 마지막 공식 스케줄이 발표되었으며, 최초 인증서는 2015년 7월 27일에 제출될 것으로 예측되었으나 보안과 확장성을 테스트하기에는 빠듯했다. 이 서비스의 GA(General availability) 일정은 2015년 9월 14일로 예정되었다. 2015년 8월 7일, 시스템 보안과 안정성을 보장할 시간을 더 들이기 위해 런칭 스케줄이 수정되었으며 최초 인증서는 2015년 9월 7일 발행하고 GA는 2015년 11월 16일 이루어지는 것이 포함되었다. IdenTrust의 상호 서명은 Let's Encrypt가 대중에게 공개될 때 이용 가능할 것으로 계획되었다.
2015년 9월 14일, Let's Encrypt는 helloworld.letsencrypt.org 도메인을 위한 최초의 인증서를 발생하였다. 같은 날, ISRG는 루트 응용 프로그램들을 모질라, 마이크로소프트, 구글, 애플에 제출하였다.
2015년 10월 19일, 중간 인증서들은 IdenTrust에 의해 상호 서명되었으며 Let's Encrypt가 발행한 모든 인증서들은 모든 주요 브라우저에서 신뢰를 받게 되었다.
2015년 11월 12일, Let's Encrypt는 GA 일정을 연기하고 최초 퍼블릭 베타를 2015년 12월 3일 개시하겠다고 발표하였다. 이 퍼블릭 베타는 2015년 12월 3일부터 2016년 4월 12일까지 진행되었다.