什麼是 Let’s Encrypt?
部署 HTTPS 網站的時候須要證書,證書由 CA 機構簽發,大部分傳統 CA 機構簽發證書是須要收費的,這不利於推進 HTTPS 協議的使用。api
Let’s Encrypt 也是一個 CA 機構,但這個 CA 機構是免費的!!!也就是說簽發證書不須要任何費用。瀏覽器
什麼是通配符證書
在沒有出現通配符證書以前,Let’s Encrypt 支持兩種證書。服務器
1)單域名證書:證書僅僅包含一個主機。工具
2)SAN 證書:一張證書能夠包括多個主機(Let’s Encrypt 限制是 20)post
證書包含的主機能夠不是同一個註冊域,不要問我註冊域是什麼?註冊域就是向域名註冊商購買的域名。網站
對於我的用戶來講,因爲主機並非太多,因此使用 SAN 證書徹底沒有問題,可是對於大公司來講有一些問題:this
- 子域名很是多,並且過一段時間可能就要使用一個新的主機。
- 註冊域也很是多。
讀者能夠思考下,對於大企業來講,SAN 證書可能並不能知足需求,相似於 sina 這樣的網站,全部的主機所有包含在一張證書中,而使用 Let’s Encrypt 證書是沒法知足的。阿里雲
Let’s Encrypt 通配符證書
通配符證書就是證書中能夠包含一個通配符,好比 .example.com、.example.cn,讀者很快明白,大型企業也可使用通配符證書了,一張證書能夠防止更多的主機了。url
這個功能能夠說很是重要,從功能上看 Let’s Encrypt 和傳統 CA 機構沒有什麼區別了,會不會觸動傳統 CA 機構的利益呢?
如何申請 Let’s Encrypt 通配符證書
爲了實現通配符證書,Let’s Encrypt 對 ACME 協議的實現進行了升級,只有 v2 協議才能支持通配符證書。
也就是說任何客戶端只要支持 ACME v2 版本,就能夠申請通配符證書了,是否是很激動。
官方介紹 Certbot 0.22.0 版本支持新的協議版本
在瞭解該協議以前有幾個注意點:
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 的方式
安裝Windows Ubuntu Bash
![](http://static.javashuo.com/static/loading.gif)
列出來的Linux子系統都是Windows10支持的Bash,
本人安裝的是Ubuntu
![](http://static.javashuo.com/static/loading.gif)
Giant@Giant:~$ sudo lsb_release -a [sudo] password for Giant: No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.3 LTS Release: 16.04 Codename: xenial
首先安裝Certbot
打開Certbot官網https://certbot.eff.org/
選擇咱們申請證書的使用方式後,就會出現相關安裝命令
![](http://static.javashuo.com/static/loading.gif)
而後就會看到安裝命令爲
$ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-get install certbot
完成這些命令後,咱們的申請證書工具certbot已經安裝完成。
咱們打算給51tcsd.com這個域名申請通配符證書
那麼咱們就運行此命令
$ sudo certbot certonly -d *.51tcsd.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
介紹下相關參數:
- certonly,表示安裝模式,Certbot 有安裝模式和驗證模式兩種類型的插件。
- --manual 表示手動安裝插件,Certbot 有不少插件,不一樣的插件均可以申請證書,用戶能夠根據須要自行選擇
- -d 爲那些主機申請證書,若是是通配符,輸入 *.newyingyong.cn(能夠替換爲你本身的域名)
- --preferred-challenges dns,使用 DNS 方式校驗域名全部權
- --server,Let's Encrypt ACME v2 版本使用的服務器不一樣於 v1 版本,須要顯示指定。
上述有兩個交互式的提示:
- 是否贊成 Let's Encrypt 協議要求
- 詢問是否對域名和機器(IP)進行綁定
確認贊成才能繼續。
繼續查看命令行的輸出,很是關鍵:
要求配置 DNS TXT 記錄,從而校驗域名全部權,也就是判斷證書申請者是否有域名的全部權。
上面輸出要求給 _acme-challenge.51tcsd.com 配置一條 TXT 記錄,在沒有確認 TXT 記錄生效以前不要回車執行。
我使用的是阿里雲的域名服務器,登陸控制檯操做以下圖:
![](http://static.javashuo.com/static/loading.gif)
dig -t txt _acme-challenge.51tcsd.com @8.8.8.8
輸出以下表示成功配置好DNS記錄了
而後在申請證書的終端裏按下回車執行,輸出以下
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/51tcsd.com-0001/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/51tcsd.com-0001/privkey.pem Your cert will expire on 2018-08-23. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew"
表示把相關證書保存在了/etc/letsencrypt/live/51tcsd.com-0001/這個目錄
咱們進去看一下此目錄文件生成了以下文件
cert.pem chain.pem fullchain.pem privkey.pem README
在Bash下,若是沒有用超級用戶可能進不到live/51tcsd.com-0001/,顯示沒有權限
咱們用超級用戶進入,命令若是下
$ sudo su
輸出結果以下
因此咱們要把輸的人pem文件合併爲pfx證書
這樣咱們就要用到openssl命令了
openssl pkcs12 -export -out 51tcsd.pfx -inkey privkey.pem -in fullchain.pem -certfile cert.pem
咱們用此命令把pem文件合併爲51tcsd.pfx文件,提示中要輸入證書的密碼,按提示輸入便可
顯示輸出以下
接下來咱們就要把51tcsd.pfx文件導入到Windows系統
咱們知道Ubuntu對於Windows來講只是一個應用,
因此Ubuntu裏全部的文件,咱們均可以經過Windows資源管理裏看到,
我發現個人Ubuntu目錄掛載在個人Windows目錄的此位置
C:\Users\Administrator\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
![](http://static.javashuo.com/static/loading.gif)
就能夠看到咱們的pfx文件了
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
接下來。咱們打開IIS管理器。看到服務器證書裏面,就能發現咱們申請的通配符證書了
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
首先把hosts文件把a.51tcsd.com解析到我本機127.0.0.1
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
是否是看到驚喜了
![](http://static.javashuo.com/static/loading.gif)