Python中的SSLSocket密码/密码

时间:2012-12-03 17:38:36

标签: python ios ssl python-2.7 push-notification

我一直在考虑为我的某个应用程序制作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)

提前致谢。

1 个答案:

答案 0 :(得分:18)

因此,BorrajaX建议的答案是在提示时不为密钥设置密码。但是这是不可能的(至少在我的Mac上)要密码至少4个字符。

解决此问题的步骤是:

  1. 在开发人员门户中创建证书。
  2. 在Keychain Access
  3. 中本地下载并打开证书
  4. 将证书的私钥从Keychain Access导出为.p12文件(我将其命名为aps_key.p12)。
  5. 在.p12键上运行以下命令:
    openssl pkcs12 -nocerts -out aps_key.pem -in aps_key.p12
  6. 输入密码(我们将在一分钟内删除)。
  7. 运行以下内容以删除密码:
    openssl rsa -in aps_key.pem -out new_aps_key.pem
  8. 将从开发人员中心下载的.cer转换为.pem文件:
    openssl x509 -in aps.cer -inform der -out aps.pem
  9. 使用以下内容合并密钥和证书.pem文件:
    cat aps.pem new_aps_key.pem > final_aps.pem
  10. 您现在可以删除除final_aps.pem
  11. 以外的所有其他文件

    final_aps.pem文件然后使用上面的代码,而不会提示输入密码/密码短语。

    这是一个有用的网站,我找到了从.pem文件中删除密码的代码:http://www.sslshopper.com/article-most-common-openssl-commands.html

    编辑:如果您不需要同一文件中的证书和密钥,则可以忽略第8步并使用aps.pemnew_aps_key.pem文件。