真正免費!!只要會複製貼上就能產生免費的 HTTPS 憑證!!
前言
雖然 Let's Encrypt 官方提供 ACME 等等工具讓我們能自助產生免費的憑證,甚至可以自動更新憑證,不過對於非宅宅來說,要產出一隻憑證還是蠻麻煩的。
可能為了能吸收不方便使用 ACME 等等工具的族群,越來越多號稱免費產生 HTTPS 憑證的網站也如雨後春筍般的一個一個冒出來。
但是,在號稱免費的背後,其實大部份還是要收費的。(不然他們要賺什麼呢?)
例如我之前覺得還蠻方便的 ZeroSSL 這個網站,免費的使用者就只能產三次憑證(renew 也算一次),超過就得付費。
那有沒有真的不用錢,又不限制憑證數量的網站呢?
有喔!!這篇文章就來跟大家分享~
免費取得 HTTPS
自從踩到 ZeroSSL 三次免費憑證的雷之後,我就開始尋找其它非 ACME 的解決方案,後來找到了這個網站:
基本上,它的原理也是透過 Let's Encrypt 來產生憑證,但是它把整個過程都透過同一個網頁呈現出來。
我們只 需要在自己的電腦跟著它上面列的五大步驟一步一步照著作,就可以產出 HTTPS 憑證了。
下面就依照五大步驟,加上相關工具的事先準備加以說明:
步驟 0:環境準備
要在電腦上執行申請憑證的相關指令,必需先作好以下準備:
-
一個可以聯絡到網域所有人的 Email 帳號。
-
可以執行 openssl 的環境,建議使用 Linux 系列的作業系統。
-
可以登入到網域管理介面(例如 GoDaddy)的帳號。
準備好上述三樣,就可以一步一步往下作囉!!
接下來幾個步驟的指令都可以透過點擊 https://gethttpsforfree.com/ 中每個步驟的 (how do I generate this?)
連結來顯示說明。
本文為了方便操作,把每個步驟的指令一次收錄。
步驟 1:產生公鑰
首先,在網頁的 Account Email 欄位中輸入你的 Email 帳號①。
接著在 Console 中輸入下列指令②:
openssl genrsa 4096 > account.key
接著輸入③
openssl rsa -in account.key -pubout
然後把上述指令回傳的 -----BEGIN PUBLIC KEY-----
到 -----END PUBLIC KEY-----
內容複製貼上到網頁的 Account Public Key 欄位中④,按下 Validate Account Info 按鈕⑤。
如果看到 Looks good! Proceed to Step 2!
這個訊息⑥,就可以繼續作步驟 2 囉。
步驟 2:發送憑證簽章請求
在 Console 中輸入①:
openssl genrsa 4096 > domain.key
接著輸入②:
openssl req -new -sha256 -key domain.key -subj "/" \
-reqexts SAN -config <(cat /etc/ssl/openssl.cnf \
<(printf "\n[SAN]\nsubjectAltName=DNS:ouch1978.tw"))
請務必把上面指令中 DNS: 後面的值改成你要申請 HTTPS 憑證的網域。
接著一樣把上述指令輸出的部份複製貼上到網頁的 Certificate Signing Request 欄位中③,然後按下 Validate CSR 按鈕④。
如果畫面出現 Found domains! Proceed to Step 3! (你的網域)
這個訊息⑤,就可以繼續往下作步驟 3 囉。
步驟 3:簽署 API 請求
把網頁上 Accept the Let's Encrypt terms and conditions 欄位中的內容複製下來,貼到 Console 中執行①。
接著把上述指令回傳的 (stdin)= .... 一整串貼回網頁下方的空白欄位②,然後按下 Accept Terms 按鈕③。
如果畫面上顯示 Accepted! Proceed to next command below.
的訊息④,就可以接著複製 Update your account email 欄位中的指令到 Console 中執行⑤。
再來一樣把回傳的 (stdin)= .... 一整串貼回網頁下方的空白欄位⑥,然後按下 Update Account 按鈕⑦。
如果畫面上顯示 Updated! Proceed to next command below.
的訊息⑧,就可以接著複製 Create your certificate order 欄位中的指令到 Console 中繼續執行⑨。
接著一樣把回傳的 (stdin)= .... 一整串貼回網頁下方的空白欄位⑩,然後按下 Create Order 按鈕⑪。
如果畫面上顯示 Ordered! Proceed to Step 4!
⑫,就可以往第 4 步前進囉!!
步驟 4:驗證網域所有權
步驟 4 應該算是整個流程裡面相對比較複雜一點點的部份,要在這個步驟驗證你是否為網域的持有者。
首先,一樣複製 Load set of challenges 中的內容到 Console 中執行①。
再來把回傳的 (stdin)= .... 一整串貼回網頁下方的空白欄位②,然後按下 Load Challenges 按鈕③。
如果畫面上顯示 Challenges loaded! Choose a challenge option below.
④,就可以繼續下一步。
再來有三條路可以選擇:
-
Option 1 - python server:在伺服器上透過 python 指令驗證網域所有權。
-
Option 2 - file-based:上傳檔案到網站下驗證網域所有權。
-
Option 3 - DNS record⑤:在網域管理後台中加入一組 DNS 記錄以驗證網域所有權。
在這邊我會比較建議使用第三種方法,這樣不需要在伺服器已經準備好的狀況下就能驗證。
在網域管理後台中加入一個名稱為 Under this DNS domain 欄位中內容的 TXT 記錄⑥,值為 Set this TXT record 欄位中的內容⑦。
然後按下 I can see the TXT record for [你的網域] 按鈕⑧。
如果出現 Ready for the next command!
訊息的話⑨,就可以繼續往下。
接著把 Sign challenge command 欄位中的內容複製貼到上 Console 中執行⑩,然後一樣把回傳的 (stdin)= .... 一整串貼回網頁下方的空白欄位⑪,再按下 Submit challenge for [你的網域] 按鈕⑫。
如果沒意外的話,畫面應該會出現 Challenge submitted! Proceed to next command below.
這個訊息⑬。
把 Check challenge status command 的內容複製貼上到 Console 中執行⑭,貼回 (stdin)= ... 的內容⑮,然後按下 Check challenge status 按鈕⑯。
畫面應該會出現 Challenge complete! Proceed to finalize certificate order.
⑰,快結束了~
把 Finalize order and generate certificate 欄位中的內容貼到 Console 中執行Ⓐ,再貼回 (stdin)= ... 的內容Ⓑ、按下 Finalize Order 按鈕Ⓒ。
畫面如果出現 Finalized! Proceed to next command below.
Ⓓ,就快大功告成囉~
再把 Check certificate generation status 中的內容貼到 Console 中執行Ⓔ、貼回 (stdin)= ... 的內容Ⓕ、按下 Check certificate Status 按鈕Ⓖ