使用 SSL For Free 產生 Let’s Encrypt SSL 憑證上傳給 IIS 站台使用

最近小編又接到不少工作替公司網站增加了不少安全性的功能,所以拖了一段時間來更新部落格,不過也收集到了一些經驗可以分享分享,首先呢先來介紹個免費 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.crt
i-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

2017.01.26 更新一下,謝謝網友 Chung 的分享,在 IIS 8.0之後的版本已經有有支援 SNI 了,可以解決 IIS 只能支援跑一組 SSL 問題,小編有時間來找個 IIS 8.0 平台來試試,在另外分享囉。
參考網址:
http://openwares.net/misc/server_name_indication.html
http://www.pczone.com.tw/vbb3/thread/29/153966/
https://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-server-name-indication-sni-ssl-scalability

在〈使用 SSL For Free 產生 Let’s Encrypt SSL 憑證上傳給 IIS 站台使用〉中有 28 則留言

  1. 你好~想請問~ 我的網站是租來的平台,而且我無法進入主機端設定安裝 SSL 網站憑證之類(該網站也沒有意思想要付費改成HPPTS..) 有什麼方法我能自行將我的網站變成安全的呢(目前GOOGLE都顯示不安全)

    回覆
    • 1. 詢問你租用的平台是否可以開放
      2. 若無法開放只能換平台
      3. 不然就是要詢問租用的平台是否有配合的SSL廠商(當然這是要付費的),應該就不是你要的選項.

      回覆
  2. 你好~想請問~ 我的網站是租來的平台,而且我無法進入主機端設定安裝 SSL 網站憑證之類(該網站也沒有意思想要付費改成HTTPS..) 有什麼方法我能自行將我的網站變成安全的呢(目前GOOGLE都顯示不安全)

    回覆
    • 1. 詢問你租用的平台是否可以開放
      2. 若無法開放只能換平台
      3. 不然就是要詢問租用的平台是否有配合的SSL廠商(當然這是要付費的),應該就不是你要的選項.

      回覆
  3. 你好~ 請問
    1.我租用了一個購物網路平台,
    但該主機所有人並不願意為售出的子網域裝上SSL,導致網址列上都會顯示”不安全”,
    請問我無法進入主機去操作這些,這樣能加裝SSL嗎?我又要怎麼安裝呢?
    2.國際網域租用有推薦的嗎? 租國際網域就直接有送域名MAIL嗎?

    回覆
    • 1. 若無法進入就沒有辦法放憑證!只能換平台。
      2. 有很多,可能要自行比較一下!如寰宇。

      回覆
  4. 你好
    請問
    我一次申請二個網站例如
    tyweb.abc.com.tw web.abc.com.tw
    同一個憑證在第一個網站tyweb.abc.com.tw是正常的
    但是用到第二個網站就不正常,我要如何排除,謝謝

    回覆
  5. 你好
    請問我在Download SSL Certificate的時候出錯了
    以下為錯誤訊息,請問如何排除,謝謝

    Domain “btest.com.tw” challenge3 failed. Response from “https://acme-v01.api.letsencrypt.org/acme/challenge/JKk7qQL8htokzzwUE_JeYbZ_6taEavXsJagXckWbe_k/2025497032” was: { “type”: “http-01”, “status”: “invalid”, “error”: { “type”: “urn:acme:error:connection”, “detail”: “DNS problem: NXDOMAIN looking up A for btest.com.tw”, “status”: 400 }, “uri”: “https://acme-v01.api.letsencrypt.org/acme/challenge/JKk7qQL8htokzzwUE_JeYbZ_6taEavXsJagXckWbe_k/2025497032”, “token”: “QJkhjtEvd9kzchXRQ3PINd0HhVCrwsdUMlDL-ldmRRo”, “keyAuthorization”: “QJkhjtEvd9kzchXRQ3PINd0HhVCrwsdUMlDL-ldmRRo.e6qdMw43W7A94ANZkHDzreBlCcoagyRkANsJTThIMQY”, “validationRecord”: [ { “url”: “http://btest.com.tw/.well-known/acme-challenge/QJkhjtEvd9kzchXRQ3PINd0HhVCrwsdUMlDL-ldmRRo”, “hostname”: “btest.com.tw”, “port”: “80”, “addressesResolved”: [], “addressUsed”: “”, “addressesTried”: [] } ] }

    回覆
  6. 不好意思想請問一下
    我已經照上面做了好多次
    但是我的網站仍然顯示不安全
    甚至把我導到sslvpn_logon
    一個要輸入帳密的登入頁去
    不知道我是不是什麼地方做錯了。

    回覆
  7. 你好
    當我點選手動驗證,會出現一個手動驗證域,按了以後出現”錯誤,請嘗試使用附近的驗證頁面頂部的鏈接再生您的帳戶。如果不工作,那麼請聯繫我們進行修正:”。
    沒有出現檔案連結可供下載。謝謝回答

    回覆
  8. 您好, 我遇到了錯誤是這個樣, 是否能幫忙解惑… 謝謝您^^

    Domain “www.pholus.com.tw” challenge failed. Response from “https://acme-v02.api.letsencrypt.org/acme/chall-v3/988422082/4RHGeg” was

    Error: Unable to update challenge :: authorization must be pending

    Full Error: { “type”: “urn:ietf:params:acme:error:malformed”, “detail”: “Unable to update challenge :: authorization must be pending”, “status”: 400 }

    回覆
    • 你是新申請的嗎?感覺是授權待處理而過期了!建議你重新申請一次看看!
      你可以到這個網址https://letsdebug.net/檢查你的網域看看,或許有幫助。

      回覆
  9. 您好,經由您專業的介紹,我從SSL For Free網站成功取得站台憑證,也順利renew憑證三次,當我今天再次嘗試第四次renew憑證時,得到下列訊息:You have reached the number 90-day certificates allowed on your account. Please upgrade your account. 看起來SSL For Free網站提供的憑證不是永久免費的,請問板主有沒有真正免費的letsencrypt憑證For IIS可以用的,懇請協助,非常感謝。

    回覆

發佈留言