標題之所以說快速,因爲如果你手速快的話3分鐘就能申請成功~
參考:https://github.com/Neilpang/acme.sh/wiki/說明
Let’s Encrypt是由Internet Security Research Group(ISRG)運行的非營利性證書頒發機構,可以免費提供用於TLS加密的X.509證書。證書有效期爲90天,在此期間可以隨時續訂。這個組織由Mozilla基金會、Cisco、Facebook、Google Chrome等機構贊助,旨在推廣HTTPS保證互聯網安全。
要在網站上啓用 HTTPS,需要從證書頒發機構(CA)獲取一個證書,Let’s Encrypt就是一個免費CA證書頒發機構。
準備條件
- OS:Ubuntu / Debain,可以上網但無需公網IP。
- 擁有一個域名。
如果有興趣可以參考Let’s Encrypt官網介紹自行申請證書,不過得益於 Github牛人Neilpang的工作,我們可以用他的腳本快速申請證書。他的腳本有多種方式申請證書,這裏介紹其中比較簡單的一種不需要公網IP,使用DNS的方式申請證書。
申請證書
1. 安裝腳本
curl https://get.acme.sh | sh
source ~/.bashrc
下載執行此腳本會保存在~/.acme.sh/
目錄下,並把腳本加入環境變量。
2. 申請證書
acme.sh --issue --dns -d 'www.sample.com' --yes-I-know-dns-manual-mode-enough-go-ahead-please
這個步驟會生成一個DNS驗證記錄,類似如下所示
Domain: '_acme-challenge.www.sample.com' # 示例
TXT value: 'zeXfD67fYnOnd2YJFelum-41kOCVzWGEtxeAJ7SEy-w' # 示例
3. 添加域名解析
在域名管理界面,添加一條TXT記錄,驗證域名所有權,記錄值就是上一步生成的TXT值。
4. 生成證書
acme.sh --renew -d 'www.sample.com' --yes-I-know-dns-manual-mode-enough-go-ahead-please
添加完域名解析後,執行這一步,會在.acme.sh/
目錄下生成域名對應的目錄,裏面有證書所需的各種信息,但是不要拿出來使用。
5. 取出證書
acme.sh --installcert -d 'www.sample.com' --key-file ./www.sample.key --fullchain-file ./cert/www.sample.com.cer
這一步能把上一步生成的證書所需的好幾個文件合成證書。
此時目錄下就有證書文件www.sample.com.cer
和私鑰文件www.sample.key
,二者都是PEM純文本格式,可以直接查看其內容。
注意
- 這裏使用的是DNS解析的方法,無需公網IP的機器即可快速生成證書的方法,其他方法詳見那個工程的GitHub介紹。
- 上述命令中
-d
參數指定域名,可以寫一個具體域名,也可以使用通配符生成*.sample.com
通用證書。但是*.xx.com
證書不能用於xx.com
域名的網站。 - 證書的有效期是3個月,到期後需要手動再次申請。可以使用acme.sh項目介紹的自動續簽的方式到期自動申請,好像需要有公網IP的機器。
- 驗證:
cer
格式的證書在windows系統中可以直接點開查看內容。完整驗證可以使用nginx搭一個服務器,沒有公網IP的話可以使用修改hosts文件的方式使域名直接指向該服務器。
附:Nginx測試SSL證書
安裝nginx
sudo apt-get install nginx
默認配置文件
/etc/nginx/sites-available/default
# http 跳轉到 https
server {
listen 80;
server_name 域名;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
# listen 80 default_server;
# listen [::]:80 default_server;
# SSL configuration 使用HTTPS,否則就是80端口
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name 域名; # 需要處理的訪問IP
ssl_certificate /home/xxx/xxx.crt; # 證書和祕鑰
ssl_certificate_key /home/xxx/xxx.key;
...
}
}
啓動
sudo nginx
停止
sudo pkill nginx