PAYATHON 2026

支付宝沙箱页面证书过期并提示NET::ERR_CERT_DATE_INVALID

支付老李

结论

证书的“到期日期”和当前日期都是 Jun 4, 2025,不等于证书在当天 24 小时内始终有效。TLS 证书记录的 notAfter 精确到秒,通常使用 UTC;浏览器界面可能只显示日期,不显示具体时间和时区。

这意味着证书可能已在 2025 年 6 月 4 日的某个时刻到期。除此之外,本机时间不准、CDN 节点仍返回旧证书、TLS 中间设备替换了证书,或证书链中的其他证书失效,也会触发 NET::ERR_CERT_DATE_INVALID。

如果确认服务端返回的 *.alipaydev.com 证书已经过期,问题出在支付宝沙箱环境的服务端证书配置。调用方无法自行续期,只能等待平台更新证书或向支付宝技术支持反馈。

为什么同一天仍会判定为过期

证书有效期包含两个精确时间:

  • notBefore:证书开始生效的时间
  • notAfter:证书停止生效的时间

浏览器会检查当前时间是否满足:

notBefore <= currentTime <= notAfter

例如,证书的实际到期时间可能是:

Jun 4 00:00:00 2025 GMT

北京时间比 UTC 快 8 小时,对应:

2025-06-04 08:00:00 CST

北京时间 6 月 4 日上午 8 点以后,浏览器就会认为证书已经过期。即使证书详情页和系统日期都显示 Jun 4, 2025,验证结果仍然无效。

界面也可能按其他时区显示日期,因此不能只比较页面上的日期,必须查看完整的 notAfter 时间。

第一步:检查本机时间

先确认设备的日期、时间和时区准确无误。系统时间过快或过慢,都可能让浏览器误判证书尚未生效或已经过期。

macOS 或 Linux 可以执行:

date
date -u

Windows PowerShell 可以执行:

Get-Date
Get-TimeZone
w32tm /query /status

需要检查:

  • 年、月、日是否正确
  • 时区是否正确
  • 系统是否启用了自动校时
  • 虚拟机、容器或远程桌面的时间是否与宿主机同步

修正时间后,完全退出浏览器,再重新访问。不要故意调慢系统时间来绕过证书错误,否则可能影响登录凭证、Cookie、签名验证和其他 HTTPS 请求。

第二步:查看服务器实际返回的证书

使用 OpenSSL 查看服务器当前提供的证书及其精确有效期:

openssl s_client \
  -connect unitradeprod-sandbox.dl.alipaydev.com:443 \
  -servername unitradeprod-sandbox.dl.alipaydev.com \
  </dev/null 2>/dev/null |
openssl x509 -noout -subject -issuer -serial -dates

输出通常类似:

subject=CN=*.alipaydev.com
issuer=...
notBefore=...
notAfter=Jun  4 00:00:00 2025 GMT

判断到期时间时,应以 notAfter 后面的完整时间和 GMT 时区为准。

-servername 参数不能省略,因为它负责发送 SNI。一个 IP 地址可能托管多个 HTTPS 站点。如果没有发送正确的 SNI,服务器可能返回另一张证书。

还可以让 OpenSSL 验证证书链:

openssl s_client \
  -connect unitradeprod-sandbox.dl.alipaydev.com:443 \
  -servername unitradeprod-sandbox.dl.alipaydev.com \
  -showcerts \
  -verify_return_error \
  </dev/null

查看输出中的:

Verify return code

如果返回值不是零,需要结合后面的错误说明,判断问题是证书过期、证书链不完整,还是其他验证错误。

第三步:检查不同网络和节点

如果 OpenSSL 返回的是新证书,但浏览器仍提示旧证书过期,可能是不同网络路径收到了不同证书。常见原因有:

  • CDN 或负载均衡节点的证书更新不一致
  • DNS 将不同用户解析到不同节点
  • 公司代理、防火墙或安全软件执行了 HTTPS 检查
  • 浏览器或操作系统保留了旧的 TLS 会话
  • IPv4 与 IPv6 连接到了不同节点

先查看域名解析结果:

nslookup unitradeprod-sandbox.dl.alipaydev.com

或者:

dig unitradeprod-sandbox.dl.alipaydev.com A
dig unitradeprod-sandbox.dl.alipaydev.com AAAA

可以分别在这些环境中测试:

  • 当前网络
  • 手机热点
  • 另一台设备
  • 无痕窗口
  • 关闭代理或 VPN 后的网络
  • 不同的 DNS 解析环境

也可以使用 curl 快速确认 TLS 验证结果:

curl -vI https://unitradeprod-sandbox.dl.alipaydev.com/

不要添加 -k 或 --insecure。这两个选项会让 curl 跳过证书验证,无法准确复现问题。

如果错误只在公司网络中出现,请检查浏览器显示的证书颁发者。若颁发者变成了公司内部 CA、安全软件或代理产品,而不是预期的 DigiCert 证书链,连接可能遭到了 TLS 代理拦截。

第四步:排除浏览器缓存和 TLS 状态影响

可以按顺序尝试:

  1. 完全退出并重新启动浏览器。
  2. 使用无痕窗口访问。
  3. 清理操作系统的 DNS 缓存。
  4. 暂时关闭代理、VPN 或 HTTPS 扫描功能,然后重新测试。
  5. 换用其他浏览器或设备。
  6. 对比浏览器中的证书信息与 OpenSSL 输出的序列号和 notAfter。

如果不同工具看到的证书序列号不同,通常表示请求到达了不同的服务节点,或中间设备替换了证书。

如何判断责任范围

可以根据检查结果定位问题:

检查结果可能原因处理方式
多个网络均返回同一张过期证书服务端证书已过期联系支付宝技术支持,等待服务端续期
只有某个网络返回过期证书CDN 节点、代理或网络缓存异常更换网络,并向对应网络或平台方反馈
只有一台设备报错本机时间、浏览器状态或安全软件异常校准时间、重启浏览器并检查 HTTPS 扫描
OpenSSL 返回新证书,浏览器显示旧证书TLS 会话、代理或浏览器环境问题重启浏览器,对比证书序列号和颁发者
IPv4 和 IPv6 返回不同证书不同入口节点配置不一致将两组检测结果一并反馈给服务方
证书本身未过期,但链验证失败中间证书或信任库问题检查完整证书链和系统根证书库

服务端问题应如何反馈

如果可以稳定复现服务端证书过期,反馈时最好附上:

  • 出错域名和完整 URL
  • 错误发生时间及所在时区
  • openssl s_client 的验证结果
  • 证书的 Subject、Issuer、序列号和完整 notAfter
  • DNS 解析得到的 IP 地址
  • 使用的网络环境
  • IPv4、IPv6 是否都能复现
  • 浏览器错误码 NET::ERR_CERT_DATE_INVALID

证书续期和部署只能由域名或服务端的管理方完成。客户端刷新页面、重新安装浏览器或修改业务代码,都无法修复一张确实已经过期的服务器证书。

注意事项

不要在支付流程中忽略 TLS 错误,也不要通过跳过证书验证继续联调。下面的做法只能用于极少数隔离环境中的临时诊断,不应写入业务代码:

curl -k https://unitradeprod-sandbox.dl.alipaydev.com/

也不要在 SDK 或 HTTP 客户端中关闭证书校验。即使访问的是沙箱环境,关闭验证仍会掩盖中间人攻击、代理替换证书和服务端配置错误。

最终应根据服务器返回证书的完整 notAfter 时间、证书链验证结果和准确的本机时间作出判断,不能只比较浏览器界面显示的年月日。

备注:内容仅供参考。