【问题标题】:SignedJwtAssertionCredentials on AppEngine doesn't recognize PEM keyApp Engine 上的 SignedJwt 断言凭据无法识别 PEM 密钥
【发布时间】:2013-08-01 12:06:51
【问题描述】:

appengine 上的 SignedJwtAssertionCredentials(使用 pycrypto 2.6)不支持 PKCS12 格式,因此我尝试改用 PEM 密钥,正如各处所建议的那样..

这是我的代码:

  f = file(os.path.join(os.path.dirname(__file__), KEY_FILE), "r")
  key = f.read()
  f.close()

  credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key,
      scope="https://www.googleapis.com/auth/drive"
  http = httplib2.Http()
  http = credentials.authorize(http)

KEY_FILE 是 PEM 密钥,使用以下命令转换:

openssl pkcs12 -in privatekey.p12 -nodes -nocerts > privatekey.pem

但我仍然收到此错误,好像它没有识别出这是 PEM 密钥:

NotImplementedError: PKCS12 format is not supported by the PyCrpto library. 
Try converting to a "PEM" (openssl pkcs12 -in xxxxx.p12 -nodes -nocerts > privatekey.pem) or using PyOpenSSL if native code is an option.

如果我只将文件名传递给构造函数(不读取文件内容),则会出现同样的错误

有什么想法吗?

【问题讨论】:

    标签: google-app-engine openssl pycrypto pem pkcs#12


    【解决方案1】:

    是的,该错误具有极大的误导性。你在做什么很好;只需从 PEM 文件中删除标头,使其以 -----BEGIN PRIVATE KEY----- 开头,或对其运行以下命令:

    openssl pkcs8 -nocrypt -in privatekey.pem -passin pass:notasecret -topk8 -out pk.pem
    

    【讨论】:

    【解决方案2】:

    对于那些感兴趣的人,我最终编写了一个关于如何在 App Engine 上将 Google+ Domains API 与 python 一起使用的简短教程,您可以在此处找到它: https://gist.github.com/vircheck/6292176

    也适用于其他基于服务帐号的API,如Drive API等。

    【讨论】:

    猜你喜欢
    • 2017-05-24
    • 2018-06-25
    • 2013-03-12
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    相关资源
    最近更新 更多