10

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.

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

任何想法?

4

2 回答 2

17

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

openssl pkcs8 -nocrypt -in privatekey.pem -passin pass:notasecret -topk8 -out pk.pem
于 2013-08-04T12:14:30.237 回答
6

对于那些感兴趣的人,我最终编译了一个关于如何在 App Engine 上使用带有 python 的 Google+ Domains API 的简短教程,你可以在这里找到它: https ://gist.github.com/vircheck/6292176

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

于 2013-08-21T13:22:11.830 回答