Let's Encrypt是一個新的開源證書頒發機構,承諾以標準化,API可訪問和非商業的方式提供免費的SSL證書。若是您之前安裝了SSL證書,那麼您可能熟悉使用某些付費提供商註冊證書的過程,而後完成交換證書請求和已完成請求的手動過程。前端

咱們的加密基於一組開放服務API,能夠在任何平臺上實現,併爲包括IIS在內的Web服務器建立證書。這彷佛是一個神話般的想法,由於若是您有任何通過身份驗證的訪問權限,那麼保護您的網站是絕對必要的。如今基本的SSL證書甚至來自付費服務提供商都是相對便宜的,所以這不是一個問題,由於這是一個問題(我使用DnSimple)不管是域管理仍是SSL證書,均可以徹底自動化SSL建立和管理過程,這是一個巨大的勝利。這實際上有好處和缺點,我將在文章的最後討論這個問題。要清楚 - 我不是網絡管理員,我沒有在大量網站上管理證書的豐富經驗因此在這篇文章中我將介紹我在本身託管的本身網站上處理的一些基本方案服務器。nginx

Windows和IIS - 不是一流的公民

我很感興趣地關注了Let的加密開發,但最初沒有太多嘗試,由於沒有直接可用於Windows的實現。上週,我遇到了Nik Molnar的帖子,該帖子指出了使用PowerShell,命令行甚至是基於Windows UI工具的Windows的一些可用工具。而後Nik繼續描述一個Azure插件實現,它能夠自動註冊和續訂Let的加密證書。git

可是我對IIS片斷而不是Azure更感興趣,由於我不使用Azure並在IIS上使用主機,所以在週末我使用這些工具進行旋轉,以瞭解讓Let的加密與個人IIS站點一塊兒工做的真正緣由。這篇文章是我發現的內容的摘要。github

 

什麼在Windows上可用

與開放式工具的狀況同樣,在開放式網絡和安全工具方面,Windows始終是過後的想法,而不是常態。所以,當Let's Encrypt最初進入測試階段時,沒有Windows支持。可是,如今它已經測試了一段時間,有一些工具可用於爲自動化證書管理環境(ACME)API提供包裝器。web

有不少選擇:shell

  • LetsEncrypt-Win-Simple
    目前,這彷佛是最快速,輕鬆地將新證書安裝到IIS中的最簡單的解決方案。此Windows命令行實用程序包含一個「交互式」模式,可以讓您在服務器上選擇主機帶領的Web站點,而後建立證書並在一個無縫操做中將其安裝到IIS中。這適用於手動安裝或簡單的腳本安裝。它是快速簡便的,也是迄今爲止我嘗試過的最簡單的解決方案。windows

  • ACMESharp Powershell命令
    ACMESharp是一個Powershell庫,能夠訪問ACME API的許多(但不是所有)命令。與使用ACMESharp庫的Win-Simple方法不一樣,須要一些腳本編寫,您必須使用某些邏輯編寫本身,可是您能夠對該過程以及建立和保存中間證書的能力進行大量控制。api

  • Certify
    這是ACME API的GUI實現,承諾提供交互式ACME證書管理。目前這個工具很是粗糙,但改進即將到來,每一個新版本彷佛都有顯着提高。這是一種可視化查看證書的好方法,對於那些不想使用大量命令行foo的人來講顯然更容易。瀏覽器

須要說明的是,全部這些工具都處於很是早期的發佈階段,因此它們有點粗糙,缺乏功能......這是能夠預料的。這個東西是新的。讓加密自己處於測試階段,這些工具構建在該基礎堆棧的頂部。可是,我仍然可使用全部這些工具來註冊證書,這樣您就能夠在本身的IIS網站上使用Let's Encrypt開始了。

目前全部工具中缺乏的是管理。您沒法撤消或刪除證書,也沒法清除遠程服務器上的證書。在測試時,我最終達到了在個人一個站點上註冊的證書限制,而後沒法進一步使用該站點,由於我沒法刪除/撤銷任何證書。Natch。

所以,我建議您計劃使用這些工具,建立一個新的主機加蓋的測試站點或具備有效的互聯網可訪問域名的站點,並在更新並將證書添加到您關注的任何實際站點以前使用該站點。一旦弄清楚工做原理如何,就能夠輕鬆地在現場網站上安裝證書。

簡單方法:LetsEncrypt-Win-Simple

到目前爲止,建立和安裝新證書的最簡單方法是LetsEncrypt-Win-Simple。此工具從命令行運行,並有一些很是容易理解的選項。基本上,您使用服務器上的主機標題從活動網站列表中選擇一個站點,該實用程序將爲您建立證書,建立一個https綁定並附加證書。若是已經有證書,則證書將替換爲新證書。

該工具基本上包含了建立註冊,域和證書的全部中間步驟。稍後再次運行時,它會使用現有存儲來檢索現有註冊和域信息以運行續訂。您不須要了解ACME API的工做原理或涉及的部分,這很好。實際上我但願我能像我同樣深刻研究下層工具以前先看看這個工具。

安裝很簡單:您能夠從他們的GitHub版本頁面安裝最新版本,只需將zip文件解壓縮到一個文件夾便可。該zip文件包含一個.NET可執行控制檯應用程序和所需的SSH本機依賴項以及一些配置文件。

要運行它,只需打開命令窗口,CD到安裝文件夾並運行:

LetsEncrypt 

這是交互的樣子(在個人家用機器上,我只添加了一個用於測試的主機端口網站):

LetsEncrypt贏即簡單

(請注意,您在此處使用的網站必須能夠訪問Internet,而且您必須從將接收證書的計算機上運行這些工具)

若是一切順利,您最終將在您指定的網站上的IIS中安裝新證書。

SiteBindings

若是安裝了現有證書,則將替換爲新證書。該實用程序足夠智能,能夠檢測現有的Let's Encrypt證書並刪除舊證書並將其替換爲新證書,只留下新證書。任何其餘證書只是留在原地,但不是未綁定的。

 SNI - 每一個IP地址多個SSL證書

請注意,默認狀況下,IIS僅容許將單個SSL證書綁定到IP地址。從Server 2012 IIS支持服務器名稱指示(SNI)開始,它容許您將多個SSL證書綁定到單個IP地址。爲了使其工做,您須要確保使用相同IP地址的每一個站點都檢查了SNI標誌,如上所示。SNI將證書綁定到主機頭而不是IP地址。請注意,對於Windows XP上的舊版本IE,SNI支持沒法正確導航SSL簽名存在問題。若是這是一個問題,您將須要堅持IP綁定SSL證書。

若是您在Web瀏覽器中打開該站點,則能夠經過單擊安全圖標並檢查證書信息來快速檢查證書是否正常工做。如您所見,證書是由Let's Encrypt建立的證書。

證書

有什麼好處是你能夠簡單地從新運行LetsEncrypt,它會出去建立一個新證書並刪除舊證書,因此在你須要更新/撤銷它時,能夠根據須要快速輕鬆地更新證書。

好極了!這個過程很是簡單明瞭。LetsEncrypt-Win-Simple還有一些命令行選項,容許您自動化域以建立證書和禁用提示,以便您也能夠自動執行此過程。顧名思義LetsEncrypt-Win-Simple很簡單,不須要了解Let's Encrypt如何在幕後工做的血腥細節,除非你有超出註冊的特定需求,這是去恕我直言的方法。

更新

LetsEncrypt-Win-Simple還包括一個能夠輕鬆續訂全部證書的界面。你能夠運行:

LetsEncrypt --renew 

而且它會檢查它管理的全部站點的到期日期,若是過時(或在過時當天),它會自動續訂並用新的證書替換舊證書。太好了!

該實用程序還會建立一個計劃任務,天天運行一次此命令並觸發更新請求。請注意,您可能必須按照此處所述調整任務用戶身份設置以確保用戶在運行計劃任務時正確登陸。請注意,該用戶是登陸用戶,由於此工具在%appdata%\ letsencrypt-win-simple中建立Let's Encrypt保險庫,這是一個特定於用戶的配置文件。若是保險庫位於像\ ProgramData這樣的全球位置,那麼它會更好,因此它能夠在包括系統賬戶在內的任何賬戶下運行。但這是一個小問題。

 

使用ACMESharp和PowerShell進行更多控制

若是您但願直接使用較低級別的ACME API,而且您但願對證書建立過程進行細粒度控制,那麼ACMESharp的Powershell命令行開關是一種很好的方法。它都基於.NET庫,它爲ACME API提供核心接口,所以您還能夠自動化本身的應用程序。

LetsEncrypt使用一些核心概念:

  • 註冊本質上是建立證書的實體(您或您的公司)
  • 標識符,即您要註冊的域名
  • 與該域名綁定的證書

該過程涉及建立一次註冊賬戶,而後建立可註冊的多個域。而後,每一個域能夠隨時間具備與其關聯的多個證書。

ACMESharp GitHub網站有一個關於如何開始的很是好的主題,我能夠經過設置註冊,設置域而後建立實際證書的過程。

預先警告 - 若是你正在進行更新,有不少步驟和步驟會改變 - 它並不像LetsEncrypt-win-simple那麼簡單,儘管你可使用ACMESharp構建相似的東西(由於它使用了LetsEncrypt-win-simple) ACMESharp API)。ACMESharp是一個較低級別的工具,它提供了能夠在其上構建的API表面。

但您能夠相對輕鬆地使用Powershell界面來建立新證書和續訂證書。經過這些步驟的過程會根據您是否在第一次安裝時進行更改,您必須先建立初始註冊和域,或者只須要在現有域註冊中添加新證書。

通過至關多的臨時域實驗後,我最終獲得了一個參數化的Powershell腳本,我如今用它來註冊和更新域。除了說明以外,您可能會發現這頗有用(對於一件事,若是您想手動執行這些步驟,則更容易剪切和粘貼)。

#install-Module -Name ACMESharp import-module ACMESharp $email = "mailto:rick@east-wind.com" $domain = "codepaste.net" $alias = "codepaste" $iissitename = "codepaste.net" $certname = "codepaste$(get-date -format yyyy-MM-dd--HH-mm)" $pfxfile = "c:\Admin\Certs\$certname.pfx" $initializevault = $FALSE $createregistration = $FALSE $createalias = $TRUE # Change to the Vault folder cd C:\ProgramData\ACMESharp\sysVault # First time on the machine - intiialize vault if($initializevault) { Initialize-ACMEVault } Get-ACMEVault if($createregistration) { # Set up new 'account' tied to an email address New-AcmeRegistration -Contacts "$email" -AcceptTos } if($createalias) { # Associate a new site New-AcmeIdentifier -Dns $domain -Alias $alias # Prove the site exists and is accessible Complete-ACMEChallenge $alias -ChallengeType http-01 -Handler iis -HandlerParameters @{WebSiteRef="$iissitename"} # Validate site Submit-ACMEChallenge $alias -ChallengeType http-01 # check until valid or invalid - pending Update-ACMEIdentifier $alias -ChallengeType http-01 Update-ACMEIdentifier $alias -ChallengeType http-01 } # Generate a certificate New-ACMECertificate ${alias} -Generate -Alias $certname #Submit the certificate Submit-ACMECertificate $certname # Hit until values are filled in update-AcmeCertificate $certname pause # Export Certifiacte to PFX file Get-ACMECertificate $certname -ExportPkcs12 $pfxfile 

請注意,經過設置3個布爾值,您能夠控制新證書和續訂證書的流程。腳本在上面設置的方式運行以進行證書續訂/更新。

此腳本生成一個PFX文件,而後能夠將其導入IIS。還有一些工具能夠將現有證書安裝和更新到IIS中,但它看起來目前API中的一些更改使得這對我不起做用。我甚至沒法得到加載工具。

您能夠手動安裝證書:

certutil -importPFX "c:\admin\certs\codepaste2016-02-28--20:22" –p password 

或者從IIS管理控制檯和「IIS證書」部分手動導入它。這適用於首次安裝,但若是您須要更新現有證書,則仍須要使用管理控制檯或命令行工具交換IIS中的證書。

 

Certify - 讓咱們在製做中加密GUI

(2016年3月10日更新)

Certify是一個基於可視GUI的工具,它也基於ACMESharp庫,併爲證書操做提供可視化管理界面。這個工具目前處於Alpha狀態,並且很是粗糙 - 事實上,幾周前我最初嘗試使用它時,實際上沒法得到建立證書。然而,最近有一個更新,即便UI仍然有點粗糙,如今已經有了基本功能。

Certify UI幾乎反映了Vault的術語,聯繫人(真正的電子郵件)以及域和證書,​​UI反映了這種層次結構。您能夠建立新域,而後將新證書附加到每一個域。您還可使用此UI更新,導出證書並將其直接應用於IIS Web站點綁定。

該工具容許您建立新的電子郵件聯繫人,而後容許您以交互方式添加域和證書。您能夠頒發新證書。證書須要一分鐘左右才能生成,目前您必須刷新Vault以查看更新的,通過驗證的證書。驗證後,您可使用「自動應用」選擇要將證書綁定到的網站和端口。您還能夠將證書導出到.pfx文件,而且能夠隨時要求使用Certify續訂證書。

這個工具顯然處於Alpha階段,雖然它尚未工做,但很高興看到這個用戶界面。擁有已安裝證書的可視視圖並一目瞭然地查看證書狀態可能頗有用。根據證書的到期狀態看到不一樣的顏色會很高興(紅色表示過時,橙色表示幾周,綠色表示有效)等。擁有一個可以一目瞭然地查看全部內容的UI很是好。

繼續關注這個工具。

咱們在哪?

免費和開源SSL證書的想法確定會在正確的時間到來,由於咱們正在考慮谷歌和其餘大型互聯網公司的大力推進,試圖在每一個互聯網鏈接上強制執行SSL。運行SSL能夠經過加密內容和標頭來幫助防止許多HTTP,XSS和man處於中間類型攻擊。儘管SSL證書已經變得更便宜,可是使用簡單且「官方」的方式來建立SSL證書會增長SSL使用率。我知道我有一些小型項目網站,我沒法證實每一年花費20美圓用於SSL,但若是它是免費的 - 嘿,爲何不是。

它不只僅是關於免費證書 - 證書生成能夠徹底自動化的事實也特別適用於那些擁有大量站點和證書的人。可以天天檢查一次證書到期,並在一天以內更新,以保持最新狀態,這樣能夠減小一件事情。

我在工具的當前狀態下看到Let's Encrypt的一個問題是證書有效期最長爲90天或3個月。這意味着您須要比典型的1年證書更頻繁地管理續訂。若是證書過時,咱們假設加密應該有郵件通知,但因爲將來的過時太遠,我尚未嘗試過。更新過程的自動化將成爲關鍵 - 沒有人但願手動更新證書,甚至每3個月通知一次。我今天在個人Web服務器上有5個證書,甚至一年到期都是一個很大的麻煩,由於這些證書在一年中的不一樣時間到期。對我而言,自動化方面比成本更具相關性。

咱們的加密自己仍處於開發階段,Windows工具甚至還不成熟。基本API存在,今天可用於建立證書,如我在此處所示,但仍有許多工做要作。當前建立的證書是您能夠得到的最基本的證書。不支持通配符證書或更高端驗證的證書。目前尚不清楚這是否會獲得支持,由於更多地涉及爲這些類型的證書設置註冊。因此今天Let's Encrypt並非解決全部SSL需求的解決方案,但它確實很好地服務於低端領域。你絕對能夠若是你願意忍受一點點成長的痛苦,今天就用它來得到免費的SSL證書。特別是使用LetsEncrypt-win-simple,它很容易上手,甚至能夠保持最新狀態。

在將來,我但願咱們可以看到直接內置到Web服務器中的Let's Encrypt等服務的集成。過後看來,擁有一個通用的證書註冊協議是如此明顯。特別是對於IIS和Windows通常來講,一直是如此痛苦的證書管理屁股。我懷疑咱們會盡快看到這種整合。

您如何看待本身使用此服務?您是否僅僅由於服務是免費的,仍是由於自動化機會而使用它?在評論中發出聲響。

資源