You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:46:03