前言
上篇,我們科普了HTTPS的簡單概念
本篇,我們介紹基於 acme.sh
從Letsencrypt
生成免費的泛域名證書
環境
- 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記錄下來,因為視窗一旦關閉資訊就無法找回了。
執行如下命令,把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
系列文章