【问题标题】:python - getting SSL error when trying to scrape a webpagepython - 尝试抓取网页时出现 SSL 错误
【发布时间】:2018-07-24 15:21:33
【问题描述】:

我正在尝试使用 Python 抓取此网页: https://fftoolbox.scoutfantasysports.com/football/rankings/PrintVersion.php

我一直在使用 requests 包。我可以通过设置verify=False 来“解决”这个问题,但是我读到这并不安全。在其他线程中,人们说将requests.get() 函数指向相关证书的文件路径。我从浏览器中导出了证书,然后尝试了,但没有运气。这个

requests.get('https://fftoolbox.scoutfantasysports.com/football/rankings/PrintVersion.php',verify='C:/Users/ericb/Desktop/fftoolboxscoutfantasysportscom.crt')

仍然出现 SSL 错误

SSLError: HTTPSConnectionPool(host='fftoolbox.scoutfantasysports.com', port=443): Max retries exceeded with url: /football/rankings/PrintVersion.php (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),))

还有这个

requests.get('https://fftoolbox.scoutfantasysports.com/football/rankings/PrintVersion.php',cert='C:/Users/ericb/Desktop/fftoolboxscoutfantasysportscom.crt')

产量

Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')]

我以前做过大量的网络抓取,但直到现在我才不得不处理证书。我怎样才能解决这个问题?我还应该注意,我想将我的最终 Python 脚本和它使用的任何文件放到公共 GitHub 存储库中。但我不想做任何会危及我安全的事情,比如上传密钥或其他事情。

【问题讨论】:

  • 尝试向请求添加标头
  • 我试过了,但我仍然收到 SSL 错误

标签: python ssl web-scraping certificate


【解决方案1】:

服务器配置错误,它没有发送它需要发送的中间证书。 看到这个报告:https://www.ssllabs.com/ssltest/analyze.html?d=fftoolbox.scoutfantasysports.com&hideResults=on

提供的证书 1 个(1776 字节)

链问题不完整

https://sslanalyzer.comodoca.com/?url=fftoolbox.scoutfantasysports.com

受微软信任?否(无法获得本地颁发者证书)不受信任

受到 Mozilla 的信任?否(无法获得本地颁发者证书)不受信任

openssl s_client -connect fftoolbox.scoutfantasysports.com:443 -showcerts 可以看到:

Certificate chain
 0 s:/OU=Domain Control Validated/CN=fftoolbox.scoutfantasysports.com
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2

并且应该将网络服务器配置为发送/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2 中间证书,但它没有。

因此,您可以联系网站并告诉他们配置错误。正如第二个链接所示,您不会是唯一受此影响的人。

或者,您可以在本地将缺少的证书添加为完全受信任的证书,但这会降低您的安全性。您也可以在本地下载丢失的证书(不是网站的,中介的),并在您的requests.get调用中添加verify=/path/to/certificate

【讨论】:

  • 谢谢!我究竟如何下载中间证书?我是否必须按照请求文档 (docs.python-requests.org/en/master/user/advanced) 的说明“使用 OpenSSL 提供的 c_rehash 实用程序”处理目录?
  • 您应该可以在 CA 网站上找到证书。是的,如果您将其存储在系统位置,您将需要 c_rehash
猜你喜欢
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多