使用M2Crypto:
from M2Crypto import SSL
ctx = SSL.Context('sslv3')
ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, depth=9)
if ctx.load_verify_locations('ca.pem') != 1:
raise Exception('No CA certs')
c = SSL.Connection(ctx)
c.connect(('www.google.com', 443)) # automatically checks cert matches host
c.send('GET/\n')
c.close()
使用urllib2_ssl(不用说,但要明确:需要您自担风险使用它):
import urllib2, urllib2_ssl
opener = urllib2.build_opener(urllib2_ssl.HTTPSHandler(ca_certs='ca.pem'))
xml = opener.open('https://example.com/').read()
相关:Making HTTPS Requests secure in Python。
使用pycurl
:
c = pycurl.Curl()
c.setopt(pycurl.URL, "https://example.com?param1=val1¶m2=val2")
c.setopt(pycurl.HTTPGET, 1)
c.setopt(pycurl.CAINFO, 'ca.pem')
c.setopt(pycurl.SSL_VERIFYPEER, 1)
c.setopt(pycurl.SSL_VERIFYHOST, 2)
c.setopt(pycurl.SSLVERSION, 3)
c.setopt(pycurl.NOBODY, 1)
c.setopt(pycurl.NOSIGNAL, 1)
c.perform()
c.close()
要实现 '证书拼接' 不同的领域提供不同的'ca.pem'
。
来源
2011-12-14 00:24:23
jfs
使用pycurl看起来似乎!这是一个可怕的包装,但它做到了这一点,而且比其他替代方案更加强大。现在测试它,它似乎工作(即将添加CURLOPT_CERTINFO支持,但似乎并没有与pycurl行为)。 – 2011-12-14 03:14:03