外观
证书与 ACME
两种验证方式
| HTTP-01 | DNS-01 | |
|---|---|---|
| 原理 | 在 /.well-known/acme-challenge/ 放个文件 | 加一条 TXT 记录 |
| 要求 | 80 端口能从公网访问 | DNS 服务商有 API |
| 通配符 | 不支持 | 支持 |
| 适合 | 单域名、80 空着 | 内网服务、通配符、80 不开 |
80 端口归 nginx 直管的话 HTTP-01 最省事。80 被别的东西占着或者不想开,走 DNS-01。
套了 Cloudflare 橙云的域名
HTTP-01 会失败,因为请求先到 CF 边缘。两个办法:
- 签证书时临时切灰云,签完切回
- 直接用 DNS-01,Cloudflare 的 API 支持得很好
HSTS 要不要开
HSTS 让浏览器记住「这个域名只走 HTTPS」,记住的时间由 max-age 决定。开了之后:
- 证书过期或续期失败,用户连降级到 HTTP 看错误页的机会都没有
- 想临时切回 HTTP 排错也不行,得等
max-age过去
对一个个人小站,我倾向不开。收益是防降级攻击,但代价是给证书续期多加了一个变量。
检查
bash
# 看证书信息
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates -subject
# 看还剩几天
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate面板类工具(1Panel 之类)有自动续期任务,但要去确认那个任务真的在跑,别等过期了才发现。