pycurl和SSL证书
问题描述:
我正在尝试编写一个pycurl脚本来访问安全站点(HTTPS)。pycurl和SSL证书
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"))
我提示以下错误:..
pycurl.error:(60“SSL证书问题,验证该CA证书是OK详细信息:\ n错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE :证书验证失败')
代码失败,因为它未能获得SSL证书。
如果我将下面几行添加到我的代码中,错误就消失了。
c.setopt(pycurl.SSL_VERIFYPEER, 0)
c.setopt(pycurl.SSL_VERIFYHOST, 0)
上述代码将跳过证书验证。但它受到'中间人'的攻击。
我知道我在本地证书存储中有SSL证书。有谁知道如何导出我的证书,并使用它我的代码..一些示例代码将是真棒..
感谢您的时间!
答
你是对的,你这样做的方式使你受到中间人攻击,特别是在most recent SSL vulnerabilities的光照下。您可以按如下方式解决:
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()
curl默认情况下会附带过期的证书列表。无论您想更新它还是仅使用您自己的证书进行测试,请务必将updated-certificate-chain.crt文件放在可访问的位置,并使用pycurl.CAINFO选项指向它。
还要确保pycurl.SSL_VERIFYHOST设置为2,最高安全检查设置。
答
您是否阅读过cURL文档about SSL certificates?这似乎直接解决你的问题......特别是,第2项:
2. Get a CA certificate that can verify the remote server and use the proper
option to point out this CA cert for verification when connecting. For
libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath);
它看起来像pycurl模块包含CAPATH
选项,所以这应该是简单的在你的代码来实现。
感谢您的回复..我阅读文章..然后我试图通过使用curl.exe以下选项获得证书.. curl.exe --cacert test.crt https:// secure-site/..我得到了以下错误..“卷曲:(1)协议HTTPS不支持或禁用libcurl”..任何想法如何解决它? – K2M
我下载了卷曲源并建立在我自己的..刚刚得到一个URL,我可以下载易于构建的Curl.exe“http://curl.haxx.se/latest.cgi?curl=win32-ssl-devel- msvc“..我会探讨的! – K2M