既然大家認為 https://www.sslforfree.com/ 提供取得私密金鑰的方法不好,有違第三方精神,那麼今天我們就來改個方式,自己在 Clinet 端取得相關憑證使用吧。

這個方式是參考這篇文章修改而來的 Lets Encrypt Client,我的操作環境是 Mac OS X,其他 windows 使用者就自己想辦法處理了。至於它的驗證方法,那篇文章中也有詳細說明,我就不提了,以下就該注意修改的地方作說明。

Step.1 下載 lets_encrypt.sh

mkdir /tools/lets_encrypt
cd /tools/lets_encrypt
curl -o lets_encrypt.sh https://calomel.org/lets_encrypt.sh
chmod 750 lets_encrypt.sh

首先建立一個目錄給 script 使用,並下載相關檔案。

Step.2 建立驗證用的目錄

這是用來儲存 token 檔案作驗證用的。請先利用 ftp 登入你要設定的網站,在根目錄下先建立『.well-known』目錄,接著進入 .well-known 目錄中再建立子目錄『acme-challenge』,先不要關閉,待會還會繼續使用 ftp。

Step.3 修改 lets_encrypt.sh 的參數

#!/usr/local/bin/bash

使用相關編輯器開啟 lets_encrypt.sh,第一行請修改更改為你的 bash 的位置,例如 mac 用戶就改為『#!/bin/bash』

DOMAINS="example.org" 

將 example.org 改為你要安裝憑證網站的網址

BASEDIR="/tools/lets_encrypt"

BASEDIR 這個目錄是用來儲存等會產生憑證檔案的存放位置,請用實際路徑填寫,例如『/Users/myname/tools/lets_encrypt』

WEBDIR="/var/www/.well-known/acme-challenge"

這個目錄是產生token檔的位置,因為我們放在 client 端,所以改為自己的路徑,例如『/Users/myname/tools/.well-known/acme-challenge”』

CA="https://acme-staging.api.letsencrypt.org"
#CA="https://acme-v01.api.letsencrypt.org"  

acme-server 的網址,第一個是測試用,請將第一行用 # 註解掉,第二行拿掉 #

chmod a+r "${WEBDIR}/${challenge_token}"

請找到此行,並在它的下一行輸入『read -p “Press enter to continue”』,為何要加這段暫停語法,後面再解釋。

Step.4 執行 lets_encrypt.sh

開啟 terminal 執行 lets_encrypt.sh,順利的話,最後一行訊息它會顯示『Press enter to continue』暫停不動了。

為何要這樣子做?因為這個執行這個 script,會在目錄下(.well-known/acme-challenge)產生一支 token 檔案。接著就繼續作 Request the acme-server to verify 的驗證動作,它是到你的網站上檢查是否有這個 token 檔。再來不管驗證是否成功,就立即刪除剛剛產生的 token 檔案。

但是我們只是在本地端實作而已,它去偵測你的網站是否有這支 token 檔時,一定是會失敗的。所以我們下暫停指令,出現『Press enter to continue』訊息之後,讓你趕快在 .well-known/acme-challenge 下找到剛剛自動新增的 token 檔案,將它 ftp 上傳到你的網站,一樣目錄下 .well-known/acme-challenge。

確定檔案上傳成功後,回到 terminal 按下 enter 鍵,讓 script 繼續完成後續的驗證就可以了,如果順利的話,就會產生類似以下的訊息畫面

Lets Encrypt Certificate Generator
————————————

Initialize the environment

+ Update the Lets Encrypt Authority X1 PEM certificate
+ Generate new private account key
+ Calculate key thumbprint for ACME challenge
+ Register private account key with ACME server

Generate certificate for example.org

+ Make directory /tools/lets_encrypt/example.org
+ Seed entropy by generating random keys: 1 2 3 4 5 6 7 8 9
+ Private Key created
+ Generate signing request
+ Request challenge for example.org
+ Respond to challenge for example.org
+ Challenge accepted
+ Create domain certificate
+ Add intermediate certificate to chain
+ Complete.

Certificate Inspection
————————
MD5 signatures must be equal

Private Key = (stdin)= a3986a5925036b0018f929316ec0da1b
Cert Sign Req = (stdin)= a3986a5925036b0018f929316ec0da1b
Cert Chain = (stdin)= a3986a5925036b0018f929316ec0da1b
PASSED

Locally Inspect Certificate
openssl x509 -in example.org/example.org-certchain.pem -text -noout

Remotely Inspect Certificate
openssl s_client -CApath /etc/ssl/cert.pem -connect example.org:443

HTTP Key Pinning
pin-sha256=”Hf00GDlnnS0os1cj8FaNY6pKj3c0gLhkRe5SQw/SQnM=”;

Verify the authority and certificate chain
issuer= /C=US/O=Let’s Encrypt/CN=Let’s Encrypt Authority X1
public-lets-encrypt-x1-cross-signed.pem: OK
example.org/example.org-certchain.pem: OK

然後你會在目錄下『/tools/lets_encrypt/你的憑證發放網址』找到 3 個檔案,檔名像這樣子:

example.org-certchain.pem …..這是憑證
example.org-certsignrequest.csr
example.org-privatekey.pem …..這是私鑰

有了相關的私密金鑰之後,我們就可以在虛擬主機上,以 Cpanel 介面來安裝憑證了。

記得,這個免費的 SSL 憑證只有三個月使用期間,到期前記得更新一次。
如果嫌麻煩,那就花錢買一個吧~

相關網址:
https://calomel.org/lets_encrypt_client.html
https://github.com/lukas2511/letsencrypt.sh

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *