转载:http://blog.csdn.net/yanglei3kyou/article/details/78840222
阐述
最近有许多证书将要过期,趁着有时间赶紧将公司的证书全部梳理一遍。在对百度推送进行证书更新时,出现了“证书无效”的错误(去年更新的时候也没出现问题),折腾好几天才解决掉。记录一下,并辟谣许多错误的说法(不让大家走弯路)。
探讨
首先感谢一下 “控记我记几”,在他的博文中所提出的解决方法很有效果。
- openssl 版本问题
博主指出百度推送不接受 openssl 版本高于0.9.8 所生成的pem, 查了一下现在的系统是macOS High Sierra 10.13.2,opensll 版本为 2.2.7。
故感觉问题可能出在这个地方。
解决方法:
1 至 openssl 官网下载0.9.8zh版本https://www.openssl.org/source/old/0.9.x/
2 解压下载的压缩包
3 通过Terminal (终端) 进入刚才解压目录
4 Terminal (终端) 执行命令
[plain]view plaincopy
./Configure darwin64-x86_64-cc --prefix=/usr/local/openssl —shared
Tip: 这一步执行完后手动到 /usr/local/ 目录下查看是否有一个openssl 文件夹,如果没有则说明当前用户没有权限来创建 openssl 文件夹,此时我们手动在这个目录下创建 openssl 文件夹,然后再次执行上面的命令
5 Terminal (终端) 执行命令
[plain]view plaincopy
make && make install
6 此时 openssl (Unix可执行文件) 会出现在 /usr/local/openssl/bin/openssl 目录下, 我们用命令查看一下当前 openssl 版本
查看之后还是没有,还是因为文件权限的问题。
sudo chmod -R 777 /usr/local/openssl
使用上面的命令将权限改到最大。编译还是不好用,我把别人编译好的openssl直接放进去,然后使用,成功了。
[plain]view plaincopy
/usr/local/openssl/bin/openssl version
·将开发者账号后台的APN证书下载到本地,然后安装到MAC OS 的钥匙串。
·安装完成后找到安装好的APN证书,右键导出证书(非密钥)为P12文件,设置密码处不用输入。
7 执行百度推送所使用的命令
/usr/local/openssl/bin/openssl pkcs12 -in MyApnsCert.p12 -out MyApnsCert.pem -nodes
Tip: openssl 必须使用刚才所创建的 0.9.8zh 版本
辟谣
经过实际测试,发现以下几个说法不正确,大家勿信
说法一
名称为中文的P12所生成的Pem 不能通过验证错误
说法二
P12名称必须为 MyApnsCert.p12 且Pem名称必须为 MyApnsCert.pem, 否则不能通过验证错误
说法三
Keychain Access (钥匙串) 导出证书时,证书必须是收起状态(即不能显示专用密钥),否则不能通过验证错误
参考资料