You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不关闭SSL验证的前提下爬取网站,解决证书验证失败问题

问题根源

从curl测试结果可直接定位错误原因:目标网站的SSL证书已过期,默认的SSL校验流程会拦截不符合有效性要求的请求,和你的Ruby代码逻辑无关。

解决方案(均不关闭SSL全局验证)

场景1:你可控制目标网站配置

  • 直接为目标域名申请并部署新的有效SSL证书即可,证书生效后删除原有代码中的ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE配置,即可正常运行。

场景2:你无法修改目标网站的证书配置

这种场景下要通过SSL校验,只需单独信任该目标网站的过期证书即可,不会影响其他站点的SSL验证逻辑,操作步骤如下:

  1. 导出目标网站的证书文件,执行命令:
    openssl s_client -connect mywebsiteurl.com:443 -servername mywebsiteurl.com < /dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > mywebsite.crt
  2. 修改Ruby代码,指定校验时使用你导出的证书:
require 'httparty'
require 'nokogiri'
require 'open-uri'
require 'openssl'

# 替换为你导出的证书文件实际路径
cert_store = OpenSSL::X509::Store.new
cert_store.add_file('/path/to/your/mywebsite.crt')

page = open("https://mywebsiteurl.com", ssl_cert_store: cert_store)
doc = Nokogiri::HTML(page)
puts doc

提示:该方案仅针对单个目标站点信任其证书,不会全局关闭SSL验证,安全性远高于直接关闭SSL校验。仅建议你确认目标站点可信时使用该方案,陌生站点手动信任过期证书存在安全风险。

内容的提问来源于stack exchange,提问作者SkRoR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:45:09