K2M*_*K2M 26 python ssl pycurl
我正在尝试编写pycurl脚本来访问安全站点(HTTPS).
c = pycurl.Curl()
c.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0')
c.setopt(pycurl.URL, 'https://for-example-securedsite')
c.setopt(pycurl.COOKIEFILE, 'cookie.txt')
c.setopt(pycurl.COOKIEJAR, 'cookies.txt')
c.setopt(pycurl.WRITEDATA, file("page.html","wb"))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误..
pycurl.error:(60,'SSL证书问题,验证CA证书是否正常.详细信息:\nerror:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败')
代码失败,因为它无法获得SSL证书.
如果我将以下行添加到我的代码中,则错误消失了.
c.setopt(pycurl.SSL_VERIFYPEER, 0)
c.setopt(pycurl.SSL_VERIFYHOST, 0)
Run Code Online (Sandbox Code Playgroud)
上面的代码将跳过证书验证.但它遭受了"中间人"攻击.
我知道我在本地证书库中有SSL证书.有谁知道如何导出我的证书并使用它我的代码..一些示例代码将是真棒..
谢谢你的时间!
Sum*_*man 24
你是对的,你这样做的方式让你受到中间人攻击,特别是考虑到最新的SSL漏洞.您可以按如下方式解决此问题:
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/updated-certificate-chain.crt")
curl.perform()
Run Code Online (Sandbox Code Playgroud)
curl默认带有过时的证书列表.无论您是要更新它还是仅使用自己的证书进行测试,请确保将updated-certificate-chain.crt文件放在可访问的位置,并使用pycurl.CAINFO选项指向它.
还要确保pycurl.SSL_VERIFYHOST设置为2,这是最高安全性检查设置.