LazyBlog

Let’s Encrypt自動簽署

斗大的標題
「Let’s Encrypt 是免費、自動化和開放的憑證頒發機構」

基本上就是免費的SSL憑證簽署的服務

acme.sh

一個自動從letsencrypt簽署免費證書的腳本

條件、環境

  1. 已經購買了網域名稱
  2. 已經從Cloudflare指定了IP
  3. 伺服器已經安裝nginx,如果沒有點這裡

安裝acme.sh

以下兩個指令在Server端執行,不是本機

在伺服器安裝acme.sh

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

安裝完畢會這樣

移動到root底下的acme資料夾

1
cd cd ./.acme.sh/

安裝完畢打開acme.sh 的自動更新

1
./acme.sh  --upgrade  --auto-upgrade

確認成功

從CloudFlare先記錄一下必要資訊

選擇你已經建立好的網域

網頁滾動到在下方

打開一個記事本然後把這兩個複製貼上到記事本先記著,記事本不要關閉

  • 區域ID
  • 帳戶ID

申請令牌

點擊剛剛記錄區域ID、帳戶ID區塊最下方的獲取您的API令牌

點擊創建令牌

令牌不可共用,所以獨立再創一個這個畫面只是表示我曾經創立過的樣子

找到編輯區域DNS併點擊使用模版

選擇你想指定的網域

滾動到最下方,繼續以顯示摘要

點擊創建令牌

複製專屬該網域的令牌到剛剛的記事本

確認一下記事本

應該會像是這樣子,前面的文字是我標示的讓讀者清楚
反正會有三組東西,但最好自己標記哪一個是什麼

回到伺服器做令牌、區域、帳戶設定

這小標題寫很清楚,現在要去下指令的地方是伺服器噢!

指定令牌、帳號、區域

1
export CF_Token=剛剛複製的另牌
1
export CF_Account_ID=剛剛複製的帳戶ID
1
export CF_Zone_ID=剛剛複製的區域ID

簽名證書

一樣是在伺服器下指令

先移動到/root/.acme.sh

1
cd /root/.acme.sh

1
./acme.sh --issue --dns dns_cf -d 這文字替換成你的網域 -d '*.這文字替換成你的網域'

範例

1
./acme.sh --issue --dns dns_cf -d fuckyou.com -d '*.fuckyou.com'

因為這裡會跑一大堆,直接看重點

  1. 會自動在/root/.acme.sh底下生成跟你的網域名稱一樣的資料夾
  2. 證書會放在這裡面

去nginx底下建立跟域名同樣的資料夾

移動到nginx底下併建立ssl資料夾

1
cd /etc/nginx/ && mkdir ssl

移動到 ssl 資料夾並且建立與同域名相同的資料夾

1
cd ssl/cd ssl && mkdir 同域名資料夾名稱

建議這麼做是因為如果伺服器有多個域名,Key的檔案名稱會一樣,如果丟在同一個目錄底下會導致覆蓋,用域名來區分資料夾最好管理

安裝證書到指定資料夾

回到acme資料夾

1
cd /root/.acme.sh

替換指令中的文字,不要整個貼上去結果那邊苦惱…

1
./acme.sh --installcert -d 網域名稱 --key-file /etc/nginx/ssl/同網域之資料夾名稱/keyfile.pem  --fullchain-file /etc/nginx/ssl/同網域之資料夾名稱/fullchain.cer --reloadcmd "sudo service nginx force-reload"

成功

Nginx寫好設定檔案

這裡的行為一樣是在Server端操作

移動到nginx資料夾內

1
cd /etc/nginx/

這裡說一個坑,必須讀

系統預設吃的443Port設定檔案會根據版本還有作業系統不同有差異
寫到這裡的時候我本來要請讀者直接在conf.d裡面新增一個default.conf的檔案,但根據學習經驗…有可能預設讀取的位置卻是
/etc/nginx/sites-enabled/資料夾底下
套句我師父的話:「伺服器好難」

如果你的Nginx預設就有sites-enabled資料夾

編輯nginx.conf,並指定設定檔案資料夾
寫在http的括號內

1
2
3
http {
include /etc/nginx/sites-enabled/*;
}

移動到sites-enabled 並且新增一個與你的網域同名的設定檔

1
cd sites-enabled && vi 網域.conf

把底下的程式碼直接貼上,但請修改好其中的網域

儲存寫入

1
:wq

如果你的Nginx預設「沒有」sites-enabled資料夾

移動並且編輯cond.d資料夾中的default.conf

修改好這個裡面的網域後貼上

儲存寫入

1
:wq

Cloudflare中SSL設定

網域中類型A的代理切換為關閉

加密模式改為完全嚴格

重刷新網頁,查看憑證是否成功

範例

如果以上有寫錯,或者不懂歡迎提出討論


 評論