怎樣申請個人網(wǎng)站便民信息微信平臺推廣
1 關(guān)于Let’s Encrypt與Cerbot DNS驗(yàn)證
Let’s Encrypt 是一個提供 免費(fèi)證書 的 認(rèn)證機(jī)構(gòu)。
Cerbot 是 Let’s Encrypt 提供的一個工具,用于自動化生成、驗(yàn)證和續(xù)訂證書。
DNS驗(yàn)證是 Cerbot 支持的驗(yàn)證方式之一。相比 HTTP 驗(yàn)證或 TLS-ALPN 驗(yàn)證,DNS 驗(yàn)證更靈活,可以用于獲取任意域名(如子域名或裸域名)的證書,無需直接訪問服務(wù)器。 DNS 驗(yàn)證通過在目標(biāo)域名的 DNS 記錄中添加特定的文本記錄(TXT 記錄)來證明 對該域名的控制權(quán)。認(rèn)證機(jī)構(gòu)會查詢域名的 DNS TXT 記錄以驗(yàn)證域名所有權(quán)。
以下是 DNS 驗(yàn)證的具體步驟和背后邏輯:
(1) 生成挑戰(zhàn)內(nèi)容
- Cerbot 向 Let’s Encrypt 發(fā)送證書申請,提供需要認(rèn)證的域名。
- Let’s Encrypt 返回一個挑戰(zhàn)(Challenge),內(nèi)容包括一個隨機(jī)字符串(Challenge Token)。
(2) 計算驗(yàn)證字符串
- Cerbot 結(jié)合 Challenge Token 和賬戶密鑰生成一個驗(yàn)證字符串。
- 驗(yàn)證字符串 =
SHA256(account_key + token)
或類似算法的結(jié)果。
- 驗(yàn)證字符串 =
- 這個字符串需要通過 DNS TXT 記錄發(fā)布。
(3) 添加 DNS TXT 記錄
- Cerbot 會提示用戶手動或通過 API 在域名的 DNS 配置中添加一條 TXT 記錄:
- 記錄名:
_acme-challenge.<your-domain>
- 記錄值: 驗(yàn)證字符串
- 記錄名:
例如,對于域名 example.com
:
_acme-challenge.example.com. IN TXT "驗(yàn)證字符串"
(4) 驗(yàn)證記錄
- Let’s Encrypt 會查詢域名的 DNS 服務(wù)器,尋找
_acme-challenge.<your-domain>
的 TXT 記錄。 - 如果記錄值與預(yù)期驗(yàn)證字符串匹配,則證明申請者對該域名具有控制權(quán)。
(5) 簽發(fā)證書
- 驗(yàn)證成功后,Let’s Encrypt 會簽發(fā)證書,Cerbot 會下載并保存證書。
Let’s Encrypt官網(wǎng)
參考教程
2 網(wǎng)站HTTPS配置最佳實(shí)踐
-
使用Cerbot生成Let’s Encrypt證書、DNS廠家添加TXT記錄、繼續(xù)完成Cerbot的控制權(quán)認(rèn)證
-
Nginx對網(wǎng)站進(jìn)行Https配置(HTTP的重定向到HTTPS)
-
業(yè)務(wù)服務(wù)的HTTPS配置,這里有兩種方式(按需):
- 🤷?♂?服務(wù)本身支持HTTPS(一般開發(fā)后業(yè)務(wù)服務(wù)為http協(xié)議接口),如SpringBoot Web項(xiàng)目,可使用java keytool生成密鑰配置ssl。若業(yè)務(wù)服務(wù)本身不支持https,不建議調(diào)整業(yè)務(wù)模塊,保證業(yè)務(wù)開發(fā)的純凈。
- 👍通過Nginx對接口進(jìn)行轉(zhuǎn)發(fā),http重定向?yàn)閔ttps,這種方式是推薦的。
3 具體操作
3.1 服務(wù)器安裝cerbot工具
cerbot用來管理Let’s Encrypt的證書(申請、續(xù)約)。我的服務(wù)器操作系統(tǒng)為centos7.9,執(zhí)行的有效操作如下:
# 安裝cerbot工具,cerbot用來管理Let's Encrypt的證書(申請、續(xù)約)
sudo yum install certbot
查看certbot版本驗(yàn)證工具安裝是否成功:
[root@vm ~]# certbot --version
# 正確輸出cerbot工具版本
certbot 1.11.0
3.2 cerbot使用 DNS 驗(yàn)證獲取單域名證書
3.2.1 cerbot驗(yàn)證與證書生成(交互式)
- 鍵入下列命令,為指定域名生成證書(交互式方式進(jìn)行,用戶多次鍵入信息來完成驗(yàn)證信息的采集與證書的頒發(fā))
sudo certbot certonly --manual --preferred-challenges dns -d demo.cn -d www.demo.cn
- 用戶填入信息(郵箱)等用來訂閱域名信息服務(wù)(如Let’s Encrypt的證書升級、到期通知等)
- 驗(yàn)證服務(wù)器與域名歸屬相關(guān)操作
(1)cerbot工具輸出dns解析txt值
(2)dns解析后臺添加txt的解析記錄(兩條)
- cerbot工具進(jìn)行驗(yàn)證,驗(yàn)證通過,輸出證書到服務(wù)器
3.2.2 Nginx配置
- 修改nginx配置(主要是配置站點(diǎn)重定向、啟用ssl、配置證書路徑)
nginx配置非常靈活且具有擴(kuò)展性,其配置目錄大致如下:
- /etc/nginx/| - nginx.conf 主配置文件(定義了全局配置、事件模塊、HTTP 模塊等核心設(shè)置)| - ./conf.d/ 配置目錄(此目錄一般被主配置文件中被include)| - www.demo.cn.conf (自己的站點(diǎn)配置,針對www.demo.cn的https配置就在這里) | - ...# 使用的Nginx版本
[root@vm ~]# nginx -v
nginx version: nginx/1.20.1
www.demo.cn.conf
配置文件內(nèi)容:
server {listen 80;server_name demo.cn www.demo.cn;# Redirect all HTTP requests to HTTPSreturn 301 https://$host$request_uri;
}server {listen 443 ssl http2;server_name demo.cn www.demo.cn;root /usr/share/nginx/html;index index.html index.htm;# SSL Configurationssl_certificate /etc/letsencrypt/live/demo.cn/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/demo.cn/privkey.pem;ssl_session_cache shared:SSL:1m;ssl_session_timeout 10m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;# Additional security headers (optional)add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;# Error pageserror_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}# Default locationlocation / {try_files $uri $uri/ =404;}
}
- 重啟nginx刷新配置
# 重啟nginx
sudo systemctl restart nginx
# 查看nginx狀態(tài)
sudo systemctl status nginx
- 清空緩存,查看網(wǎng)站
沒錯,到此為止網(wǎng)站已經(jīng)完成了https的配置,有幾點(diǎn)說明:
nginx.conf
配置未作修改!但需要檢查nginx.conf
配置中是否include了conf.d
配置目錄。- 如果之前網(wǎng)站接入的服務(wù)為
http
,需要對服務(wù)進(jìn)行調(diào)整使協(xié)議兼容,可以通過使用nginx反向代理服務(wù)為https
(推薦),或者改造服務(wù)自身支持https。
- 通過nginx反向代理API服務(wù)為https的配置大致如下
server {listen 443 ssl http2;server_name demo.cn www.demo.cn;...location /your-api/module1 {allow 127.0.0.1; # 本地回環(huán)地址allow otherip; # 允許指定的 IP 地址allow ::1; # IPv6 本地地址deny all; # 禁止其他所有來源proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location /your-api/module2 {allow 127.0.0.1; # 本地回環(huán)地址allow otherip; # 允許指定的 IP 地址allow ::1; # IPv6 本地地址deny all; # 禁止其他所有來源proxy_pass http://127.0.0.1:8081;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}...}
3.2.3 cerbot證書續(xù)費(fèi)
certbot certonly --renew-by-default -d demo.cn -d www.demo.cn
# 會輸出1、2兩種驗(yàn)證方式,我采用的是模式2
續(xù)費(fèi)命令說明:
certbot
- Certbot 是一個用于申請和管理 Let’s Encrypt SSL 證書的工具。
certonly**
- 表示只申請證書,不自動安裝或配置 Web 服務(wù)器(如 Nginx 或 Apache)。
- 適合手動配置證書的場景。
--renew-by-default
- 如果證書已經(jīng)存在,Certbot 會嘗試?yán)m(xù)費(fèi)(renew)而不是重新申請。
- 如果證書不存在,Certbot 會申請新證書。
-d demo.cn -d www.demo.cn
-d
參數(shù)用于指定域名。- 這里申請的是
demo.cn
和www.demo.cn
兩個域名的證書。 - 多個
-d
參數(shù)表示申請一個包含多個域名的證書(SAN 證書)。
兩種驗(yàn)證域名所有權(quán):
Spin up a temporary webserver (standalone)
- Certbot 會啟動一個臨時的 Web 服務(wù)器來完成 HTTP-01 驗(yàn)證。
- 適用場景:如果你沒有運(yùn)行 Web 服務(wù)器(如 Nginx 或 Apache),或者可以暫時停止 Web 服務(wù)器。
- 注意事項(xiàng):需要確保 80 端口未被占用,或者暫時停止 Web 服務(wù)器。
Place files in webroot directory (webroot)
- Certbot 會將驗(yàn)證文件放置在你的 Web 服務(wù)器的根目錄(如 /var/www/html),通過 HTTP 訪問驗(yàn)證文件。
- 適用場景:如果你正在運(yùn)行 Web 服務(wù)器(如 Nginx 或 Apache),并且不想停止服務(wù)。
- 注意事項(xiàng):需要指定 Web 根目錄路徑。