服务器端如何更新AAACertificateServices根证书 保障PHP脚本正常发送APNS推送
自研PHP脚本适配APNS AAACertificateServices根证书的配置方案
异常根因说明
当前出现的「接口返回成功但设备无法接收推送」的状态,是两类问题叠加导致:
- 服务端SSL信任库未新增2020年5月12日版本的AAACertificateServices根证书,不满足苹果APNS HTTP/2连接的接入规则
- 脚本为规避前期SSL报错,关闭了curl的证书校验逻辑,绕过了证书不匹配的连接异常,最终出现请求发送的假成功状态
核心配置要求
- 无需重新申请或替换你自行向苹果签发的APNS SSL Provider证书、推送鉴权Key,本次更新仅涉及服务端SSL信任库的根证书配置
- 信任库必须同时保留原有GeoTrust Global CA、新增AAACertificateServices两套根证书,禁止直接移除旧根证书,满足苹果的平滑过渡兼容要求
- 必须开启PHP侧的SSL校验逻辑,禁止通过关闭校验的方式规避报错,否则会持续出现假成功的异常
分场景落地步骤
场景1:PHP脚本中手动指定了自定义CA信任文件
这类情况一般是curl配置中显式设置了CURLOPT_CAINFO参数,指向自定义的PEM格式根证书文件
- 打开该自定义根证书PEM文件,完整保留原有所有证书内容(包含旧GeoTrust Global CA的证书块)
- 将AAACertificateServices根证书的PEM内容追加到该文件末尾
- 保存文件后无需调整脚本其他参数,配置即可生效
场景2:PHP脚本未手动指定CA路径,使用系统默认信任库
根据操作系统差异执行对应操作:
- Debian/Ubuntu 系服务器:
- 将AAACertificateServices根证书的PEM文件放置到
/usr/local/share/ca-certificates/目录,设置文件权限为644 - 执行
update-ca-certificates命令刷新系统全局信任库
- 将AAACertificateServices根证书的PEM文件放置到
- CentOS/RHEL 系服务器:
- 将AAACertificateServices根证书的PEM文件放置到
/etc/pki/ca-trust/source/anchors/目录 - 执行
update-ca-trust extract命令刷新系统全局信任库
- 将AAACertificateServices根证书的PEM文件放置到
配置校验流程
- 核查PHP curl基础配置,确认两项参数符合规则:
CURLOPT_SSL_VERIFYPEER设置为trueCURLOPT_SSL_VERIFYHOST设置为2
若此前为跳过校验将两项设为false/0,必须修正为开启状态
- 执行基础连通性校验:在服务器终端发起对APNS生产接口
https://api.push.apple.com的TLS握手请求,确认无SSL证书报错 - 运行自研PHP推送脚本发送测试通知,确认目标设备可正常接收推送
内容的提问来源于stack exchange,提问作者Crazy Developer
相关产品推荐
相关产品推荐

