안수찬 블로그

2015년부터는 무료 SSL을 사용할 수 있다? - Let's Encrypt

Introduction

안수찬 @dobestan

안수찬 @dobestan

서울대학교에서 컴퓨터공학을 전공하고, 오랜 기간 서비스 기획 및 개발을 해 왔습니다. 이러한 전문성을 인정받아 미래부 소프트웨어 마에스트로에 선정된 바 있습니다. 현재는 모바일 방송국, 퍼스트캔버스에서 컨텐츠로 새로운 가치를 그리고 있습니다. 나는 안수찬이다. 그러므로 나는 할 수 있다. me@ansuchan.com


2015년부터는 무료 SSL을 사용할 수 있다? - Let's Encrypt

Posted by 안수찬 @dobestan on .
Featured

2015년부터는 무료 SSL을 사용할 수 있다? - Let's Encrypt

Posted by 안수찬 @dobestan on .

어제부터 제 페이스북 타임라인에 계속 Let's Encrypt 사이트가 뜨길래 "아~ 그냥 기술적인 사이트인가보다" 하고 넘기다 "내년부터는 무료 SSL ..." 이라는 문구를 보고 들어가 살펴보았습니다. 개인적으로는 관심있는 분야고 한번 살펴보면 재미도 있을 것 같아 간단하게 정리해보았습니다. 제가 경험이 부족해 잘못 작성한 부분은 알려주시면 바로 수정토록 하겠습니다. 감사합니다.

Let's Encrypt > Technology

아래의 내용은 Let's Encrypt > Technology의 내용을 번역하여 이해가 쉽도록 일부 수정하였습니다. 원문과는 약간 다른 내용이 포함되어 있을 수 있으며, 번역하면서 해석이 어려웠던 부분은 영어 원문을 그대로 포함하였습니다.

먼저 Let's Encrypt의 방식을 알아보기 이전에 기존의 SSL Certificate Authority ( 예, Comodo 등 ) 를 통해서 인증서를 발급 받는 과정을 살펴보자. 사실 어떻게 보면 이 과정은 SSL 대행사 ( 예, GoGetSSL 등 )에서 진행을 한다.

[여기에는 간단한 과정이 나타난다.]

기존의 SSL CA나 SSL 대행사에서 진행하는 과정과 비교해서 Let's Encrypt의 자동화된 방식을 한번 살펴보자. Let's Encrypt는 자체적으로 개발한 ACME ( Automated Certificate Management Environment ) 프로토콜을 사용합니다. 이 프로토콜을 기반으로 하여, 기존의 사람이 직접 수행하던 도메인 인증이나 인증서 발급 등의 과정을 자동화하였습니다. 이러한 자동화는 인증서를 발급받을 서버에서 인증서 관리 에이전트를 실행함으로써 구현이 가능합니다.

ACME is a protocol for automating the management of domain-validation certificates, based on a simple JSON-over-HTTPS interface. - Github > letsencrypt/acme-spec

기존에 발급받는 과정을 살펴보겠습니다.

이 기술이 어떻게 동작하는지 살펴보기 위해서, Let's Encrypt를 지원하는 인증서 관리 에이전트를 이용하여 https://example.com를 설정하는 과정을 진행해봅시다. 이 과정은 2단계로 진행이 됩니다.

  1. 에이전트가 CA에 도메인에 대한 제어권을 등록합니다. ( Domain Validation )
  2. 에이전트에 의해서 CA에 도메인이 등록되면, 에이전트는 도메인에 대한 인증서를 요청, 갱신, 취소할 수 있습니다.

Domain Validation

Let's Encrypt는 공개 키를 통해서 서버 관리자를 식별합니다. 에이전트가 Let's Encrypt와 처음으로 상호작용할 때, 새로운 개인키-공개키 키 쌍을 생성합니다. 이와 동시에 에이전트가 하나 이상의 도메인에 대한 제어권을 CA서버에 등록을 하게 됩니다.

이는 사실상 계정을 생성하고 해당 계정에 도메인을 추가 CA 이전의 프로세스와 유사하다.

과정을 다시 한번 살펴보면, 에이전트는 도메인에 대한 제어권을 등록하기 위해서 어떠한 과정을 거쳐야하는지 Let's Encrypt CA에 요청합니다.

Let's Encrypt CA는 요청된 도메인을 바탕으로 하나 이상의 과제를 발행합니다. ( one or more sets of challenges )

이러한 방법들은 에이전트가 도메인의 제어를 증명할 수 있는 다양한 방법입니다. 예를 들어, CA는 에이전트에 다음과 같은 방법들을 제시할 수 있습니다 :

  • example.com에 대한 DNS 레코드 변경을 요청
  • https://example.com/에 대한 well-known URI에 HTTP Resource를 요청

Along with the challenges, the Let’s Encrypt CA also provides a nonce that the agent must sign with its private key pair to prove that it controls the key pair.

도전과 함께,하자 암호화는 CA 또한 에이전트가이 키 쌍을 제어하는 것을 증명하기 위해 개인 키 쌍으로 서명해야합니다 비표를 제공합니다.

The agent software completes one of the provided sets of challenges. Let’s say it is able to accomplish the second task above: it creates a file on a specified path on the https://example.com site. The agent also signs the provided nonce with its private key. Once the agent has completed these steps, it notifies the CA that it’s ready to complete validation.

에이전트 소프트웨어는 문제의 제공 세트 중 하나를 완료합니다. 의는 위의 두 번째 작업을 수행 할 수 있다고 가정 해 봅시다 : 그것은 https://example.com 사이트에 지정된 경로에 파일을 생성합니다. 에이전트는 또한 개인 키를 사용하여 제공 넌스에 서명합니다. 에이전트가 다음 단계를 완료하면, 그것은 검증을 완료 할 준비가 CA를 알려줍니다.

Then, it’s the CA’s job to check that the challenges have been satisfied. The CA verifies the signature on the nonce, and it attempts to download the file from the web server and make sure it has the expected content.

그런 다음, 문제가 충족되었는지 확인하기 위해 CA의 일이다.CA는 논스에 서명을 확인하고, 그 웹 서버로부터 파일을 다운로드하고 예상되는 콘텐츠를 가지고 있는지 확인하기 위해 시도한다.

If the signature over the nonce is valid, and the challenges check out, then the agent identified by the public key is authorized to do certificate management for example.com. We call the key pair the agent used an “authorized key pair” for example.com.

비표를 통해 서명이 유효하고, 문제가 확인되면, 공개 키에 의해 식별되는 에이전트는 example.com에 대한 인증서 관리 작업을 수행 할 수있는 권한이있다. 우리는 에이전트가 example.com에 대한 "허가 된 키 쌍을"사용 된 키 쌍을 호출합니다.

Certificate Issuance and Revocation

에이전트가 이미 인증된 키 쌍을 가지고 있다면, 인증서를 요청하고, 갱신하고, 취소하는 과정은 굉장히 단순합니다. 간단하게 인증서 관리 메시지를 전송하고, 전송된 인증서 관리 메시지와 인증된 키 쌍을 바탕으로 서명하는 과정에 지나지 않습니다. ( 단순히 메시지의 전송과 크게 다르지 않습니다. 이 부분을 CA나 에이전트에서 수행합니다. )

도메인에 대한 인증서를 발급받기 위해서 에이전트는 PKCS#10(공개키 암호 표준)를 바탕으로 example.com로 CSR을 생성합니다. 일반적으로 CSR은 공개 키에 대응하는 개인 키로 서명을 포함합니다. 다만, 이 경우에는 Let's Encrypt CA가 인증된 CSR임을 확인하기 위해서 인증된 키를 바탕으로 전체 CSR에 대해서 다시 서명을 진행합니다.

Let's Encrypt CA가 요청을 수신하면, 양쪽의 서명을 검증합니다. 아무런 문제가 없다면, CA는 인증서 서명 요청 (CSR)을 바탕으로 example.com에 대한 인증서를 발급하고 이 정보를 에이전트를 통해서 전달합니다.

인증서 철회 또한 인증서 발급과 유사한 방식으로 동작합니다.

  1. 에이전트는 가지고 있는 키 쌍을 가지고 example.com에 취소 요청을 서명합니다.
  2. Let's Encrypt CA는 실제로 에이전트가 example.com에 대한 권한을 가지고 있는지 확인합니다.
  3. 실제 에이전트가 권한이 있다면, CA는 정상 해지 채널( 예, CRLs, OCSP 등 )로 인증서 철회 정보를 전송합니다.
  4. 철회 요청이 완료됩니다. ( 브라우저에서 인식되지 않습니다. )
안수찬 @dobestan

안수찬 @dobestan

https://ansuchan.com/

서울대학교에서 컴퓨터공학을 전공하고, 오랜 기간 서비스 기획 및 개발을 해 왔습니다. 이러한 전문성을 인정받아 미래부 소프트웨어 마에스트로에 선정된 바 있습니다. 현재는 모바일 방송국, 퍼스트캔버스에서 컨텐츠로 새로운 가치를 그리고 있습니다. 나는 안수찬이다. 그러므로 나는 할 수 있다. me@ansuchan.com

View Comments...