早年,如果我們網站項目需要安裝SSL證書那基本上只有購買付費證書,而且成本還相對比較高。從Let's Encrypt等服務商都相繼提供免費SSL證書之后,以及普及SSL證書的應用之后,我們看到原本很多付費且較高的SSL證書也比較便宜。如今我們如果需要購買付費證書成本基本上也與一個域名的價格差不多甚至更便宜。
如果個人或者普通項目,我們其實完全沒有必要購買付費證書,使用Let's Encrypt這樣的免費證書足矣,而且現在Let's Encrypt也支持申請泛域名證書。這對于原來只能單一申請且使用的用戶來說,又一個利好消息。不過對于一般的用戶而言,基本上也用不上泛域名SSL證書。
一般我們SSL證書都用于網站項目,且大部分的WEB一鍵包、WEB面板都支持快速安裝SSL證書,且基本上都默認將Let's Encrypt作為免費證書內置。但是,因為Let's Encrypt商家才推出免費泛域名證書,所以對于泛域名證書的申請還沒有提供快速申請。在這篇文章中,需要分享的是我們利用網友提供的腳本可以快速給網站申請泛域名證書。
關于免費SSL證書申請,老部落還有幾篇文章可以參考:
1、申請騰訊云免費DV SSL證書及Apache/Nginx/IIS/Tomcat證書安裝
2、阿里云免費DV SSL證書申請自動下發及Apache/Nginx/IIS/Tomcat安裝SSL
3、景安免費1年基礎級DV SSL證書申請及網站HTTPS加密安裝
第一、Let's Encrypt泛域名申請準備工作
1、了解申請原理
這篇文章后面用到的一鍵腳本申請Let's Encrypt泛域名SSL證書,是利用第三方域名DNS API接口快速申請的,這樣。無論我們Linux VPS、服務器使用的何種WEB環境都可以快速申請。
2、申請DNS API
根據腳本的介紹,提供且支持我們常見的第三方DNS,包括DNSPOD、CLOUDXNS、阿里云DNS、GoDaddy、CLOUDFLARE、PowerDNS、Linode 等40多家DNS服務商。如果我們域名有用哪家的DNS,然后到對應的商家申請API。
舉個例子:如果我們域名申請DNSPOD API,如上圖申請之后需要記錄好ID和Token。
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
然后根據對應的標準準備好,后面需要在VPS服務提交。
3、自定義腳本
~/.acme.sh/acme.sh --issue --dnsdns_dp-d laobuluo.com -d *.laobuluo.com
需要注意的問題:我們需要到https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md,查看支持的DNS服務商,以及看到對應的API格式和自定義腳本設置。每個DNS服務商需要用的稍微不同,比如DNSPOD,我們看到上標注是dns_dp。
第二、Let's Encrypt泛域名申請過程
1、準備VPS和登入
這里我們需要準備好已經安裝過WEB環境的VPS,以及域名解析到服務器且DNS是使用的對應的準備好的。如果我們不放心可能產生的問題,那就先將服務器備份。
2、安裝軟件和acme.sh
apt-get update && apt-get install curl -y
&& apt-get install cron -y && apt-get install socat -y
//Debian/Ubuntu系統
yum update && yum install curl -y && yum install cron -y && yum install socat -y //CentOS系統
curl https://get.acme.sh | sh
3、提交API和腳本申請
我們登錄SSH之后,先將自己的API丟進去,然后再將申請腳本丟進去會自動申請。
看到上面界面就表示申請成功。
4、檢查證書
在"/root/.acme.sh/"對應的域名下,可以看到上圖的這么多文件,其實我們只需要fullchain.cer和域名前綴.key文件就可以的。
第三、Let's Encrypt泛域名SSL證書安裝
根據上文我們可以看到只需要2個文件就可以安裝證書,但是我們需要先將證書拷貝到對應的證書專門目錄中,不要直接引用這個目錄文件。
~/.acme.sh/acme.sh --installcert -d .com \
--key-file /etc/nginx/ssl/.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "service nginx force-reload"
這里用的是service nginx force-reload, 不是service nginx reload, 據測試, reload 并不會重新加載證書, 所以用的 force-reload)。Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/.cer ,否則 SSL Labs 的測試會報 Chain issues Incomplete 錯誤。
第四、小結
1、通過上面腳本的辦法可以快速的結合域名DNS API申請Let's Encrypt泛域名SSL證書,不需要特定哪種WEB環境才可以安裝。且不同的DNS渠道使用的API申請和腳本是不同的,需要參考官方文檔。
2、申請的Let's Encrypt泛域名證書是自動更新的,且我們需要將證書考慮到對應網站目錄在安裝,不要直接用生成的目錄安裝。