【发布时间】:2012-08-15 21:36:44
【问题描述】:
我正在尝试通过 Python 向 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 安装到某种证书存储中 - 在 Linux 中是否有一个等效项,我需要在使用它进行身份验证之前从中检索证书?感谢您的帮助 =)
【问题讨论】:
-
您的第二个代码示例是否遗漏了什么?我看不到您在哪里使用变量
cert_file。你在正确的轨道上,我怀疑你是对的,这是一个文件格式问题。 -
哎呀,修好了,谢谢你的收获。是的,msdn.microsoft.com/en-us/library/windowsazure/gg651127.aspx 提供的示例项目完美运行......我并不完全清楚证书的存储方式和 ssl auth 的工作方式,但我认为这可能与我获取证书和添加的方式有些摩擦它是导致问题的请求,考虑到它在示例中完成的花哨方式lol
标签: python ssl azure ssl-certificate