2017年2月7日 星期二

Let's Encrypt 工作原理

把官方文件 (https://letsencrypt.org/how-it-works/) 看了一下,發現沒有正確的中文原理說明,所以來把我了解的發佈一下。

先來簡單介紹 Let's Encrypt (LE) 實際使用情況,你會在你機器上面裝一個小程式 (agent) 幫你去 LE 做申請 / 更新憑證的動作。所以這篇文章主要是講解這個小程式做了什麼事情,不然的話其實下指令就可以搞定所有事情,你不會知道中間發生什麼事。

Step 1. 產生 authorized key


這個只有 agent 第一次使用的時候會需要進行。authorized key 可以當作代表 agent 去操作 LE 的 API Key。所以我們可以說這是 API Key 產生流程。



  1. Agent 產生一組新的 key pair
  2. 通知 LE 要註冊 example.com 這個 domain
  3. LE 傳回來說可以用 DNS 驗證或是檔案驗證,2 選 1。然後以下是驗證資料
    1. 在 8303 的位址放 ed98
    2. 請將這個亂數 9cf0b331 加密
  4. 這個範例,agent 選擇使用檔案驗證。
    1. 他在 https://example.com/8303 內容放 ed98
    2. 將 9cf0b331 用私鑰加密,然後將加密結果以及公鑰一起傳給 LE
  5. LE 驗證網址和亂數都正確,這把公鑰就變成 authorized key 可以拿來操作 example.com 的憑證


Step 2. 申請 / 更新 / 註銷憑證



  1. 當 agent 拿到 authorized key 以後,就可以發送 PKCS#10 Certificate Signing Request (CSR) 給 LE 取得憑證。
  2. 產生一組新的 key pair
  3. CSR 裡面包含了
    1. 私鑰的 signature
    2. 公鑰
  4. 把整個 CSR 用 authorized key 加密傳給 LE
  5. LE 驗證 authorized key 以及欲申請的 domain。如果驗證通過,解開取得 CSR 之後核發憑證傳回 agent
這樣就完成取得憑證的程序。

更新以及註銷憑證的流程都類似,就不再多做說明了。