MacOS下如何将APNs证书转换为PEM文件并适配PyAPNs2?
解决APNs P12转PEM的OpenSSL错误并适配PyAPNs2
你遇到的错误是因为OpenSSL 3.0及以上版本默认禁用了RC2-40-CBC这类弱加密算法,而从钥匙串导出的P12文件大概率用了该算法加密,导致转换失败。以下是完整的解决流程:
一、重新导出无密码的P12文件(推荐)
- 打开钥匙串访问,切换到「我的证书」分类,找到你的APNs证书
- 右键证书选择「导出」,格式选「个人信息交换(.p12)」
- 导出时不要设置密码,直接点击「存储」——无密码的P12后续转换更顺畅,也符合PyAPNs2的使用要求
二、用OpenSSL转换为PEM格式
如果已经导出带密码的P12,或者不想重新导出,直接用兼容旧算法的命令:
openssl pkcs12 -in Certificates.p12 -out Certificates.pem -nodes -clcerts -legacy
-legacy参数会启用OpenSSL 3.0+默认禁用的旧加密算法,直接解决RC2-40-CBC不支持的问题- 执行后如果提示输入导入密码,输入你导出P12时设置的密码即可;如果没设密码直接回车
三、验证PEM文件有效性
转换完成后,打开Certificates.pem文件,确认内容包含-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----的完整块,没有乱码或错误内容。
四、适配PyAPNs2代码
用生成的PEM文件初始化APNs客户端即可,示例代码:
from pyapns2.client import APNsClient from pyapns2.payload import Payload # 初始化客户端,根据环境切换use_sandbox参数 client = APNsClient( cert_file='Certificates.pem', use_sandbox=True, # 测试环境设为True,生产环境设为False use_alternative_port=False ) # 构造推送 payload payload = Payload(alert="这是一条测试推送", sound="default") # 发送推送,替换为你的设备DeviceToken client.send_notification("你的设备DeviceToken", payload)
内容的提问来源于stack exchange,提问作者Vishakh
相关产品推荐
相关产品推荐

