我最近一直在考虑为我的一个应用程序制作 iOS 推送通知服务。它有一个 Python 2.7 后端,所以我想用 Python 而不是 PHP(或其他任何东西)来完成它。
我有发送通知并且设备接收通知的代码,但是每次运行该代码时,它都会要求我手动输入 PEM 文件的“密码短语”。
这并不理想,因为我希望这在服务器上全部自动化,当它需要发送通知时,它应该只发送它。我在 Python 2.7 的文档中找不到任何允许我在连接时自动从变量设置密码的内容。
如果有人知道如何在 Python 2.7 中做到这一点或任何其他想法,我将非常感激。
这是一段代码:
certfile = 'devPEM.pem'
apns_address = ('gateway.sandbox.push.apple.com', 2195)
s = socket.socket()
sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_SSLv3, certfile=certfile)
sock.connect(apns_address)
提前致谢。
因此,BorrajaX 建议的答案是在出现提示时不要为密钥设置密码。然而这是不可能的,因为(至少在我的 Mac 上)希望密码至少为 4 个字符。
解决此问题的步骤是:
- 在开发者门户中创建证书。
- 在“钥匙串访问”中本地下载并打开证书
- 从 Keychain Access 将证书的私钥导出为 .p12 文件(我将其命名为 aps_key.p12)。
- 在 .p12 密钥上运行以下命令:
openssl pkcs12 -nocerts -out aps_key.pem -in aps_key.p12
- 输入密码(我们将在一分钟内删除该密码)。
- 运行以下命令来删除密码:
openssl rsa -in aps_key.pem -out new_aps_key.pem
- 将开发者中心下载的.cer转换为.pem文件:
openssl x509 -in aps.cer -inform der -out aps.pem
- 将密钥和证书 .pem 文件与以下内容合并:
cat aps.pem new_aps_key.pem > final_aps.pem
- 您现在可以删除所有其他文件,除了
final_aps.pem
.
The final_aps.pem
然后,文件将使用上面的代码,而不会提示输入密码/密码短语。
这是一个有用的网站,我在其中找到了从 .pem 文件中删除密码的代码:http://www.sslshopper.com/article-most-common-openssl-commands.html
编辑:如果您不需要证书和密钥位于同一文件中,则可以忽略步骤 8 并使用aps.pem
and new_aps_key.pem
files.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)