浏览器

SEC_ERROR_OCSP_INVALID_SIGNING_CERT:Firefox OCSP 报错怎么修

作者: · 最后核实

报错信息SEC_ERROR_OCSP_INVALID_SIGNING_CERT

SEC_ERROR_OCSP_INVALID_SIGNING_CERT 的意思是:Firefox 收到的证书状态(OCSP)响应,是由一张没有资格签它的证书签名的。 Firefox 会把不可信的吊销答复当作失败处理,而不是忽略它。同一系列还有响应过期、响应来自未来、响应被拒绝等错误。

先判断是网站的问题还是你电脑的问题

网站装订的 OCSP 响应有问题,是网站或 CA 的问题;装订正常,先查电脑时间。用 SSL 检测 查网站,它会显示服务器有没有装订 OCSP 响应、响应是否有效:

curl ssl.sh/example.com
  • 检测提示装订响应或 CA 的响应服务器有问题:是网站或它的 CA 的问题。
  • 检测正常:先查电脑时间(OCSP 响应只在一个时间窗口内有效),再考虑杀毒软件或代理拦截 HTTPS 时把装订响应弄坏了。

原因

这类报错有 5 种原因:前 2 种是 OCSP 响应的签名证书不对,后 3 种各自对应 Firefox 的另一个 OCSP 错误码。

1. 服务器缓存了错误的装订响应

换证书或换 CA 之后,Web 服务器可能还在装订属于旧签发者的响应,Firefox 看到的就是“签名证书不对”。看看装订了什么:

openssl s_client -connect example.com:443 -servername example.com -status </dev/null 2>/dev/null \
  | sed -n '/OCSP response:/,/^---/p' | head -30

通常重启(不是重载)TLS 服务就能清掉缓存的装订响应。

2. 私有 CA 的响应服务器证书不对

委托的 OCSP 响应服务器证书必须由同一个 CA 签发,并带有 OCSPSigning 扩展密钥用途(RFC 6960 第 4.2.2.2 节)。手工搭建的响应服务器经常漏掉这一点。

3. 响应过期(SEC_ERROR_OCSP_OLD_RESPONSE)

服务器连不上 CA 的响应服务器(防火墙、DNS 问题),只好一直装订一个已经过了 nextUpdate 的旧响应。国内服务器访问部分境外 CA 的 OCSP 地址不稳定时容易出现。放行服务器到 CA OCSP 地址的出站 HTTP。

4. 时间问题(SEC_ERROR_OCSP_FUTURE_RESPONSE)

访客电脑时间慢了,改对时间即可,见 系统时间错误。

5. 响应服务器出错(SEC_ERROR_OCSP_SERVER_ERROR、SEC_ERROR_OCSP_UNAUTHORIZED_RESPONSE)

CA 的响应服务器返回错误或拒绝请求,常发生在故障期间,一般是暂时的,CA 的状态页会有说明。

在各浏览器/系统上的样子

这组报错基本只出现在 Firefox:Chrome 对大多数证书不依赖实时 OCSP,Safari 有自己的吊销检查机制。

浏览器 显示内容
Firefox “建立安全连接失败”,代码为 SEC_ERROR_OCSP_* 之一
Chrome / Edge / 360 / QQ 浏览器 通常不报错:Chrome 对大多数证书不依赖实时 OCSP
Safari 通常能打开,苹果有自己的吊销检查机制

因为只有 Firefox 有反应,这类错误常被误以为是“Firefox 的问题”,但问题在服务器。

站长怎么修

修好装订响应就能消除报错;证书里没有 OCSP 地址时,直接关掉装订。

1. 刷新或修好装订。 Nginx 的装订需要签发者证书链和 DNS 解析器:

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/example.com.chain.pem;
resolver 223.5.5.5 119.29.29.29 valid=300s;

国内服务器可以用阿里 223.5.5.5、腾讯 119.29.29.29 这类公共 DNS。证书里没有 OCSP 地址时(比如现在的 Let's Encrypt 证书),装订不起作用,可以关掉。

2. 换证书后重启服务,丢掉旧的装订缓存:systemctl restart nginx。

3. 私有 CA 由签发 CA 重新给响应服务器签发带 extendedKeyUsage=OCSPSigning 的证书。

4. 验证。 用 curl ssl.sh/example.com 和 Firefox 测试。原理见 OCSP 和 CRL。

常见问题

能在 Firefox 里关掉 OCSP 检查来绕过吗?

只能临时关一下做测试,测完要打开。Firefox 的“查询 OCSP 响应服务器”选项是用来发现已吊销证书的。关掉后网站能打开,就说明是网站的装订或它的 CA 响应服务器有问题,应该由站长去修。

OCSP 和 OCSP 装订有什么区别?

普通 OCSP 是浏览器自己去问 CA 的响应服务器;装订(Stapling)是 Web 服务器先取回响应,在 TLS 握手时一并发给浏览器,更快也更保护隐私。装订的响应坏了,在服务器刷新之前所有访客都会受影响。

电脑时间不对会导致 OCSP 报错吗?

会。时间慢了,新的响应看起来像来自未来(SEC_ERROR_OCSP_FUTURE_RESPONSE);时间快了很多,响应又像已经过期(SEC_ERROR_OCSP_OLD_RESPONSE)。先把系统时间改对。

资料来源

  1. RFC 6960: Online Certificate Status Protocol
  2. Mozilla Support: Error codes on secure websites
  3. nginx ngx_http_ssl_module: ssl_stapling