更新信任存储适配苹果APNs新根证书
问题描述
苹果公司公告 APNs 服务将于 2025 年更新根证书:
- 测试环境(Sandbox):2025年1月20日
- 生产环境(Production):2025年2月24日
此次变更要求开发者将新根证书 USERTrust RSA Certification Authority
添加到服务器的信任存储中,否则会导致 APNs 推送服务中断。
开发者主要疑问包括:
- 是否需要更新 iOS 客户端应用?是否需要提交 App Store 审核?
- "信任存储" 位于客户端还是服务端?在 Keychain Access 中如何操作?
- 使用第三方服务(如 Firebase Cloud Messaging)是否需要操作?
- 公告中的 "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
关键问题澄清
iOS客户端是否需要更新?
❌ 不需要。iOS设备使用系统内置的证书信任机制,升级到最新iOS版本即自动支持。APNs SSL provider certificates 需要更新吗?
❌ 不需要。苹果明确说明:"不需要更新已签发的APNs SSL提供者证书"需要重新提交 App Store 审核吗?
❌ 不需要。此变更不影响客户端二进制文件。Keychain Access 的用途?
仅用于管理客户端/开发者机器的本地证书,不影响服务端运行。
操作期限
环境 | 最后操作截止日期 |
---|---|
沙箱测试 | 2025年1月20日前 |
生产环境 | 2025年2月24日前 |
最佳实践
- 提前至少1个月完成验证
- 同时保留新旧证书直到过渡期结束
- 监控服务日志,关注证书验证错误(如
SSL handshake failed
)