全站HTTPS升級系列(二)基於 acme.sh從Letsencrypt生成免費的泛域名證書

msh01發表於2019-01-11

前言

上篇,我們科普了HTTPS的簡單概念 本篇,我們介紹基於 acme.shLetsencrypt生成免費的泛域名證書

環境

  • linux伺服器,作業系統為 centos7.2
  • nginx 1.10.1
  • acme.sh v2.8.0

一、安裝acme.sh

# 安裝依賴環境
yum -y install curl cron socat
# 下載並安裝acme.sh
curl  https://get.acme.sh | sh
複製程式碼

執行上述命令後,會在/root資料夾下建立一個.acme.sh的目錄

安裝完後執行acme.sh,提示命令沒找到。執行如下指令即可

source ~/.bashrc
複製程式碼

二、申請域名解析服務商API token ,完成DNS驗證

DNS驗證的意義在於證明域名的所有人是你,而不是別人。

acme.sh是通過操作當前域名的DNS解析記錄,來自動完成DNS校驗的,這樣省了我們很多力氣,而且不容易出錯。

但是acme.sh不是隨隨便便就就能操作當前域名的DNS解析記錄的,必須通過當前域名的域名註冊服務商授權才可以。這就需要用到了API token

目前acme.sh支援的域名註冊服務商有阿里雲,亞馬遜AWS,微軟Azure,DNSPod等

如果當前域名是在騰訊雲上註冊的:

本人的域名就是在騰訊雲上註冊的,先說下本人所經歷的一些波折:

本人的域名是在騰訊雲上面註冊的,於是想當然的以為域名的註冊服務商就是騰訊雲,然而沒找到acme.sh對騰訊雲的支援的配置項,讓我百思不得其解。 後來看騰訊雲後臺,看到域名解析伺服器地址是f1g1ns1.dnspod.net,猜想莫非騰訊雲背後用的是委託dnspod來進行域名解析的? 然後發現了《DNSPod併入騰訊雲,創始人吳洪聲離開》這條新聞,才知道dnspod和騰訊雲是一家。 換句話說,如果你的域名是託管在了騰訊雲上面的,那麼你域名的解析服務商就是DNSPod。 你可以用騰訊雲的賬號或者騰訊雲繫結的QQ,微信登入dsnpod的後臺。

登入 dnspod後臺。如果域名是在騰訊雲上註冊的,那麼可以用騰訊雲的賬號密碼或者騰訊雲繫結的QQ、微信登入。

點選左側的安全設定,『建立API Token』。

建立成功後,千萬記著把ID和Token記錄下來,因為視窗一旦關閉資訊就無法找回了。

全站HTTPS升級系列(二)基於 acme.sh從Letsencrypt生成免費的泛域名證書

執行如下命令,把DP_Id和DP_Key的值替換成你剛剛申請的id和token(注意空格和中英文引號)

export DP_Id="xxxxxxxx"
export DP_Key="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
複製程式碼

如果當前域名是在阿里雲上註冊的:

請先前往阿里雲後臺獲取App_Key跟App_Secret 。,然後執行以下指令碼

# 替換成從阿里雲後臺獲取的金鑰
export Ali_Key="xxxx"
export Ali_Secret="xxxxxxxxxxxxxxxxxxxxxxxxxxx"

複製程式碼

三、生成泛域名證書

acme.sh --issue --dns dns_dp -d msh.com -d *.msh.com
複製程式碼

正常情況下,該命令執行成功需要120秒。

如果這個過程中報錯,可以加上debug引數,重新執行一遍,檢視更詳盡的錯誤原因(90%的問題都在於token不合法)

acme.sh --issue --dns dns_dp -d msh.com -d *.msh.com --debug 2
複製程式碼

四、複製證書到指定位置


疑惑: 為什麼要把acme.sh生成的證書位置從預設生成位置拷貝到其它地方?

解疑: 因為acme.sh生成的資料夾結構可能會變,所以需要將證書複製到別的位置


疑惑: 為什麼不能手動通過mv 或者 cp命令來複制證書到指定位置?

解疑: SSL證書是有有效期的,到期acme.sh會自動更新你的安全證書,並重啟nginx伺服器,讓證書生效。所以你必須告訴acme.sh你指定的SSL證書存放位置,以及重啟nginx伺服器的命令。通過--installcert引數,指定的所有引數都會被自動記錄下來, 並在將來證書自動更新以後, 被再次自動呼叫.


如下,本人指定的證書存放目錄為/mycertify/ssl 重啟nginx伺服器的命令為/usr/local/nginx/sbin/nginx -s reload

完整的安裝證書命令如下:

acme.sh --installcert -d msh.com   --key-file /mycertify/ssl/msh.com.key  --fullchain-file /mycertify/ssl/msh.com.cer   --reloadcmd "/usr/local/nginx/sbin/nginx  -s reload"
複製程式碼

至此,通過acme.sh生成泛域名證書大功告成。

下篇,我們講解如何通過生成的SSL證書,基於nginx配置全站https

系列文章

全站HTTPS升級系列(一)升級前的科普工作

全站HTTPS升級系列(二)基於 acme.sh從Letsencrypt生成免費的泛域名證書

全站HTTPS升級系列(三)nginx配置全站HTTPS

全站HTTPS升級系列(四)專案程式碼升級改造

相關文章