Skip to content

证书与 ACME

两种验证方式

HTTP-01DNS-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 之类)有自动续期任务,但要去确认那个任务真的在跑,别等过期了才发现。

个人笔记,写给未来忘事的自己。