2017年12月5日 星期二

[SSL] SSL 數位憑證

免費 SSL 數位憑證 Let’s Encrypt,以往在網站加入 SSL 加密協定(HTTPS),必須支付一筆費用來申請憑證(年費喔!很驚人的費用!)。Let’s Encrypt 是一個由電子前線基金會(EFF)、Mozilla、Cisco、Akamai、IdenTrust 與密西根大學研究人員共同創立,以推動全球所有的網站都使用 HTTPS 加密傳輸的組織。
使用他的好處是,簡化申請流程,申請時只需要安裝簽署程式,輸入自己的網址,自動連線Let’s Encrypt主機,SSL憑證完成。
1. 不需要任何電子郵件認證,也不需要在網站上做任何CA設定,因為CA證書是免費的,所以不會有憑證失效造成網暫停止。
2. 自動證明你的網站讓我們 Let’s Encrypt CA 加密。
3. 獲取瀏覽器信任的證書並設置在 Web 服務器上。
4. 自動追蹤網站CA證書,若即將到期自動續訂。
5. 當任何時候有必要時會協助你撤銷證書。
當然有好處也有缺點,Let’s Encrypt 簽發的憑證有效期限只有 3 個月(90 天),也就是說站台每接近 3 個月時都需要重新更新一次憑證!其他詳細的資訊請參閱官網:https://letsencrypt.org/
你看看,好用又免費!雖然只有三個月有效期,但小小的麻煩能夠解決安全的問題還是蠻划算的啦,免費申請憑證,整個過程非常簡單、自動化,小編今天將申請Let’s Encrypt 憑證並掛上 IIS 平台的站台流程分享給你們。
0-1回歸正題,Let’s Encrypt SSL 憑證取得方式很麻煩,沒有像一般憑證申請方式一樣放直接從站台輸入私密金鑰及 CSR 檔案來取得憑證的介面,必須要透過 Linux 系統下達 Linux 密密麻麻指令,才能夠在遠端主機取得憑證,若是要放到Windows IIS 平台上,又要花點時間從 Linux 主機取得後再放到 Windows IIS 站台裡,雖然整個操作步驟不難,但若你並不熟悉 Linux 指令的話,就可能會 … 瘋掉 + 尖叫 = 放棄(網路上很多都是教這個方式)。
不過不要就此放棄,小編有找到針對產生 Let’s Encrypt SSL 憑證的線上工具網站 SSL For Free,這網站功能功能是連接 Let’s Encrypt 取得憑證簽發,無須自己到主機輸入安裝指令,即可透過該站台介面來取得憑證的相關檔案(包括私密金鑰、CA bundle 和憑證 crt 檔),再將憑證安裝到站台就能使用喔。
另外還有個貼心功能就是針對 Let’s Encrypt 憑證期限為三個月,SSL For Free 也已提供訂閱通知的機制,你可入自己的 Email,在憑證過期前就會收到電子郵件通知,哈哈!是不是有種被解救的感覺,廢話不多說快來試試看吧。
網站名稱:SSL For Free
網站鏈結:https://www.sslforfree.com/
1. 開啟 SSL For Free 網站後,直接在上方填入你要申請 Let’s Encrypt 憑證的網域名稱,可以用空白來分隔不同的網址,例如小編使用「engineer.domain.tw domain.tw other.com」,填入後點選右邊的「Create Free SSL Certificate」繼續。
注意:若你有多個子網域也都是要一併申請進去,他會只產生一組憑證檔提供給你放入各個子網域站台,千萬不要笨笨的分開申請,為何要這麼說呢?作到後面你就會知道囉。
0
2. 為了確定這個網域名稱使你所有,必須要作站台驗證的動作,他提供了兩種驗證方式,若你的網站有開起 FTP 功能的話,可使用「Automatic FTP Verification」來輸入 FTP 相關資訊自動完成驗證,若你擔心資訊安全的話,可以用手動驗證的方式「Manual Verification」,必須自己下載驗證檔案,按照網站上的說明上傳到主機,另外還有提到站台若有設定防火牆,請必須將 IP:66.133.109.36 加入允許連線的白名單,避免驗證失敗,都沒有問題的話就點選下方的「Manually Verify Domain」繼續。
1
3. 點選網站上提供的檔案下載鏈結,依照說明順序建立兩層資料夾,將檔案放進去即可。記得要按下圖第 5 步驟的鏈結來看看能否正常讀取檔案,如果不行,代表你的路徑可能錯誤,總之呢要讓鏈結都能正常開啟,使SSL For Free能夠正常驗證你的站台。
2
這裡我相信很多人都是在這邊失敗、失敗、再失敗!無論如何就是沒有辦法讓驗證鏈結正常開啟!小編在這邊也是卡了很久 … 明明按照說明在站台建立好指定的路徑,也都正確放入驗證檔!
4
偏偏開起驗證鏈結就是無法顯示或者給我出現 404 錯誤 …
9
在不斷的 google 找尋檔案後才發現原來因為他的鏈結路徑「.well-known\acme-challenge」前面那個「.」關係,站台認不出來!就會一直無法正常顯示,在 IIS 平台上要記得先行設定 MIME類型,讓 IIS 認得「.well-known\acme-challenge」鏈結路徑!設定方式有兩種,一種是直接在站台的 Web.config 寫入如下指令:
<?xml version=”1.0″ encoding=”UTF-8″?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=”.” mimeType=”text/plain” />
</staticContent>
</system.webServer>
</configuration>
a
或者直接在 IIS 平台的站台上點選進入「MIME 類型」。
b
加入「副檔名: . MIME 類型:text/plain」即可。
c
確認設定好 MIME 類型,驗證鏈結就可以正常開啟囉(就是一連串的雜數亂碼)。
d
4. 確定驗證連結沒有問題後,再點選最下方的「Download SSL Certificate」,通過驗證後,SSL For Free 就會開始產生 SSL 憑證。
e
5. 產生憑證後,就能看到密密麻麻的憑證檔案資訊。不過在下在憑證之前,請先注意有著「Get Notified of Expiration」,請先行設定一組 Email 和密碼,這個功能即你申請的憑證在過期前會自動 Email 通知你,提醒你要記得更新憑證以免錯過有效期間
g
g-1
g-2
6. 設定好通知後,點選最下方點選「Download All SSL Certificate Files」打包所有憑證檔並下載下來,
f
7. 解壓縮後可以取得一個私密金鑰(Privacy Key)、CA_bundle.crt 和 certificate.crt 三個檔案。
h
8. 產生的憑證是 .crt 非 .pfx,IIS 憑台只能使用 .pfx 憑證檔,所以這時候就需要透過工具做轉換,我們到 OpenSSL for Windows 去下載 OpenSSL 回來,並把他安裝完成。
i
i-1
9. 安裝完成後,開啟命令提示字元,透過下面的指令來執行格式轉換,過程中,OpenSSL 會要我們輸入一個保護 SSL 憑證的密碼(密碼在後面 IIS 匯入時會用到):
注意:指令中 D:\Downloads\sslforfree\ 是小編電腦的路徑,請更改你放憑證檔的路徑。
C:\OpenSSL-Win32\bin\openssl pkcs12 -export -out D:\Downloads\sslforfree\certificate.pfx -inkey D:\Downloads\sslforfree\private.key -in D:\Downloads\sslforfree\certificate.crt -certfile D:\Downloads\sslforfree\ca_bundle.crti-2
10. 執行完畢後,PKCS#12 憑證檔 certificate.pfx 就會產生在我們指定的目錄下面(檔案類型為個人資訊交換)。
i-3
11. 我們只要把PKCS#12 憑證檔上傳到 IIS 的站台,請至 IIS 點選「伺服器憑證」。
j
12. 點選右邊動作「匯入 …」。
k
13. 在匯入憑證視窗,點選「」,選擇你產生出來的 certificate.pfx 憑證檔。l
14. 並輸入之前使用  OpenSSL 轉檔時的密碼。
m
15. 憑證放好囉。
n
16. 站台新增繫結,請先點選你的站台,在右邊動作點選「繫結」,於站台繫結點選「新增」。
o
17. 類型選擇「https」,SSL 憑證就直接點選你剛剛放入的憑證。
這裡請注意,你會發現主機名稱無法設定,因為整個 IIS 只能跑一組 SSL 憑證,不管是有多少個站台就只能跑一組!主機名稱可以用其他方式設定,這個小編會在另一篇說明,但憑證就只能跑一組,所以有此需求的朋友記得我在前面第一個步驟就有提到「若你有多個子網域也都是要一併申請進去」,這樣你在多個網預設定時才不會有問題。
p
18. 放好後就可以看到,多了一個 https 站台繫結。
p-1
在這個步驟你會發現為何 https 無法輸入主機名稱(網域),且若多個站台都啟用 https 時,甚至會有出現站台被停用的狀況
1
原因是因為連接埠指定了 443,當你設定另一個網站的 https 連線時,也是 443 埠,因此兩個在搶同一個埠。解決方法很簡單,修改 IIS 設定檔即可,方法如下:
用記事本打開 C:\Windows\system32\inetsrv\config\applicationHost.config
從內容中,找到你要設定https 的站台設定內容:(大概像如下的設定)
<site name=”engineer″ id=”4″>
<application path=”/” applicationPool=”engineer″>
<virtualDirectory path=”/” physicalPath=”F:\Website\engineer″ />
</application>
<bindings>
<binding protocol=”http” bindingInformation=”*:80:engineer.abc.com” />
<binding protocol=”https” bindingInformation=”*:443:” />
</bindings>
</site>
看到 https 後面那個 * 是表示IP位址未指派,443 是埠號,你會發現 443: 後面什麼都沒有,就是表示沒有主機名稱,我們就把整個網域加進去吧。
<binding protocol=”https” bindingInformation=”*:443:web1.abc.com” />
完成後存檔,啟動站台就可以正常囉,注意:當你每次更換憑證時一定會要到 IIS 變更 SSL 憑證,那麼就會變動到 IIS 設定檔 applicationHost.config,所以每次更換憑證時,記得要回到設定檔在按上述步驟重新加上去喔(不然站台又會再跟你鬧革命不啟動)
19. 對外防火牆開好 443 port 後,就可以用 https:\\ 瀏覽你的站台囉。
q
20. 若使用 Google Chrome 瀏覽器,直接點選綠色鎖頭就可以看到憑證資訊,打完收工。q-1

沒有留言:

張貼留言