如何在Node.js中使用aps.cer配置APN推送并解决证书报错?
解决Node.js中APN配置aps.cer证书报错及正确配置步骤
首先,你遇到的VError: Failed to generate token: error:0906D06C:PEM routines:PEM_read_bio:no start line报错,核心原因是你直接使用了苹果下载的aps.cer文件,而这个文件是DER二进制格式的,node-apn模块需要的是PEM文本格式的证书——PEM文件会有明确的-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----头尾标识,DER格式没有,所以模块无法解析。
第一步:将aps.cer转换为PEM格式证书
用OpenSSL工具执行以下命令,把下载的aps.cer转换成PEM格式的aps.pem:
openssl x509 -in aps.cer -inform der -out aps.pem
执行完后,你会得到一个带PEM头尾的文本证书文件,这才是node-apn能识别的格式。
第二步:修正你的APN配置代码
你当前的配置有两个关键错误:
key字段应该指向转换后的aps.pem,而不是原aps.cerkeyId和teamId填错了:keyId是你APN证书的10位Key ID(在苹果开发者账号的证书详情页可以找到),teamId是你的开发者团队ID(同样在账号的Membership页面查看,也是10位字符),不是App名称或团队名称。
修正后的配置代码如下:
let options = { token: { key: "aps.pem", // 改用转换后的PEM文件 keyId: "ABCDE12345", // 替换为你的证书Key ID teamId: "FGHIJ67890" // 替换为你的团队ID }, production: false // 开发环境保持false,注意对应下载的是开发版aps.cer };
额外的检查要点
- 确认证书环境匹配:如果
production: false,你需要下载开发环境的APN证书(苹果开发者后台里的"Apple Push Notification service SSL (Sandbox)"),而不是生产环境的证书;如果是生产环境,要把production设为true并对应生产证书。 - 检查证书有效期:确保你的APN证书没有过期,在开发者后台可以查看证书的有效时间。
- 验证Bundle ID一致性:证书关联的App Bundle ID必须和你推送目标App的Bundle ID完全一致。
- 开发环境下,确保测试设备的UDID已经添加到开发者账号的设备列表中,否则推送会失败。
内容的提问来源于stack exchange,提问作者croc_hunter
相关产品推荐
相关产品推荐

