【发布时间】:2012-05-13 11:52:54
【问题描述】:
我需要使用我们公司授权机构签署的证书对服务器进行 HTTPS 调用。如何配置 python 以信任此证书颁发机构?
【问题讨论】:
-
这不是如何制作 https/ssl 而是如何添加受信任的权限
标签: python ssl https certificate
我需要使用我们公司授权机构签署的证书对服务器进行 HTTPS 调用。如何配置 python 以信任此证书颁发机构?
【问题讨论】:
标签: python ssl https certificate
默认情况下(假设您使用的是httplib.HTTPSConnection),您无需执行任何操作,这就是httplib doesn't do any certificate verification(same applies to urllib)。
当然,这不是一个好方法,您应该验证服务器证书。对此有多种解决方案(请参阅this question)。
简而言之,您可能需要手动扩展 httplib.HTTPConnection 以通过 ssl.wrap_socket 将套接字转换为 SSL 套接字,以便能够插入验证回调(您需要验证主机名和证书)。
或者,如果您不受httplib 的限制,使用PycURL 肯定会让这个更干净。您可以将CA_INFO(或CA_PATH)配置为指向您的内部CA 证书。此外,它通常没有预定义的 CA 列表,但您可以从 here(从 Mozilla 列表转换而来)获取一份证书,并在需要时将这些证书添加到您信任的 CA 列表中。
【讨论】:
如果您正在寻找解决此问题的示例代码,请查看PycURL:
import pycurl
curl = pycurl.Curl()
curl.setopt(pycurl.URL, "https://your-secure-website.com/")
curl.setopt(pycurl.SSL_VERIFYPEER, 1)
curl.setopt(pycurl.SSL_VERIFYHOST, 2)
curl.setopt(pycurl.CAINFO, "/path/to/your-corporate-certificate-chain.crt")
curl.perform()
确保将 your-corporate-certificate-chain.crt 文件放在可访问的位置,并使用 pycurl.CAINFO 选项指向它。
【讨论】: