首先打開 Let’s Encrypt 的官網
這邊寫說如果可以連進去主機用指令操作的話,推薦使用 Certbot 來設定憑證
點一下 Certbot 的連結,然後選則伺服器軟體和作業系統
選完底下會出現 安裝教學
包含一些注意事項
請先購買網域並且設定好 DNS,也就是要可以使用網址開啟網站
EC2 預設的子網域無法申請憑證
EC2 預設的子網域無法申請憑證
EC2 預設的子網域無法申請憑證
AWS 可以使用 CloudFront 設定憑證,不用自己搞東搞西
AWS 可以使用 CloudFront 設定憑證,不用自己搞東搞西
AWS 可以使用 CloudFront 設定憑證,不用自己搞東搞西
第一步
用 SSH 連線進伺服器
恩恩,連好了
第二步
安裝 Snap 套件管理程式
在安裝之前先更新一下套件
sudo apt update && sudo apt upgrade
安裝 snapd
sudo apt install -y snapd
重新開啟終端機,重新連線,確保 Snap 路徑更新
安裝 Snap 核心
sudo snap install core
安裝 hello-world 測試 Snap 是否有正確運作
sudo snap install hello-world
測試 Snap
hello-world
第三步
移除用 apt 安裝的 Certbot
看起來很堅持要用 Snap 呢
完整移除 Certbot
sudo apt purge certbot && sudo apt autoremove --purge
我沒裝過所以啥也沒有移除
第四步
安裝 Certbot
sudo snap install --classic certbot
第五步
建立指令軟連結
sudo ln -s /snap/bin/certbot /usr/bin/certbot
第六步
自動設定或是自己設定
手動設定會快很多,加上 d 參數設定網域
sudo certbot certonly -d ec2-54-238-160-84.ap-northeast-1.compute.amazonaws.com --nginx
這邊不是憑證上的 Email,是用來做安全性通知的,可以輸入 c 跳過,我輸入了我的 Email
閱讀服務條款,沒問題後就輸入 Y 同意
是否要接收其他 Email 通知,N 我不接受
看來一定要有網域才能簽呢,我先去生個子網域
再試一次
sudo certbot certonly -d 2023ironman.miku3920.net --nginx
這是因為沒有設定 DNS,要將 Domain 指向 IP
還有一個原因是昨天的設定把所有「.」開頭的路徑擋掉了
在根目錄設定前加上這段
location ~ /\.well-known/acme-challenge/ {
allow all;
}
記得重新載入設定檔
sudo systemctl reload nginx
新增一個檔案進去測試看看
不再是 404 表示可以讀取裡面的檔案了
設定成功會像這樣
最後要手動設定憑證
在 /etc/nginx/sites-available/
新增一個網域的檔案
然後開啟一個 神奇的網站
選擇伺服器版本就會出現範例的設定,複製貼上到剛剛的檔案
把 default_server 砍掉加上 server_name,也就是你的網域
將剛剛申請好的憑證路徑放到 ssl_certificate, ssl_certificate_key, ssl_trusted_certificate
中間有個檔案要下載,輸入它給的指令,路徑我決定放在 /etc/nginx/cert/dhparam.pem
mkdir /etc/nginx/cert/ && curl https://ssl-config.mozilla.org/ffdhe2048.txt > /etc/nginx/cert/dhparam.pem
這邊加上 root, index, server_name
還有要把 default 的那三段也複製過來
這個註解或砍掉,用預設的 DNS 伺服器解析網址就可以了
建立軟連結,將網站設為啟用
ln -s /etc/nginx/sites-available/2023ironman.miku3920.net /etc/nginx/sites-enabled/2023ironman.miku3920.net
重新載入設定檔
sudo systemctl reload nginx
第七步
測試自動更新憑證
sudo certbot renew --dry-run
查看所有定時任務
systemctl list-timers
第八步
用 HTTPS 開啟網站看看是否生效