Let’s Encrypt自動簽署
斗大的標題
「Let’s Encrypt 是免費、自動化和開放的憑證頒發機構」
acme.sh
條件、環境
- 已經購買了網域名稱
- 已經從Cloudflare指定了IP
- 伺服器已經安裝nginx,如果沒有點這裡
安裝acme.sh
以下兩個指令在Server端執行,不是本機
在伺服器安裝acme.sh
1 | curl https://get.acme.sh | sh |
安裝完畢會這樣
移動到root底下的acme資料夾
1 | 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' |
因為這裡會跑一大堆,直接看重點
- 會自動在/root/.acme.sh底下生成跟你的網域名稱一樣的資料夾
- 證書會放在這裡面
去nginx底下建立跟域名同樣的資料夾
移動到nginx底下併建立ssl資料夾
1 | cd /etc/nginx/ && mkdir ssl |
移動到 ssl 資料夾並且建立與同域名相同的資料夾
1 | 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 | http { |
移動到sites-enabled 並且新增一個與你的網域同名的設定檔
1 | cd sites-enabled && vi 網域.conf |
把底下的程式碼直接貼上,但請修改好其中的網域
儲存寫入
1 | :wq |
如果你的Nginx預設「沒有」sites-enabled資料夾
移動並且編輯cond.d資料夾中的default.conf
修改好這個裡面的網域後貼上
儲存寫入
1 | :wq |
Cloudflare中SSL設定
網域中類型A的代理切換為關閉
加密模式改為完全嚴格
重刷新網頁,查看憑證是否成功
範例
如果以上有寫錯,或者不懂歡迎提出討論