Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

3 月 14 日,Let's Encrypt 的執行董事 Josh Aas 對外宣佈,他們的通配符證書正式上線,用戶可以基於此特性輕鬆部署 / 開啟所有子域名的 HTTPS 功能。

Let's Encrypt 是國外一個公共的免費 SSL 項目,由 Linux 基金會託管,它的來頭不小,由 Mozilla、思科、Akamai、IdenTrust 和 EFF 等組織發起,目的就是向網站自動簽發和管理免費證書,以便加速互聯網由 HTTP 過渡到 HTTPS,目前 Facebook 等大公司開始加入贊助行列。

Let's Encrypt 已經得了 IdenTrust 的交叉簽名,這意味著其證書現在已經可以被 Mozilla、Google、Microsoft 和 Apple 等主流的瀏覽器所信任,用戶只需要在 Web 服務器證書鏈中配置交叉簽名,瀏覽器客戶端會自動處理好其它的一切,Let’s Encrypt 安裝簡單,使用非常方便。

本文將會詳細介紹如何使用 Let's Encrypt 通配符證書(歡迎關注作者公眾號,id:yudadanwx)。

什麼是 Let's Encrypt?

部署 HTTPS 網站的時候需要證書,證書由 CA 機構簽發,大部分傳統 CA 機構簽發證書是需要收費的,這不利於推動 HTTPS 協議的使用。

Let's Encrypt 也是一個 CA 機構,但這個 CA 機構是免費的!也就是說簽發證書不需要任何費用。

Let's Encrypt 由於是非盈利性的組織,需要控制開支,他們搞了一個非常有創意的事情,設計了一個 ACME 協議,目前該協議的版本是 v1。那為什麼要創建 ACME 協議呢,傳統的 CA 機構是人工受理證書申請、證書更新、證書撤銷,完全是手動處理的。而 ACME 協議規範化了證書申請、更新、撤銷等流程,只要一個客戶端實現了該協議的功能,通過客戶端就可以向 Let’s Encrypt 申請證書,也就是說 Let's Encrypt CA 完全是自動化操作的。

任何人都可以基於 ACME 協議實現一個客戶端,官方推薦的客戶端是 Certbot (文末有鏈接)。

什麼是通配符證書

在沒有出現通配符證書之前,Let's Encrypt 支持兩種證書。

  • 單域名證書:證書僅僅包含一個主機。

  • SAN 證書:一張證書可以包括多個主機(Let's Encrypt 限制是 20),也就是證書可以包含下列的主機:www.example.com、www.example.cn、blog.example.com 等等。

證書包含的主機可以不是同一個註冊域,不要問我註冊域是什麼?註冊域就是向域名註冊商購買的域名。

對於個人用戶來說,由於主機並不是太多,所以使用 SAN 證書完全沒有問題,但是對於大公司來說有一些問題:

  • 子域名非常多,而且過一段時間可能就要使用一個新的主機。

  • 註冊域也非常多。

讀者可以思考下,對於大企業來說,SAN 證書可能並不能滿足需求,類似於 sina 這樣的網站,所有的主機全部包含在一張證書中,而使用 Let’s Encrypt 證書是無法滿足的。

Let's Encrypt 通配符證書

通配符證書就是證書中可以包含一個通配符,比如 .example.com、.example.cn,讀者很快明白,大型企業也可以使用通配符證書了,一張證書可以防止更多的主機了。

這個功能可以說非常重要,從功能上看 Let's Encrypt 和傳統 CA 機構沒有什麼區別了,會不會觸動傳統 CA 機構的利益呢?

如何申請 Let's Encrypt 通配符證書

為了實現通配符證書,Let's Encrypt 對 ACME 協議的實現進行了升級,只有 v2 協議才能支持通配符證書。

也就是說任何客戶端只要支持 ACME v2 版本,就可以申請通配符證書了,是不是很激動。

讀者可以查看下自己慣用的客戶端是不是支持 ACME v2 版本,官方介紹 Certbot 0.22.0 版本支持新的協議版本,我立刻進行了升級:

Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

在瞭解該協議之前有幾個注意點:

1)客戶在申請 Let’s Encrypt 證書的時候,需要校驗域名的所有權,證明操作者有權利為該域名申請證書,目前支持三種驗證方式:

  • dns-01:給域名添加一個 DNS TXT 記錄。

  • http-01:在域名對應的 Web 服務器下放置一個 HTTP well-known URL 資源文件。

  • tls-sni-01:在域名對應的 Web 服務器下放置一個 HTTPS well-known URL 資源文件。

而申請通配符證書,只能使用 dns-01 的方式。

2)ACME v2 和 v1 協議是互相不兼容的,為了使用 v2 版本,客戶端需要創建另外一個賬戶(代表客戶端操作者),以 Certbot 客戶端為例,大家可以查看:

Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

3)Enumerable Orders 和限制

為了實現通配符證書,Let's Encrypt 在申請者身份校驗上做了很大的改變。

  • 有了訂單 ID 的概念,主要是為了追蹤通配符域名。

  • 申請限制,在 V1 版本,Let's Encrypt 為了避免濫操作,對申請證書有一些限制(很難學習,但是正常使用不會遇到該限制)。而 v2 版本,對於通配符證書,多了一個限制,New Orders per Account(每個證書訂單數限制)。

這兩個細節,後續再仔細研究。

實踐測試

我迫不及待想使用 Certbot 申請通配符證書,升級 Certbot 版本運行下列命令:

Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

參數說明:

  • certonly,插件,Certbot 有很多插件,不同的插件都可以申請證書,用戶可以根據需要自行選擇

  • -d 為那些主機申請證書,如果是通配符,輸入 *.newyingyong.cn

  • --preferred-challenges dns,使用 DNS 方式校驗域名所有權

接下去就是命令行的輸出:

Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

上述有兩個交互式的提示:

  • 是否同意 Let's Encrypt 協議要求

  • 詢問是否對域名和機器(IP)進行綁定

確認同意才能繼續。

繼續查看命令行的輸出,非常關鍵:

Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

要求配置 DNS TXT 記錄,從而校驗域名所有權,也就是判斷證書申請者是否有域名的所有權。

上面輸出要求給 _acme-challenge.newyingyong.cn 配置一條 TXT 記錄,在沒有確認 TXT 記錄生效之前不要回車執行。

我使用的是阿里雲的域名服務器,登錄控制檯操作如下圖:

Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

然後輸入下列命令確認 TXT 記錄是否生效:

Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

確認生效後,回車執行,輸出如下:

Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

恭喜您,證書申請成功,證書和密鑰保存在下列目錄:

Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

然後校驗證書信息,輸入如下命令:

openssl x509 -in /etc/letsencrypt/archive/newyingyong.cn/cert1.pem -noout -text

關鍵輸出如下:

Let's Encrypt 宣佈支持通配符證書,所有子域名可輕鬆開啟 HTTPS

完美,證書包含了 SAN 擴展,該擴展的值就是 *.newyingyong.cn。

原文鏈接:https://www.jianshu.com/p/c5c9d071e395


分享到:


相關文章: