【问题标题】:SSLSocket passphrase/password in PythonPython中的SSLSocket密码/密码
【发布时间】:2012-12-03 17:38:35
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 当你生成 .pem 证书时...你给它一个密码了吗?因为如果是这样,那可能就是它要问的问题
  • @BorrajaX 是的,我知道了,我知道密码是什么。您是否应该能够在没有密码的情况下创建 .pem,因为我认为如果没有密码,我将无法创建它?
  • 是的,我不知道它在 iOS 中是如何完成的,但你应该可以给它一个空白密码(在提示输入时按 Enter 键)。让我知道它是否有效:-)
  • 因此通过 Mac 上的终端创建它,它要求密码至少为 4 个字符。我设法使用 openssl rsa -in privateKey.pem -out newPrivateKey.pem 从证书中删除密码。这似乎可以工作,但需要很长时间才能在设备上生成通知。 :(
  • 请注意,第一个似乎是侥幸。后来的几乎是即时的。 :D

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


【解决方案1】:

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

解决此问题的步骤是:

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

final_aps.pem 文件随后可以与上面的代码一起使用,而不会提示输入密码/密码短语。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 2021-01-21
    • 1970-01-01
    • 2017-12-17
    • 2021-04-15
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多