如何在 Ubuntu 20.04 上使用 ACME 使用 Let’s Encrypt 設置 Nginx

在之前的教程中,我們描述瞭如何使用 Certbot 從 Let’s Encrypt 獲取免費的 SSL/TLS 證書。

在本教程中,我們想向您展示另一種方法,您可以通過使用 acme.sh Ubuntu 20.04 上的腳本。

如果你還沒有一個可以工作的 NGINX Web 服務器,這裡有一個簡單的 NGINX 安裝指南,你可以遵循。

獲取 acme.sh

acme.sh shell 腳本自動發布和更新來自 Let’s Encrypt 的免費證書。 您可以通過直接從 Web 下載或克隆其 git 項目來獲取 acme.sh 腳本。

從網上下載 acme.sh

運行以下兩個命令中的任何一個來下載並執行 acme.sh 腳本。

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

或者

$ wget -O – https://get.acme.sh | 噓

下面是一個 example 腳本執行時您可以期待什麼。

$ wget -O – https://get.acme.sh | sh –2021-02-16 11:55:47– https://get.acme.sh/ 解析 get.acme.sh (get.acme.sh)… 2606:4700:3032::6815:223e, 2606:4700:3031::ac43:c710, 172.67.199.16, … 連接到 get.acme.sh (get.acme.sh)|2606:4700:3032::6815:223e|:443… 已連接。 HTTP 請求已發送,正在等待響應… 200 OK 長度:未指定 [text/html]
保存到:’標準輸出’
[ <=> ] 937 –.-KB/s in 0s 2021-02-16 11:55:47 (11.8 MB/s) – 寫入標準輸出 [937]
% Total % Received % Xferd 平均速度 時間 時間 當前 Dload 上傳 總花費 剩餘速度 100 204k 100 204k 0 0 3350k 0 –:–:– –:–:– –:–:– 3350k
[Tue 16 Feb 2021 11:55:47 AM UTC] 從在線存檔安裝。
[Tue 16 Feb 2021 11:55:47 AM UTC] 下載 https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
[Tue 16 Feb 2021 11:55:47 AM UTC] 提取master.tar.gz
[Tue 16 Feb 2021 11:55:47 AM UTC] 建議先安裝socat。
[Tue 16 Feb 2021 11:55:47 AM UTC] 如果您使用獨立模式,我們將 socat 用於獨立服務器。
[Tue 16 Feb 2021 11:55:47 AM UTC] 如果您不使用獨立模式,請忽略此警告。
[Tue 16 Feb 2021 11:55:47 AM UTC] 安裝到 /home/shola/.acme.sh
[Tue 16 Feb 2021 11:55:47 AM UTC] 安裝到 /home/shola/.acme.sh/acme.sh
[Tue 16 Feb 2021 12:05:54 PM UTC] 將別名安裝到“/home/shola/.bashrc”
[Tue 16 Feb 2021 12:05:54 PM UTC] 好的,關閉並重新打開終端以開始使用 acme.sh
[Tue 16 Feb 2021 11:55:47 AM UTC] 安裝 cron 作業 47 0 * * * “/home/shola/.acme.sh”/acme.sh –cron –home “/home/shola/.acme.sh” > /dev/null
[Tue 16 Feb 2021 11:55:47 AM UTC] 好的, bash 找到了,所以改變shebang來使用 bash 作為首選。
[Tue 16 Feb 2021 11:55:48 AM UTC] 行
[Tue 16 Feb 2021 11:55:48 AM UTC] 安裝成功!

克隆 acme.sh git 項目

或者,每行運行一個下面的命令,以克隆 acme.sh git 項目並執行腳本。

$ git clone https://github.com/acmesh-official/acme.sh.git $ cd acme.sh $ ./acme.sh –install

無論您選擇使用哪種方法,一旦您看到“安裝成功!”消息,你可以 close 終端窗口並再次打開它以驗證安裝。

要查看 acme.sh 使用信息,請運行下一個命令。

$ acme.sh -h

您也可以運行以下命令來檢查 acme.sh 版本。

$ acme.sh –version

生成證書

要為單個域生成單個證書,請運行以下命令。

代替 yourdomain.com 使用您的註冊域名。 另外,更換 /var/www/yourdomain.com 根據需要使用您域的網站根文件夾。

$ acme.sh –issue -d yourdomain.com -w /var/www/yourdomain.com

對於共享同一個網站根文件夾的多個域/子域,您可以運行下一個命令來頒發證書。

$ acme.sh –issue -d yourdomain.com -d www.yourdomain.com -d subdomain.yourdomain.com -w /var/www/yourdomain.com

生成的證書將存儲在 ~/.acme.sh/yourdomain.com

使用 acme 在 NGINX 上安裝證書

通過acme.sh腳本生成證書後,下一步就是在NGINX上安裝。 首先,創建一個文件夾,生成的證書將復製到其中。

$ sudo mkdir -p /etc/nginx/certs/yourdomain.com

運行下一個命令來安裝證書。 不要忘記更換 yourdomain.com 使用您的註冊域名。

$ acme.sh –install-cert -d yourdomain.com –key-file /etc/nginx/certs/yourdomain.com/key.pem –fullchain-file /etc/nginx/certs/yourdomain.com/cert .pem –reloadcmd “服務 nginx 強制重新加載”

更新 NGINX 服務器塊文件

最後一步是更新您的域的服務器塊文件以包含 SSL 相關指令。
運行以下命令來編輯服務器塊文件。

$ sudo nano /etc/nginx/sites-available/yourdomain.com

接下來,添加以下幾行。

聽 [::]:443 ssl ipv6only=on;
聽 443 ssl;
ssl_certificate /etc/nginx/certs/cloudindevs.com/cert.pem;
ssl_certificate_key /etc/nginx/certs/cloudindevs.com/key.pem;

添加後,您的服務器塊文件應如下圖所示。 新增內容以紅色突出顯示。 另外,請注意端口 80 的監聽指令已被註釋掉。

更新 NGINX 服務器塊文件以使用 SSL

Save 變化和 close 文件。

使用以下命令重新啟動 NGINX:

$ sudo systemctl 重啟 nginx

在瀏覽器中訪問您的網站以確認現在已啟用安全通信。

證書更新

Let’s Encrypt 頒發的證書將每 60 天自動更新一次。

但是,如果您願意,您也可以手動更新證書。 運行下面的命令。

$ acme.sh –renew -d yourdomain.com –force

要停止證書續訂,請運行以下命令。

$ acme.sh –remove -d yourdomain.com

升級 acme.sh

建議始終使用最新版本的 acme.sh。 運行以下命令以確保 acme.sh 自動更新。

$ acme.sh –upgrade –auto-upgrade

要禁用 acme.sh 的自動升級,請運行下一個命令。

$ acme.sh –upgrade –auto-upgrade 0

如果您不希望 acme.sh 自動升級,請使用以下命令手動更新它。

$ acme.sh –upgrade

結論

在本指南中,我們描述了在 Ubuntu 上使用 acme.sh shell 腳本從 Let’s Encrypt 獲取和更新免費 SSL/TLS 證書的步驟。 此方法是使用 Certbot 工具的替代方法。 我們希望了解您使用這些工具的體驗。