最近小編又接到不少工作替公司網站增加了不少安全性的功能,所以拖了一段時間來更新部落格,不過也收集到了一些經驗可以分享分享,首先呢先來介紹個免費 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 平台的站台流程分享給你們。
回歸正題,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」繼續。
注意:若你有多個子網域也都是要一併申請進去,他會只產生一組憑證檔提供給你放入各個子網域站台,千萬不要笨笨的分開申請,為何要這麼說呢?作到後面你就會知道囉。
2. 為了確定這個網域名稱使你所有,必須要作站台驗證的動作,他提供了兩種驗證方式,若你的網站有開起 FTP 功能的話,可使用「Automatic FTP Verification」來輸入 FTP 相關資訊自動完成驗證,若你擔心資訊安全的話,可以用手動驗證的方式「Manual Verification」,必須自己下載驗證檔案,按照網站上的說明上傳到主機,另外還有提到站台若有設定防火牆,請必須將 IP:66.133.109.36 加入允許連線的白名單,避免驗證失敗,都沒有問題的話就點選下方的「Manually Verify Domain」繼續。
3. 點選網站上提供的檔案下載鏈結,依照說明順序建立兩層資料夾,將檔案放進去即可。記得要按下圖第 5 步驟的鏈結來看看能否正常讀取檔案,如果不行,代表你的路徑可能錯誤,總之呢要讓鏈結都能正常開啟,使SSL For Free能夠正常驗證你的站台。
這裡我相信很多人都是在這邊失敗、失敗、再失敗!無論如何就是沒有辦法讓驗證鏈結正常開啟!小編在這邊也是卡了很久 … 明明按照說明在站台建立好指定的路徑,也都正確放入驗證檔!
偏偏開起驗證鏈結就是無法顯示或者給我出現 404 錯誤 …
在不斷的 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>
或者直接在 IIS 平台的站台上點選進入「MIME 類型」。
加入「副檔名: . MIME 類型:text/plain」即可。
確認設定好 MIME 類型,驗證鏈結就可以正常開啟囉(就是一連串的雜數亂碼)。
4. 確定驗證連結沒有問題後,再點選最下方的「Download SSL Certificate」,通過驗證後,SSL For Free 就會開始產生 SSL 憑證。
5. 產生憑證後,就能看到密密麻麻的憑證檔案資訊。不過在下在憑證之前,請先注意有著「Get Notified of Expiration」,請先行設定一組 Email 和密碼,這個功能即你申請的憑證在過期前會自動 Email 通知你,提醒你要記得更新憑證以免錯過有效期間。
6. 設定好通知後,點選最下方點選「Download All SSL Certificate Files」打包所有憑證檔並下載下來,
7. 解壓縮後可以取得一個私密金鑰(Privacy Key)、CA_bundle.crt 和 certificate.crt 三個檔案。
8. 產生的憑證是 .crt 非 .pfx,IIS 憑台只能使用 .pfx 憑證檔,所以這時候就需要透過工具做轉換,我們到 OpenSSL for Windows 去下載 OpenSSL 回來,並把他安裝完成。
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
10. 執行完畢後,PKCS#12 憑證檔 certificate.pfx 就會產生在我們指定的目錄下面(檔案類型為個人資訊交換)。
11. 我們只要把PKCS#12 憑證檔上傳到 IIS 的站台,請至 IIS 點選「伺服器憑證」。
12. 點選右邊動作「匯入 …」。
13. 在匯入憑證視窗,點選「…」,選擇你產生出來的 certificate.pfx 憑證檔。
14. 並輸入之前使用 OpenSSL 轉檔時的密碼。
15. 憑證放好囉。
16. 站台新增繫結,請先點選你的站台,在右邊動作點選「繫結」,於站台繫結點選「新增」。
17. 類型選擇「https」,SSL 憑證就直接點選你剛剛放入的憑證。
這裡請注意,你會發現主機名稱無法設定,因為整個 IIS 只能跑一組 SSL 憑證,不管是有多少個站台就只能跑一組!主機名稱可以用其他方式設定,這個小編會在另一篇說明,但憑證就只能跑一組,所以有此需求的朋友記得我在前面第一個步驟就有提到「若你有多個子網域也都是要一併申請進去」,這樣你在多個網預設定時才不會有問題。
18. 放好後就可以看到,多了一個 https 站台繫結。
在這個步驟你會發現為何 https 無法輸入主機名稱(網域),且若多個站台都啟用 https 時,甚至會有出現站台被停用的狀況。
原因是因為連接埠指定了 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:\\ 瀏覽你的站台囉。
20. 若使用 Google Chrome 瀏覽器,直接點選綠色鎖頭就可以看到憑證資訊,打完收工。
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
關於您說的,整個IIS只能支援跑一組SSL,其實在IIS 8.0 之後就有支援 SNI 了喔。
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 網站憑證之類(該網站也沒有意思想要付費改成HPPTS..) 有什麼方法我能自行將我的網站變成安全的呢(目前GOOGLE都顯示不安全)
1. 詢問你租用的平台是否可以開放
2. 若無法開放只能換平台
3. 不然就是要詢問租用的平台是否有配合的SSL廠商(當然這是要付費的),應該就不是你要的選項.
你好~想請問~ 我的網站是租來的平台,而且我無法進入主機端設定安裝 SSL 網站憑證之類(該網站也沒有意思想要付費改成HTTPS..) 有什麼方法我能自行將我的網站變成安全的呢(目前GOOGLE都顯示不安全)
1. 詢問你租用的平台是否可以開放
2. 若無法開放只能換平台
3. 不然就是要詢問租用的平台是否有配合的SSL廠商(當然這是要付費的),應該就不是你要的選項.
你好~ 請問
1.我租用了一個購物網路平台,
但該主機所有人並不願意為售出的子網域裝上SSL,導致網址列上都會顯示”不安全”,
請問我無法進入主機去操作這些,這樣能加裝SSL嗎?我又要怎麼安裝呢?
2.國際網域租用有推薦的嗎? 租國際網域就直接有送域名MAIL嗎?
1. 若無法進入就沒有辦法放憑證!只能換平台。
2. 有很多,可能要自行比較一下!如寰宇。
你好
請問
我一次申請二個網站例如
tyweb.abc.com.tw web.abc.com.tw
同一個憑證在第一個網站tyweb.abc.com.tw是正常的
但是用到第二個網站就不正常,我要如何排除,謝謝
您說的第二個站台是在同一個IIS平台上嗎?
你好
請問我在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”: [] } ] }
你的站台無法連線喔!請先行確認你的站台是OK的。
請問一下要怎麼確認站台呢
您說的確認站台是指?
寫得很詳細, 感謝您
你好!謝謝你,已寄送給你。
不好意思想請問一下
我已經照上面做了好多次
但是我的網站仍然顯示不安全
甚至把我導到sslvpn_logon
一個要輸入帳密的登入頁去
不知道我是不是什麼地方做錯了。
請問你的平台是?
寫得好詳細喔~~我看了好多篇文章都卡住,最後在你這裡搞懂了,太感謝!!
不用客氣喔!
你好
當我點選手動驗證,會出現一個手動驗證域,按了以後出現”錯誤,請嘗試使用附近的驗證頁面頂部的鏈接再生您的帳戶。如果不工作,那麼請聯繫我們進行修正:”。
沒有出現檔案連結可供下載。謝謝回答
換個瀏覽器試試看
您好, 我遇到了錯誤是這個樣, 是否能幫忙解惑… 謝謝您^^
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/檢查你的網域看看,或許有幫助。
您好,經由您專業的介紹,我從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可以用的,懇請協助,非常感謝。
SSL For Free 單網域仍是可以申請的,但多網域確實改成要費用了,我後來改使用Freessl,不過是對岸的,要不要用自己斟酌喔!
請參考:SSL For Free 多域名(Multi-Domin SSL Certificate)要收費,改用FreeSSL.cn解決流程分享
小建議:
把帳號砍了,重新申請新的帳號。
新的帳號一樣不能多域名喔