使用 let's encrypt 證書


使用 let's encrypt 證書

let's encrypt 是個開放的 CA,提供免費的 tls 證書,旨在提高整個互聯網的安全性。

let's encrypt 的自身的根證書已得到一些常見的根證書的簽名,通過它頒發的 tls 證書可在大部分的系統、瀏覽器上使用,兼容性見
https://letsencrypt.org/docs/certificate-compatibility/

let's encrypt 通過 ACME (automatic certificate management environment)協議進行申請和更新,每次申請得到的證書有效期會很短(3個月左右),
到期需要進行更新(商業 tls 證書一般有效期為一、兩年左右)。雖然有效期短,但它可以自動更新,在 linux 上使用 acme.sh 時,自動注冊了一個
crontab 任務,每天晚上會自動進行檢查,可用 crontab -e 查看。

簡單介紹下申請步驟

申請域名

向任意的域名注冊商申請一個域名,freenom.com 還可以免費注冊域名(.tk/.ml/.ga/...)。

域名注冊后,一般會被域名注冊商的 dns 進行解析和管理,像 freedns / cloudflare
可遷移到其它的 dns 解析方案,不過要注意遷移到國內進行解析時,是需要備案的。

在選擇 dns 解析時,留意下 acme.sh 是否支持對應的 dnsapi https://github.com/Neilpang/acme.sh/wiki/dnsapi ,有相應的 dnsapi 時
才能自動更新。acme.sh 已支持很多的 dns 解析提供商,像 cloudflare、freedns、godaddy、dnspod、萬網(aliyun)等。

看看對應的 dnsapi 的文檔,在 dns 解析提供商上創建 api 所需要的 id / token / secret 等信息,有些 dnsapi 支持不止一種方式,選擇一個合適
的方案即可,如 cloudflare 上使用 account+token 方式。

安裝 acme.sh

acme.sh 是 shell 腳本寫的,安裝時無須 root 賬戶,直接在需要使用 let's encrypt 的賬戶中,運行:

curl https://get.acme.sh | sh

相應的腳本會被放到當前用戶的 ~/.acme.sh 目錄下,安裝完成后,需要重新加載一下環境變量才能使用

source ~/.bashrc

現在進行申請,以 cloudflare 的 account+token (注意看 dnsapi 文檔,這個 token 需要讀取所有的 zone ,並寫對應的 zone.dns )為例:

export CF_Account_ID=<cloudflare 賬戶 ID>
export CF_Token=<cloudflare token>
acme.sh --force --issue -d example.com -d www.example.com --dns dns_cf

acme.sh 會把環境變量記錄下來,在下次進行刷新使用。對應的證書在 ~/.acme.sh 目錄下的域名目錄里,<xxx>.key 是私鑰,fullchain.cer
是帶中間證書的完整證書。

使用證書

不同的 web 服務器掛證書的方式有點不一樣,需要參考對應的說明文檔。

在 nginx 中,配置如下:

server {
    listen       443 ssl http2;
    ssl_certificate "<fullchain.cer 路徑>";
    ssl_certificate_key "<*.key 路徑>";
    ...
}

更新一下

nginx -s reload

可以把 reload 放到 crontab,或通過acme.sh 本身支持與 nginx 集成配置。在 acme.sh 頒發證書時自動進行 nginx reload,加上

acme.sh <issue 命令...>
    --reloadcmd "nginx -s reload"

同步證書到其它節點

以集群方式部署時,如果不是多節點共享存儲,需要把證書同步到其它節點,可直接在 acme.sh 加的 crontab 規則后面加一個 rsync (這里已把公鑰添加到了其它機器)

20 0 * * * rsync -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" -a /root/.acme.sh root@10.0.0.9:/root

同時其它節點要定時做下 reload


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM