首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pycurl和SSL证书

pycurl和SSL证书
EN

Stack Overflow用户
提问于 2011-12-01 04:40:02
回答 3查看 42.9K关注 0票数 27

我正在尝试写一个pycurl脚本来访问一个安全的站点(HTTPS)。

代码语言:javascript
复制
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证书是否正常。详细信息:\n错误:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate验证失败‘)

代码失败,因为它无法获取SSL证书。

如果我将下面几行代码添加到我的代码中,错误就会消失。

代码语言:javascript
复制
c.setopt(pycurl.SSL_VERIFYPEER, 0)   
c.setopt(pycurl.SSL_VERIFYHOST, 0)

以上代码将跳过证书验证。但是它受到了“中间人”的攻击。

我知道我的本地证书库中有SSL证书。谁知道如何导出我的证书并使用它我的代码..一些示例代码将是非常棒的。

耽误您时间,实在对不起!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-26 00:05:04

你是对的,你这样做会让你受到中间人的攻击,特别是在most recent SSL vulnerabilities的情况下。您可以按如下方式进行解析:

代码语言:javascript
复制
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带有过期的证书列表。无论您是想要更新它,还是只想使用您自己的证书进行测试,都要确保将更新的-certificate-chain.crt文件放在一个可访问的位置,并使用pycurl.CAINFO选项指向它。

还要确保将pycurl.SSL_VERIFYHOST设置为2,这是最高的安全检查设置。

票数 24
EN

Stack Overflow用户

发布于 2011-12-01 04:43:36

您读过cURL documentation about SSL certificates吗?这似乎直接解决了您的question...in问题,第2项:

代码语言:javascript
复制
 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选项,所以在代码中实现起来应该很简单。

票数 1
EN

Stack Overflow用户

发布于 2021-05-26 09:24:22

这个问题的解决方案在于通过不安全参数In a cmd terminal we exclusively input the arg '-k'提供对基于'https‘的协议url的curl对象访问

在Pycurl中,我们必须通过下面的方法为curl对象设置相同的选项,并设置最低的安全级别,即'0‘。

代码语言:javascript
复制
c.setopt(pycurl.SSL_VERIFYPEER, 0)   
c.setopt(pycurl.SSL_VERIFYHOST, 0)

allow the insecure connection之后,就可以毫无障碍地访问SSL了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8332643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档