SSL For Free: 使用Let’s Encrypt 申請SSL憑證

當網站加入 SSL 加密協定(HTTPS,網址列會是綠色鎖頭圖示),就不會被讀者誤會是危險網站或詐騙網站了(HTTP,是紅色鎖頭圖示)。申請方式其實很簡單,但是因為是免費的,所以每3個月需要重新申請憑證。

我覺得不會太麻煩,反正就用手機日曆功能提醒自己就好了,或者注意線上申請網站,發送的電子郵件通知信,通常會在憑證到期前一個星期會收到信件,再找個時間更新憑證就可以了!

而我也是最近才搞清楚 Let’s EncryptSSL For FreeZeroSSL 三者的關係,在文章中會一併說明。雖然有沒有搞清楚它們之間的關係並不影響憑證的申請,純粹是基於好奇心,才會在空閒時爬文。

Let’s Encrypt、 SSL For Free、ZeroSSL 三者的關係

簡單說,從下圖可以清楚了解 Let’s Encrypt 是憑證中心,可以透過線上工具網站( ZeroSSL、SSL For Free、 Certbot)的幫忙,完成憑證申請,然後再安裝於網站當中。整個流程都是免費的,不需要額外付費。假使是免費申請的話,憑證效期只有 90 天,在期限到之前,必須再重新申請一次憑證來使用。

原本使用SSL For Free 來完成憑證申請已經好長一段時間了,可是從去年( 2020 )開始,想要重新申請憑證時,網站都會自動轉址到 ZeroSSL 來完成後續流程。一直也搞不懂原因,也害怕憑證出狀況無法使用,所以就花了一些時間了解什麼是 ZeroSSL。接下來可以看一下如何利用 ZeroSSL 網站,完成整個憑證申請的流程!

10_ Let's Encrypt ZeroSSL SSLforFree
申請憑證示意圖

現在前往SSL For Free網站的話,可以明顯看到: Never pay for S S L again. Powered by ZeroSSL with free 90-day certificates.不難理解, ZeroSSL 網站似乎已經取代SSL For Free 網站的申請功能的原因了。

09_ SSL for Free powered by zerossl
官方說明

透過 ZeroSSL 網站,申請憑證的流程

ZeroSSL申請憑證雖然很便利,但是最大的缺點就是一個帳號,只能對同一個網域申請3次憑證。簡單說,當你使用了9個月後,就無法再針對同一個網域申請免費憑證了。

有方法解決嗎?當然有,在文章最後一個章節會分享使用Certbot申請Let’s Encrypt憑證的方法,利用Certbot這個方法,就可以永久使用免費憑證了。

輸入要申請的網址

前往 ZeroSSL 網站,輸入要申請憑證的網址。

11_ ZeroSSL website
輸入要申請的網址

建立帳號

這個帳號除了用來登入來維護所有憑證之外,還會收到未來憑證到期的提醒信件。

12_ create account on ZeroSSL
建立帳號

填寫網域

13_ ZeroSSL New Certificate
填寫網域

憑證效期: 90天(免費版)

順利的話,在這一步當中可以看到【Domains】是綠色符號,這代表前一步的流程是正確的。接著因為是免費版憑證申請的關係,所以只能選 90-Day Certificate 這個選項,然後點選下一步。

14_ ZeroSSL 90 days
憑證效期: 90天(免費版)

選取 Auto-Generate CSR

15_ ZeroSSL CSR contact
選取 Auto-Generate CSR

方案選擇

因為是申請免費版憑證,所以直接點選下一步。

16_ ZeroSSL finish

驗證網站所有權

提供了三種驗證網站所有權的方式:

  • Email Verification
  • DNS ( CNAME )
  • HTTP File Upload

按照說明步驟,將測試檔案放在網站中,然後點選下一步即可。

17_-ZeroSSL-verification
上傳測試檔案到網站中
18_-ZeroSSL-verify-domain
驗證網站所有權

下載憑證

當驗證網站所有權沒問題之後,接著就是要選擇要下載的伺服器類型,然後把憑證下載到電腦中備份,最後按下一步。

19_-ZeroSSL-Download-Certificate

安裝憑證到網站中

因為目前是使用 XAMPP 自架網站的關係,所以直接將剛剛下載的憑證檔案解壓縮,放在以下路徑後,開啟 XAMPP 控制面板,然後 restart Apache ,連上網站測試連線看看。假使可以正常連線的話,就完成所有憑證申請的流程了(下圖)。

  • ca_bundle.crt
    • 放在 C : \ xampp \ apache \ conf \ssl.crt \
  • certificate.crt
    • 放在 C : \ xampp \ apache \ conf \ssl.crt \
  • private.key
    • C : \ xampp \ apache \ conf \ssl.key \
20_-ZeroSSL-install-SSL-on-XAMPP
完成憑證申請

(已停用) 透過SSL For Free 網站,申請憑證的流程

連結到網站

點選下方連結,進到網站後,在欄位中填入你要申請 Let’s Encrypt 憑證的網域名稱,再用空白鍵來輸入不同的網址,例如

  1. 申請網站: https://www.sslforfree.com/
  2. 輸入網域名稱 (範例) : 【 hipay0.com www.hipay0.com 】
  3. 點選按鈕: 【 Create Free Certificate 】
02_ SSL For Free_ Let's Encrypt
連結到網站

使用 Manual Verification

可以看到剛剛輸入想要申請憑證的網址會列在最上方,假使正確的話,就可以按【 Manual Verification 】

  • Manual Verification
    • Upload verification files manually to your domain to verify ownship
03_ SSL For Free_ Let's Encrypt
使用 Manual Verification

Manually Verify Domain

滑鼠往下滑動,然後按【 Manually Verify Domain 】

04_ SSL For Free_ Let's Encrypt
Manually Verify Domain

建立 .well-known 資料夾

先打開 command windows ,在安裝 WordPress 的路徑下新增【 .well-known 】資料夾:

  • cd \
  • cd C : \ wamp64 \ www \ spa
  • mkdir .well-known
05_ SSL For Free_ Let's Encrypt
建立 .well-known 資料夾

建立 acme-challenge 資料夾

然後開啟檔案總管,在 C : \ wamp64 \ www \ spa \ .well-known \ 的路徑下再新增【 acme-challenge 】資料夾

06_ Let's Encrypt
建立 acme-challenge 資料夾

Download Certificate

在下方【 1 】的兩個檔案下載到【acme-challenge】的資料夾下,然後點選下方【 2 】兩個連結,假使能夠開啟新的網頁,而且正確顯示文字的話,就代表成功了。接著按下【 Download Certificate 】按鈕

07_ Let's Encrypt
Download Certificate

設定通知信箱

接著會出現帳號登入的畫面,就輸入你常用的 email 信箱,這樣子,憑證到期前一周,會透過這個 email,通知你要更新憑證。

09_ Let's Encrypt
設定通知信箱

下載憑證到電腦

然後把憑證下載到電腦

10_ Let's Encrypt
下載憑證到電腦

解壓縮憑證檔案

解壓縮後複製到 C : \ wamp64 \ bin \ apache \ apache2.4.37 \ conf ,這樣子就完成憑證申請了。

08_ Let's Encrypt
解壓縮憑證檔案

驗證網站

最後,在瀏覽器網址列輸入【 https://hipay0.com/ 】,假使可以進入登入畫面,就表示成功了!

使用Certbot可以完全免費申請憑證

跟上述兩個方法相比,過程的確比較複雜一點,照著下面的流程,相信你也可以完成申請。

下載 Certbot 工具

前往 https://certbot.eff.org/lets-encrypt/windows-other 下載 certbot-beta-installer-win32.exe 的安裝檔案,然後執行程式,然後會安裝至 C:\Program Files (x86)\Certbot 的目錄底下。

確認 Certbot 是否有安裝成功

打開系統管理員身份執行開啟 Command Prompt,然後輸入以下指令:

C:\Windows\system32>cd C:\Program Files (x86)\Certbot
C:\Program Files (x86)\Certbot>certbot --version
certbot 1.20.0
C:\Program Files (x86)\Certbot>certbot -h
certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...
.
.
.
  -h all                print a detailed help page including all topics
  --version             print the version number

建立憑證

以我的 hipay0.com 網域名稱為範例,輸入以下命令同時產生 hipay0.com 網域憑證與 *.hipay0.com 萬用子網域憑證。

C:\Program Files (x86)\Certbot>certbot certonly --manual -m YOUR-EMAIL@gmail.com -d hipay0.com -d *.hipay0.com

接下來會詢問你兩個問題,

  1. 是否要【顯示偵錯紀錄檔的路徑】與【同意服務使用條款】,按下【y】進行下一步
  2. 是否要提供 E-mail 給 Electronic Frontier Foundation (EFF)?按下【y】進行下一步

然後,就準備發出憑證請求了。

Requesting a certificate for hipay0.com and *.hipay0.com

需要完成兩個認證流程

雖然申請 Let’s Encrypt 免費憑證時,通常只需要選擇一種認證流程就好了,但是這次的範例是要申請憑證給 hipay0.com 單一域名,與另一個 *.hipay0.com 萬用域名使用,所以,兩個域名要使用不同方法完成認證。
1. 單一域名 : 必須讓 Let’s Encrypt 網站能夠存取你的網址(要開放 Port 80 進行 HTTP 連線),這樣子就能驗證網站的擁有者!
2. 萬用域名 : 前往你的DNS服務商,新增一筆 TXT 紀錄到 _acme-challenge.hipay0.com 的域名上,並將其值設定為 iqzzzNZ-_USmmmUk,然後按下 Enter 繼續!

單一域名認證方式:
在網站跟目錄底下,新增【.well-known】的資料夾,然後在這個資料夾底下,新增一個檔案,檔名是【5mxxxFw】,而這個檔案的內容是【5mxxxFw.i5yyyC0】

Create a file containing just this data:
5mxxxFw.i5yyyC0
And make it available on your web server at this URL:
http://hipay0.com/.well-known/acme-challenge/5mxxxFw

萬用域名認證方式:
以我的例子來說明,前往Cloudflare然後新增一筆 TXT 紀錄到 _acme-challenge.hipay0.com 的域名上,並將其值設定為 iqzzzNZ-_USmmmUk,就完成了。

Please deploy a DNS TXT record under the name:
_acme-challenge.hipay0.com.

with the following value:
iqzzzNZ-_USmmmUk

Before continuing, verify the TXT record has been deployed... You can
check if it has finished deploying with aid of online tools, such as the Google
Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.hipay0.com.
...

完成 Let’s Encrypt 憑證申請

當你看到以下文字,表示憑證已經建立完成了,可以前往路徑下,把憑證放在網站相對應的資料夾裡面。

Successfully received certificate.
Certificate is saved at: C:\Certbot\live\hipay0.com\fullchain.pem
Key is saved at:         C:\Certbot\live\hipay0.com\privkey.pem
This certificate expires on 2022-01-21.
These files will be updated when the certificate renews.
NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

修改httpd-ssl.conf

最後一步,照著下面的路徑,把相對應的憑證放到對的資料夾,然後也要修改httpd-ssl.conf這個檔案。清除快取,重開Apache,打開網站假使有看到綠色鎖頭,就表示全部流程都完成了。

打開設定檔: \conf\extra\httpd-ssl.conf
將 Line 149 改成: SSLCertificateFile "C:/xampp/apache/conf/ssl.crt/cert.pem"
將 Line 169 改成: SSLCertificateChainFile "C:/xampp/apache/conf/ssl.crt/chain.pem"
將 Line 180 改成: SSLCACertificateFile "C:/xampp/apache/conf/ssl.crt/fullchain.pem"
將 Line 159 改成: SSLCertificateKeyFile "C:/xampp/apache/conf/ssl.key/privkey.pem"

Windows 10 自架網站流程圖

只要照著我的步驟做,相信你也可以不用額外花半毛錢,就可以在 Windows 10 的電腦上面,架設好屬於自己的專屬網站了(這篇文章可以看到自架網站的完整敘述)。而這系列的分享文章,是寫給架站新手 / 小公司 / 部落客的,不適用於大型企業 / 大神級…

網站DIY流程圖

Step 1、準備好硬體

– 電腦主機
– 路由器
初期
: 拿現有的路由器,具備設定通訊阜轉發就可以了。
後期: 決定要持續維護網站後,最好更換成具備防火牆功能的產品。畢竟防火牆功能的路由器,價格都不便宜。本身使用的都是入門款的防火牆(Vigor2120n使用心得),到現在,網站還沒中毒或被駭的經驗。只是每天在後台都看到一堆惡意連線,心裡難免怕怕的,所以只能靠硬體防火牆多少排除一下這些狀況。
進階: 自架免費防火牆OS(pfsense的使用心得),可以操作的細部功能更多了,防火牆設定也變得靈活。

Step 2、安裝架站安裝包

– 安裝 XAMPP 要記得在最後允許 Windows 防火牆存取【公用網路】與【私人網路】
– 設定 phpMyadmin (可以參考: 在Windows10架設WordPress網站)
– 設定 WordPress(可以參考上面連結: 在Windows10架設WordPress網站)

Step 3、申請 DDNS

使用 NoIP DDNS 的服務,將 IP 轉換成專屬網址,申請流程請參考: 申請 NoIP DDNS 的流程

Step 4、申請 SSL 數位憑證

當網站加入 SSL 加密協定(HTTPS,網址列會是綠色鎖頭圖示,申請流程請參考: ZeroSSL 的網站中完成申請),就不會被讀者誤會是危險網站或詐騙網站了(HTTP,是紅色鎖頭圖示)。也有利於 Google 搜尋排名。

Step 5、軟體設定

– VirtualHost 目的是使用同一個網頁伺服器 ( Apache ) 架設多個網站 ( e.g. hipay0.com ; www.hipay0.com ),當使用者以不同網域名稱 ( e.g. hipay0.com ; www.hipay0.com… ) 連到主機時, Apache 會依據不同的網址,回應不同的網頁內容。
– Apache 、WordPress、mySQL、phpMyadmin…的參數微調,全部都集中在VirtualHost 設定這一篇做分享。

6、網站上線

接下來要面對的問題,就是根據您的網站應用、屬性,在社團中發問,尋找解決方法了,例如:
– 如何提供 Pagespeed Insights 的分數
– 如何提高網站排名
– 如何改善SEO 的問題
– 如何提高流量
– 如何增加被動式收入、加入聯盟行銷
– 如何使用 Google Keyword Planner
-…
接下來的部分,會分享一些進階版的內容,有興趣的人,可以參考下一個章節。

Q&A

透過 ZeroSSL 網站申請憑證的話,需要安裝其他程式嗎?

不用。無須下載或安裝任何外掛程式,只需要透過瀏覽器,在網站中填入相關資訊,照著憑證產生精靈的步驟做即可或取憑證。

ZeroSSL申請憑證有次數限制嗎

有,無法無限次數續用。

為什麼免費版憑證只有 90 天的有效期限呢?

跟密鑰洩露和誤發行有關係,假使發生錯誤或被盜的話,可以在較短的時間內發現、解決。

只能透過 ZeroSSL or SSL_For_Free 來申請憑證嗎?

幾個常見的網站都提供憑證申請:
1. Let’s Encrypt: https://letsencrypt.org/
2. Certbot: https://certbot.eff.org/
3. WoSign’s KuaiSSL: 網站似乎有問題,無法連線
4. Free SSL Certificate: https://www.freesslcertificate.org/

免費版憑證,只能考慮使用 Let’s Encrypt 嗎?

可以有其它選擇,例如: The better option is provided by Cloudflare.
Cloudflare 不僅只是 CDN service provider,也提供免費版的憑證讓 CDN 用戶使用。

回到頂端