Skip to content

更新信任存储适配苹果APNs新根证书

问题描述

苹果公司公告 APNs 服务将于 2025 年更新根证书:

  • 测试环境(Sandbox):2025年1月20日
  • 生产环境(Production):2025年2月24日

此次变更要求开发者将新根证书 USERTrust RSA Certification Authority 添加到服务器的信任存储中,否则会导致 APNs 推送服务中断。

开发者主要疑问包括:

  1. 是否需要更新 iOS 客户端应用?是否需要提交 App Store 审核?
  2. "信任存储" 位于客户端还是服务端?在 Keychain Access 中如何操作?
  3. 使用第三方服务(如 Firebase Cloud Messaging)是否需要操作?
  4. 公告中的 "APNs SSL provider certificates" 如何处理?

核心概念

信任存储(Trust Store)是存储可信根证书的数据库。服务端代码通过它验证证书链的合法性。

解决方案

情况一:通过中介服务(如 FCM)发送推送

WARNING

解决方案:无需任何操作

  • Google Firebase Cloud Messaging (FCM) 等中介服务已自行处理证书更新
  • 推送流程:您的服务器 → FCM → APNs
  • 您只需确保与中介服务的连接正常

情况二:服务器直连 APNs

需立即操作

若你的服务器直接向 APNs 发送推送请求(基于 HTTP/2 API)

步骤 1:验证系统是否包含新根证书

  • 新证书 SHA-256 指纹:
    AC:3B:4E:5C... (详见 苹果公告

检查证书是否存在于操作系统信任库:

bash
# Linux 示例(Ubuntu 22.04+)
ls -l /etc/ssl/certs/USERTrust_RSA*.pem

# 查看证书详情
openssl x509 -in /etc/ssl/certs/USERTrust_RSA_Certification_Authority.pem -text -noout

步骤 2:测试与 APNs 的连接

使用 OpenSSL 验证证书信任链:

bash
# 测试沙箱环境连接
openssl s_client -connect 17.188.143.34:443 \
  -servername api.sandbox.push.apple.com \
  -verifyCAfile /path/to/USERTrust_RSA_Certification_Authority.crt \
  -showcerts
输出验证要点
  • 命令末尾出现 Verify return code: 0 (ok)
  • 证书链包含 USERTrust RSA Certification Authority

步骤 3:操作系统信任库更新(如需)

若证书缺失,手动导入:

bash
# 下载根证书(苹果官网提供)
curl -O https://valid.cert.source/SHA-2 Root USERTrust RSA Certification Authority.crt

# 导入到系统信任库
sudo cp "SHA-2 Root USERTrust RSA Certification Authority.crt" /usr/local/share/ca-certificates/
sudo update-ca-certificates

关键问题澄清

  1. iOS客户端是否需要更新?
    ❌ 不需要。iOS设备使用系统内置的证书信任机制,升级到最新iOS版本即自动支持。

  2. APNs SSL provider certificates 需要更新吗?
    ❌ 不需要。苹果明确说明:"不需要更新已签发的APNs SSL提供者证书"

  3. 需要重新提交 App Store 审核吗?
    ❌ 不需要。此变更不影响客户端二进制文件。

  4. Keychain Access 的用途?
    仅用于管理客户端/开发者机器的本地证书,不影响服务端运行。

操作期限

环境最后操作截止日期
沙箱测试2025年1月20日前
生产环境2025年2月24日前

最佳实践

  • 提前至少1个月完成验证
  • 同时保留新旧证书直到过渡期结束
  • 监控服务日志,关注证书验证错误(如 SSL handshake failed

参考资源:
苹果官方公告
OpenSSL文档