2012-01-08 116 views
2

嘿,我试图在python中生成一个签名的url。基本上,我试图从Google App Engine服务器访问受保护的Amazon Cloudfront内容。亚马逊已经为我提供了有内容,它看起来像一个PEM文件:Google App Engine的RSA加密例程Python

----- BEGIN RSA私钥-----

MIICWQf ....多了很多字符... 7bx8WiUk

----- END RSA私钥-----

根据Getting started with secure AWS CloudFront streaming with Python,通过EVP生成签名URL作为这样:key = EVP.load_key_string(priv_key_string)。主要问题是Google App Engine不支持from M2Crypto import EVP。我试过Google搜索RSA加密例程Google App Engine,但还没有找到任何可行的模块。一个我偶然发现,Signing a string with RSA private key on Google App Engine Python SDK,说我可以用from tlslite.utils import keyfactory。但我仍然收到一个回复​​,表示No module named tlslite.utils

总之,我只是想知道是否有人知道是否在Google App Engine上执行RSA加密例程的模块。谢谢,你的帮助一如既往

+1

只要该库的源代码是纯Python或编译的Python,您可以在部署应用程序之前将其包含在您的目录中。 – bossylobster 2012-01-10 04:03:21

+1

例如,请参阅http://code.google.com/appengine/articles/python/retrieving_gdata_feeds.html – bossylobster 2012-01-10 04:09:52

+0

中的“使用gdata-python-client库”部分看起来tlslite是本地Python:http:// tlslite。 cvs.sourceforge.net/viewvc/tlslite/tlslite/ – bossylobster 2012-01-10 04:14:38

回答

1

正如bossylobster指出的那样,你可以做的是将你需要的RSA包作为你的应用程序的一部分,通过将包的源代码复制为应用程序中的子目录目录结构。这会作为您应用的另一部分上传到应用引擎服务。只要包仅使用应用引擎在生产中提供的那些标准库模块,它将按预期运行。目录结构最终看起来像这样:

mysite/ 
    app.yaml 
    main.py 
    urls.py 
    ... 
    tlslite/ 
     __init__.py 
     ... 
+0

谢谢,tlslite现在可以导入。我有一个简单的问题...我一直在试图导入M2Crypto(该文件夹包含__init__.py文件)。但是,其中的EVP.py要求子目录中的文件与M2Crypto(称为SWIG的文件夹)处于同一级别。因此,导入EVP会导致发现无法找到该文件的错误。有什么想法吗? – mrmo123 2012-01-12 15:55:41

+0

我一直在研究更多,为什么我无法导入EVP模块,并意识到这里有点超出范围。感谢您的帮助,虽然...我能够让tlslite工作。不幸的是,tlslite模块签名不适用于amazon cloudfront。 – mrmo123 2012-01-12 16:23:14

+0

不幸的是,它看起来像M2Crypto不是纯粹的Python - SWIG文件夹充满了C代码 - 所以它没有机会像在应用程序引擎上一样工作。请使用应用引擎提供的PyCrypto版本,http://code.google.com/appengine/docs/python/tools/libraries.html#PyCrypto,它可在应用引擎环境中使用。 – philofinfinitejest 2012-01-12 16:34:21