部署完成意味着公共响应符合发布契约,而不是最后一条上传命令退出码为零。操作套件里的两个只读工具能提供有用证据,但不能证明整个制品都已正确发布。
检查响应头
check-http-headers.sh 发出 GET、丢弃正文、跟随重定向,打印每一跳的响应头以及最终状态和 URL:
check-http-headers.sh https://www.xbcatm.com/
以下输出只演示要检查的字段,并非刚刚采集的生产观察结果:
HTTP/2 200
accept-ranges: bytes
content-security-policy: default-src 'self'; base-uri 'self'; form-action 'none'; frame-ancestors 'none'; object-src 'none'; script-src 'none'; style-src 'self'; img-src 'self' data:
content-type: text/html; charset=utf-8
last-modified: Mon, 24 Aug 2026 11:20:54 GMT
permissions-policy: accelerometer=(), camera=(), geolocation=(), gyroscope=(), microphone=(), payment=(), usb=()
referrer-policy: strict-origin-when-cross-origin
strict-transport-security: max-age=31536000; includeSubDomains
x-content-type-options: nosniff
x-frame-options: DENY
HTTP_STATUS 200
FINAL_URL https://www.xbcatm.com/
核对预期状态、最终主机与路径,以及最终响应上的策略。工具没有使用 curl 的 --fail:HTTP 404 或 500 仍可能使 shell 命令成功结束。必须判断它打印的状态。响应头不一致需要调查服务器、代理或缓存配置;单凭这种不一致,不能证明活动输出目录选错了。
检查证书日期
check-tls-expiry.sh HOST [DAYS] 提取使用 SNI 时服务器呈现的证书,并检查距离到期是否至少还有指定天数对应的秒数:
check-tls-expiry.sh www.xbcatm.com 30
下面是省略了指纹行的示意片段:
subject=CN=www.xbcatm.com
issuer=C=US, O=Let's Encrypt, CN=YE1
notBefore=Aug 21 08:37:13 2026 GMT
notAfter=Nov 19 08:37:12 2026 GMT
certificate remains valid for at least 30 day(s)
工具打印主体、签发者、日期与 SHA-256 指纹,不打印剩余天数。成功消息只描述到期检查:脚本没有强制验证主机名或信任链,-checkend 也不验证 notBefore。主体 CN 不足以证明主机身份;服务身份应与证书的主体备用名称匹配。有效的通配符也可能合法覆盖该主机。
需要验证这些属性时,另行运行:
openssl s_client -connect www.xbcatm.com:443 -servername www.xbcatm.com \
-verify_hostname www.xbcatm.com -verify_return_error </dev/null
这使用已配置的信任库,并在 OpenSSL 匹配规则下的证书验证出错时失败。在 OpenSSL 3.0 中,没有合适的 DNS 主题备用名称时,主机名验证可能回退到主题 CN。因此,命令成功本身不能证明符合 RFC 9525 仅使用 SAN 的身份策略:还要检查 SAN 扩展,并单独验证目标客户端的策略。TLS 工具本身没有网络截止时间,应在任务层设置超时。证书检查与自动续期配置仍是两项独立检查。
在发布前后使用两者
- 发布前:保存预期策略、最终 URL、验证器与证书日期,并注明 UTC 采集时间。
- 部署已经验证的制品。
- 发布后:重复探测,并下载代表性正文与该制品比较。
响应头与证书日期不能证明字节一致。Last-Modified 可能不变,也可能在复制中被重写。发布冒烟测试保存正文并直接比较;完整清单可将检查扩展到单个页面之外。浏览器行为、不同地区边缘的差异,以及只在负载下出现的故障,需要另行测试。记录实际检查过的路径与观察点。
来源
- curl manual,GET、重定向、响应头输出与 HTTP 失败行为,已核验 2026-10-15。
- OpenSSL
s_client,SNI、显式主机名检查与验证错误时失败,已核验 2026-10-15。 - OpenSSL verification options,主机名匹配与主题 CN 回退,已核验 2026-10-15。
- OpenSSL
x509,证书显示与只检查到期的-checkend行为,已核验 2026-10-15。 - RFC 9525 — Service Identity in TLS,主体备用名称与通配符身份匹配,已核验 2026-10-15。
- Caddy Automatic HTTPS,自动证书管理与续期配置,已核验 2026-10-15。
- MDN: Content Security Policy guide,所示策略的背景说明,已核验 2026-07-13。
- RFC 9110 — HTTP Semantics,响应元数据与验证器不能证明完整制品匹配,已核验 2026-10-15。