HTTPS 配置审计
粘贴站点的响应头——如果有的话,再加上它的证书、一段页面源码和主机名——本页报告 HTTPS 一侧的配置:HSTS 是否设置及有效期、内容安全策略是否升级不安全请求、Cookie 是否标记了 Secure 和 SameSite、服务器横幅是否泄露版本,以及代理头显示应用实际看到的请求。证书在同一报告中审计,明文 http:// 子资源从页面源码中统计,能看见握手的命令也为你列出供自行运行。一切都在浏览器中运行,本页自己不发任何请求。
检查什么。从响应头块:HSTS 及其
max-age、
includeSubDomains 和
preload;升级不安全请求的内容安全策略;每条
Set-Cookie 上的
Secure、
HttpOnly 和
SameSite 标志;写明产品和版本的服务器横幅;以及告诉你应用是否把请求视为 HTTPS 的转发头。从证书块:完整的证书审计,直到链上每一环是否真的签署了下一环。从页面源码:明文
http:// 子资源。三者分开报告再合并总结,因为坏掉的挂锁通常是三者之一而非另外两个。要查看 OWASP 完整的安全响应头清单——X-Content-Type-Options、框架保护、Referrer-Policy、Permissions-Policy、COOP、COEP、CORP 及分级评分——请把同一段响应头粘贴到
安全响应头检查 页;两页按 TLS 层和响应头层分工。
它看不到什么。本页从不打开 TLS 连接。浏览器不向页面暴露握手,所以协议版本、加密套件、密钥交换组、OCSP 装订、会话恢复、0-RTT、运行中的服务器实际发送的证书链,以及 HTTP 到 HTTPS 的重定向发生在源站还是代理,都在任何网页能报告的范围之外。它也无法访问第三方站点替你收集响应头,也无法告诉你证书是否受信任,因为那取决于页面读不到的根存储。本页下方的命令能看到这些,它们是留给你在自己的机器上运行的。
从哪里获取响应头块。终端里
curl -sI https://example.com/ 打印的正是本页要的内容。浏览器里打开开发者工具,到 Network 标签,刷新页面,选中文档请求并复制整个 Response Headers 区域,或用
复制 →
复制响应头。重定向检查请同时运行
curl -sI http://example.com/ 并把两段都粘贴进来,页面会先后报告。
尚未审计。在上方粘贴响应头块并按审计此配置查看完整报告;证书、页面源码片段和主机名都是可选的,每项都会增加自己的区块。
可达性探测 — 本页唯一使用网络的部分
页面无法打开 TLS 连接,但可以尝试一次普通请求。如果站点允许跨源读取,响应最终到达的 URL 能显示 http:// 是否被重定向到 https://,这也就是它能证明的全部。如果请求失败,本页无法告诉你主机宕机了、你自己的连接断了,还是站点只是不允许跨源读取——最后一种最常见,因为多数站点不发送 Access-Control-Allow-Origin。http:// URL 在任何重定向之前就被应答,所以这是这里唯一会让浏览器在明文连接上尝试的事。在你按下按钮之前什么也不会离开浏览器。
能看见握手的命令
curl -sI https://example.com/ # the header block this page reads
curl -sI http://example.com/ # is plain HTTP answered, or redirected?
curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' http://example.com/
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null
openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates -ext subjectAltName
nmap --script ssl-enum-ciphers -p 443 example.com
testssl.sh example.com # or: docker run --rm -ti drwetter/testssl.sh example.com
这些命令是留给你在受你控制的机器上、对你有权测试的主机运行的。
-showcerts 的输出可以直接粘贴进
证书检查器,响应头输出则可以粘回本页。
证书是公开文件。每张公共受信任的证书都会发布到证书透明度日志,所以证书内的任何主机名——包括被公共证书颁发机构签署的内部名称或打错的名称——都可以通过搜索这些日志找到。证书还携带其颁发者选择的吊销地址,而这些地址偶尔会写内部主机名。这就是 CDN 服务的证书说明不了源服务器的原因:其中的名称属于 CDN。如果审计翻出了你没预料到的主机名,把它当作公开的,并更换它保护的东西。
隐私:响应头块、证书和页面源码都在本地读取、从不上传,除非你按下可达性探测里的按钮,否则不会发出任何请求。要创建自己的证书请用
自签名证书生成器;要检查私钥是否属于某张证书请用
证书与密钥匹配器。