隨著網(wǎng)絡(luò)安全形勢的發(fā)展,SSL已是各大網(wǎng)站的標配,啟用SSL的好處自然不必多說,然后每份SSL證書也要花費不菲的銀子,按最便宜的DV證書來看,每年也要個四五百呢。

有趨勢有需求,自然也有免費可用。免費的SSL證書中,首推就是Let's Encrypt。

Let's Encrypt,官網(wǎng)是https://letsencrypt.org/,它是一個由各大公司贊助的公益組織,我們看看它的介紹。

“Let’s Encrypt is a free, automated, and open certificate authority brought to you by the non-profit Internet Security Research Group (ISRG).”

既然是個公益組織,所以不可能請很多工作人員,所以,Let's Encrypt研發(fā)了一套協(xié)議,命名為ACME protocol(Automatic Certificate Management Environment),借助這套協(xié)議,更多熱心人員開發(fā)了相應(yīng)的工具,使用這些工具就可以不借助其他人的幫助下,完成SSL證書的申請。

目前已有各種工具可以用于申請證書,你可以在如下這個地址里查找:
https://letsencrypt.org/docs/client-options/

我最熟悉的自然是Windows平臺,此平臺下,首推ACMESharp工具,因此將用此工具來進行SSL證書的申請。

我們需要準備的有

1、一臺可以訪問Internet的Windows 7電腦,并具備管理員權(quán)限
2、Powershell 5.0
3、SSL證書對應(yīng)的網(wǎng)站域名
4、一個郵箱地址
5、可以設(shè)置網(wǎng)站域名的DNS,或者可以設(shè)置網(wǎng)站下的文件夾和文件內(nèi)容

如何查看和升級Powershell,請參見查看Powershell的版本升級Powershell到5.0(最新版本)。

ACMESharp是一個開源軟件,它的源代碼位于“https://github.com/ebekker/ACMESharp”,如果你感興趣,可以到此網(wǎng)址下載源代碼自行研究。

它也自帶了一個英文版的快速安裝指引,訪問地址為:https://github.com/ebekker/ACMESharp/wiki/Quick-Start。

申請步驟詳情如下:

如下的命令,必須以管理員身份運行Powershell,方能執(zhí)行成功。

1、下載ACMESharp的Powershell模塊

 1 Save-Module -Name ACMESharp -Path <path>

這里的<path>,請自行替換為你本地的路徑。

最新版本是0.8.1,你也可以點此位置下載。

2、復(fù)制ACMESharp進入到Powershell目錄下的Module文件夾中,通常這個文件夾位于:C:\Program Files\WindowsPowerShell\Modules目錄下

3、安裝ACMESharp的Powershell模塊

 1 Install-Module -Name ACMESharp

4、導(dǎo)入ACMESharp的Powershell模塊

 1 Import-Module ACMESharp

5、初始化Vault(Vault將用于存儲證書和相關(guān)信息)

如果是第一次運行,則不會有任何輸出,但如果是第二次運行,則會有錯誤提示,提示說Vault已存在。

 1 Initialize-ACMEVault

6、向Let‘s Encrypt注冊用戶信息,并接受其服務(wù)協(xié)議

 1 New-ACMERegistration -Contacts mailto:<Email Address> -AcceptTos

這里的<Email Address>,請?zhí)鎿Q為你的郵箱地址。

-AcceptTos,就是表示接受服務(wù)協(xié)議。

7、添加需要申請SSL證書的域名

 1 New-ACMEIdentifier -Dns <Domain Name> -Alias <Mark>

這里的<Domain Name>,請?zhí)鎿Q為你需要申請SSL證書的那個域名。

這里的<Mark>,請?zhí)鎿Q為任意的一個別名,這個別名將用于后續(xù)申請中,用于代指你的域名。

8、驗證這個域名的歸屬權(quán)是否屬于申請人,Let‘s Encrypt提供了三種自助方式,可以自行選擇一種。

8.1、通過IIS來驗證(這個我尚未測試成功過,所以后續(xù)操作,只是僅對英文版指引所做的翻譯)

如果你的網(wǎng)站所在的服務(wù)器是IIS 7.0及以上版本,而且你可以在服務(wù)器上運行腳本(我猜測還需要服務(wù)器可以主動向Let's Encrypt網(wǎng)站發(fā)送一些內(nèi)容),可以嘗試用如下腳本來驗證。

 1 Complete-ACMEChallenge dns1 -ChallengeType http-01 -Handler iis -HandlerParameters @{ WebSiteRef = 'Default Web Site' }

其中'Default Web Site'應(yīng)該是IIS中這個Website的名稱。

8.2、通過在網(wǎng)站指定目錄下存放指定文件來驗證,文件中存放指定內(nèi)容(本人親自驗證)

首先請運行如下命令:

 1 Complete-ACMEChallenge <Mark> -ChallengeType http-01 -Handler manual

這里的<Mark>,請?zhí)鎿Q為之前的別名。一旦執(zhí)行完畢了,你將會看到如下內(nèi)容。

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 1 == Manual Challenge Handler - HTTP == 2   * Handle Time:      [1/12/2016 1:16:34 PM] 3   * Challenge Token:  [2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0] 4 To complete this Challenge please create a new file 5 under the server that is responding to the hostname 6 and path given with the following characteristics: 7   * HTTP URL:     [http://<Domain Name>/.well-known/acme-challenge/2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0] 8   * File Path:    [.well-known/acme-challenge/2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0] 9   * File Content: [2yRd04TwqiZTh6TWLZ1azL15QIOGaiRmx8MjAoA5QH0.H3URk7qFUvhyYzqJySfc9eM25RTDN7bN4pwil37Rgms]10   * MIME Type:    [text/plain]11 ------------------------------------

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

其中<Domain Name>就是我們申請SSL證書時的域名。

這段內(nèi)容,我們需要關(guān)注的是HTTP URL、File Path、File Content這三塊。

首先,請打開一個記事本,將File Content對應(yīng)的內(nèi)容貼入其中(其中[]是不需要貼入的),然后保存成一個文件,文件的名稱是File Path中".well-known/acme-challenge/"后面那一部分。請注意,這個文件名稱是不能有后綴名的,所以保存類型必須選擇“所有文件”,類似如下圖。

接下來,我們需要在網(wǎng)站根目錄下創(chuàng)建一個文件夾“.well-known”,這個文件夾在Windows下必須通過命令行創(chuàng)建。

在.well-known文件夾下,繼續(xù)創(chuàng)建文件夾“acme-challenge”,創(chuàng)建完畢后,將之前保存的文件放在此目錄下。

完成上述操作后,我們需要先驗證一下,可打開瀏覽器,地址中貼入HTTP URL,如果我們能看到File Content對應(yīng)的那一串字符串,那么下一步我們可以提交給Let's Encrypt來驗證。

8.3、通過設(shè)置一個獨立的二級域名來驗證

首先請運行如下命令:

 1 Complete-ACMEChallenge <Mark> -ChallengeType dns-01 -Handler manual

這里的<Mark>,請?zhí)鎿Q為之前的別名。一旦執(zhí)行完畢了,你將會看到如下內(nèi)容。

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

1 == Manual Challenge Handler - DNS ==2   * Handle Time:      [1/12/2016 1:41:51 PM]3   * Challenge Token:  [xfc0oQahXVqdaBlcZbk5nL8H-GSDFCoQ8LGzOL07qVI]4 To complete this Challenge please create a new Resource5 Record (RR) with the following characteristics:6   * RR Type:  [TXT]7   * RR Name:  [_acme-challenge.<Domain Name>]8   * RR Value: [vNx_fpLgvq0l4rqSATuxhxl9pa155SoeKvNZ98AFB_4]9 ------------------------------------

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

需要設(shè)置一個二級域名,域名名稱為RR Name對應(yīng)的內(nèi)容,域名類型為TXT,域名類型為RR Value的內(nèi)容,類似如下圖。

下一步我們可以提交給Let's Encrypt來驗證。

9、向Let's Encrypt提交申請,驗證域名所屬權(quán)。(8.1方式是不需要此步的)

如果選擇了8.2方式來申請驗證,則執(zhí)行如下命令來提交申請。

 1 Submit-ACMEChallenge <Mark> -ChallengeType http-01

如果選擇了8.3方式來申請驗證,則執(zhí)行如下命令來提交申請。

 1 Submit-ACMEChallenge <Mark> -ChallengeType dns-01

這里的<Mark>,請?zhí)鎿Q為之前的別名。

執(zhí)行了上述命令后,Let's Encrypt將會受到驗證請求。但此請求不會立刻有反饋的,需要等待幾分鐘。

10、查看Let's Encrypt的驗證結(jié)果

如果選擇了8.2方式來申請驗證,則執(zhí)行如下命令來查看驗證結(jié)果。

 1 (Update-ACMEIdentifier <Mark> -ChallengeType http-01).Challenges | Where-Object {$_.Type -eq "http-01"}

如果選擇了8.3方式來申請驗證,則執(zhí)行如下命令來查看驗證結(jié)果。

 1 (Update-ACMEIdentifier <Mark> -ChallengeType dns-01).Challenges | Where-Object {$_.Type -eq "dns-01"}

這里的<Mark>,請?zhí)鎿Q為之前的別名。

執(zhí)行命令之后,將會看到一些內(nèi)容,其中會有一項“Status”。
如果看到的是Pending,則表示尚未驗證,則繼續(xù)等待中。
如果看到的是Invalid,則表示驗證失敗,需要仔細查看過往操作,從第6步開始,重新執(zhí)行。
如果看到的是Valid,則表示驗證成功。

一旦驗證成功,執(zhí)行如下命令,查看域名對應(yīng)的SSL證書是否已準備好。

 1 Update-ACMEIdentifier <Mark>

執(zhí)行命令之后,將會看到一些內(nèi)容,其中會有一項“Status”,如果看到了Valid,則表示準備好了,即可開始導(dǎo)出證書了。

11、提交PKI證書請求

執(zhí)行如下命令,則會創(chuàng)建一個PKI證書請求。

1 New-ACMECertificate <Mark> -Generate -Alias <CertName>2 Submit-ACMECertificate <CertName>

這里的<Mark>,請?zhí)鎿Q為之前的別名。這里的<CertName>,請自行設(shè)置一個個性化的證書名稱。

執(zhí)行完畢后,將會看到如下內(nèi)容:

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 1 Id                  : 8e38e529-55e2-4096-afb8-4f9947d6da6d 2 Alias               : <CertName> 3 Label               : 4 Memo                : 5 IdentifierRef       : 198488a7-c778-488c-978b-606a0181deb9 6 KeyPemFile          : 7 CsrPemFile          : 8 GenerateDetailsFile : 8e38e529-55e2-4096-afb8-4f9947d6da6d-gen.json 9 CertificateRequest  :10 CrtPemFile          :11 CrtDerFile          :12 IssuerSerialNumber  :13 SerialNumber        :14 Thumbprint          :15 Signature           :16 SignatureAlgorithm  :

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

接下來,執(zhí)行如下命令,更新證書。

1 Update-ACMECertificate <CertName>

執(zhí)行完畢后,將看到如下內(nèi)容。

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

 1 Id                  : 9182eb22-cd57-468e-946e-e0b0d8843906 2 Alias               : <CertName> 3 Label               : 4 Memo                : 5 IdentifierRef       : 198488a7-c778-488c-978b-606a0181deb9 6 KeyPemFile          : 9182eb22-cd57-468e-946e-e0b0d8843906-key.pem 7 CsrPemFile          : 9182eb22-cd57-468e-946e-e0b0d8843906-csr.pem 8 GenerateDetailsFile : 9182eb22-cd57-468e-946e-e0b0d8843906-gen.json 9 CertificateRequest  : ACMESharp.CertificateRequest10 CrtPemFile          : 9182eb22-cd57-468e-946e-e0b0d8843906-crt.pem11 CrtDerFile          : 9182eb22-cd57-468e-946e-e0b0d8843906-crt.der12 IssuerSerialNumber  :13 SerialNumber        : 00FAFC7F409C770B76EB9BA7445EC27B24494A14 Thumbprint          : 9A59B855EA79B3E9DE1C14307E6A21851B3C0CE815 Signature           : 9A59B855EA79B3E9DE1C14307E6A21851B3C0CE816 SignatureAlgorithm  : sha256RSA

電腦培訓(xùn),計算機培訓(xùn),平面設(shè)計培訓(xùn),網(wǎng)頁設(shè)計培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

可以看到證書的簽名算法是sha256RSA。至此,可以導(dǎo)出證書了。

12、導(dǎo)出SSL證書

12.1 導(dǎo)出私人秘鑰(PEM)

執(zhí)行如下命令,其中<CertName>是之前自定義證書名稱,<存放路徑>請自行替換為存放證書的路徑。

 1 Get-ACMECertificate <CertName> -ExportKeyPEM "<存放路徑>\<CertName>.key.pem"

12.2 導(dǎo)出證書簽名請求(CSR)

執(zhí)行如下命令,其中<CertName>是之前自定義證書名稱,<存放路徑>請自行替換為存放證書的路徑。

 1 Get-ACMECertificate <CertName> -ExportCsrPEM "<存放路徑>\<CertName>.csr.pem"

12.3 導(dǎo)出由LE(Let's Encrypt)發(fā)布的證書

執(zhí)行如下命令,其中<CertName>是之前自定義證書名稱,<存放路徑>請自行替換為存放證書的路徑。

 1 Get-ACMECertificate <CertName> -ExportCertificatePEM "<存放路徑>\<CertName>.crt.pem" -ExportCertificateDER "<存放路徑>\<CertName>.crt"

這里會導(dǎo)出兩種格式的證書文件,一種是PEM格式,另一種是DER格式。

12.4 導(dǎo)出LE(Let's Encrypt)這個發(fā)布者自己的證書

執(zhí)行如下命令,其中<CertName>是之前自定義證書名稱,<存放路徑>請自行替換為存放證書的路徑。

 1 Get-ACMECertificate <CertName> -ExportIssuerPEM "<存放路徑>\<CertName>-issuer.crt.pem" -ExportIssuerDER "<存放路徑>\<CertName>-issuer.crt"

這里會導(dǎo)出兩種格式的證書文件,一種是PEM格式,另一種是DER格式,自行對應(yīng)12.3步導(dǎo)出的證書格式。

12.5 導(dǎo)出PKCS#12 (PFX)證書

對于Windows下的IIS站點,我們需要導(dǎo)出PFX格式證書。執(zhí)行如下命令,其中<CertName>是之前自定義證書名稱,<存放路徑>請自行替換為存放證書的路徑。

 1 Get-ACMECertificate <CertName> -ExportPkcs12 "<存放路徑>\<CertName>.pfx" -CertificatePassword '<證書自定義密碼>'

至此,我們已成功申請下來SSL證書了。

下一步,將是安裝證書了。

《本篇結(jié)束》

本博文屬作者原創(chuàng),首發(fā)于www.boxfun.net,除非特別聲明,本作品采用知識共享署名-非商業(yè)性使用-相同方式共享 4.0 國際許可協(xié)議進行許可。