我想通过Python向Azure发出请求,列出我拥有的存储服务。如何验证对Windows Azure的管理服务请求?
我的基本代码是这样的:
import httplib
conn = httplib.HTTPSConnection('management.core.windows.net')
conn.request('GET', '/[subscription id]/services/storageservices/')
response = conn.getresponse()
print response.status response.reason
很显然,因为我没有验证,该打印出来403 Forbidden
于是,我跟着指示在http://msdn.microsoft.com/en-us/library/windowsazure/gg651127创建一个证书,给我cert.cer
。我将我的.cer
上传到我的Azure帐户,并将.cer
复制到我在其中使用Python的Linux VM中。我修改我的代码是:
import httplib
cert_file = '/path/to/cert.cer'
conn = httplib.HTTPSConnection('management.core.windows.net', cert_file = cert_file)
conn.request('GET', '/[subscription id]/services/storageservices/')
,并得到了错误:
ssl.SSLError: [Errno 336265225] _ssl.c:351: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib
下的印象,也许这是因为我试图用一个.cer
证书代替.pem
,并根据什么是here关于.pem和.cer的差异(他们是不同的扩展名相同的东西),我只是将我的.cer的扩展名更改为.pem,然后重试,得到相同的错误。
如何正确验证自己是否能够访问Azure以访问其API?这是我上传证书的问题,还是我需要对证书进行一些操作才能使其适合呈现给服务器?在Windows上,似乎我可以将.cer
安装到某种证书存储中 - 在使用它进行身份验证之前,我需要从中获取证书吗?感谢您的帮助=)
是你的第二个代码示例丢失了什么?我没有看到你在使用变量'cert_file'的位置。你在正确的轨道上,我怀疑你是对的,这是一个文件格式问题。 – smarx 2012-08-15 22:14:25
哎呦,修好了,谢谢你的收获。是的,在http://msdn.microsoft.com/en-us/library/windowsazure/gg651127.aspx提供的示例项目完美地工作...我不完全清楚证书如何存储和ssl身份验证的作品,但我认为这可能与我获得证书的方式有些摩擦,并且将它添加到引起问题的请求中,假设您想要坚持使用您生成的证书,请参考示例lol – 2012-08-15 22:21:07