使用Google App Engine上的PyCrypto从GameCenter导入公钥

时间:2015-01-07 01:58:34

标签: ios google-app-engine game-center pycrypto

我正在尝试使用Apple的文档化方法验证远程服务器上的GameCenter播放器:

GKLocalPlayer generateIdentityVerificationSignatureWithCompletionHandler:

在iOS上调用此方法会返回此文件的链接(此文件位置相当静态,您可以下载它以查看其内容):

https://sandbox.gc.apple.com/public-key/gc-sb.cer

此文件包含必须在服务器上下载的公钥,以开始本地GameCenter播放器的验证过程。

我正在为我的项目使用Google App Engine,这限制了我使用PyCrypto库。我正在尝试使用这些调用导入此文件(为了清楚起见,我在此处直接使用文件名):

from Crypto.PublicKey import RSA 

apple_cert = urllib2.urlopen("https://sandbox.gc.apple.com/public-key/gc-sb.cer").read()
rsakey = RSA.importKey(apple_cert) 

不幸的是,这失败了以下消息:

raise ValueError("RSA key format is not supported")

根据我的理解,PyCrypto期待一个DER格式的证书,这是我认为Apple提供的。有谁知道我做错了什么,或者能指出我正确的方向?感谢。

另外,我已经设置了我的GAE项目以使用最新版本的PyCrypto,我认为它是2.6。

使用Google App Engine进行GameCenter身份验证的过程非常麻烦。

1 个答案:

答案 0 :(得分:0)

事实证明,原因是从Apple下载的文件实际上是X.509证书。必须先从此证书中提取公钥,然后才能使用它。这个答案在类似的帖子中得到了证明:

How do I use a X509 certificate with PyCrypto?

有关使用Google App Engine验证GameCenter用户的完整解决方案,请参阅此帖子中的回答:

How to authenticate the GKLocalPlayer on my 'third party server'?