部署完成意味着公共响应符合发布契约,而不是最后一条上传命令退出码为零。操作套件里的两个只读工具能提供有用证据,但不能证明整个制品都已正确发布。

源文中的示意片段展示 HTTP_STATUS 200 与 FINAL_URL,以及完整的 2026 年证书到期时间和 30 天到期检查结果。注释区分命令成功与 HTTP 状态,以及到期与 notBefore、主机名和信任检查;正文比较与 SAN 身份策略另行验证。
这些片段仅为示意。分别判断 HTTP 状态与到期结果;主机名、信任与正文一致性需要对应的独立检查。

检查响应头

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 工具本身没有网络截止时间,应在任务层设置超时。证书检查与自动续期配置仍是两项独立检查。

在发布前后使用两者

  1. 发布前:保存预期策略、最终 URL、验证器与证书日期,并注明 UTC 采集时间。
  2. 部署已经验证的制品。
  3. 发布后:重复探测,并下载代表性正文与该制品比较。

响应头与证书日期不能证明字节一致。Last-Modified 可能不变,也可能在复制中被重写。发布冒烟测试保存正文并直接比较;完整清单可将检查扩展到单个页面之外。浏览器行为、不同地区边缘的差异,以及只在负载下出现的故障,需要另行测试。记录实际检查过的路径与观察点。

来源