【问题标题】:Mechanize Hostname Matching机械化主机名匹配
【发布时间】:2016-07-17 23:03:29
【问题描述】:

我正在使用 Mechanize 抓取网站并收到与主机名不匹配相关的错误。我发现问题的根源是我正在抓取的网站上使用了 SNI,我想指定主机名以确保使用正确的证书。

这是我目前的设置:

agent = Mechanize.new
agent.user_agent = custom_user_agent
agent.verify_mode = OpenSSL::SSL::VERIFY_PEER

page = agent.get "website.com"

这是我认为我需要添加的内容(或类似的内容)以确保使用正确的证书:

OpenSSL::SSL::SSLSocket.hostname = "website.com"

这可以在 Mechanize 中完成吗,还是我需要弄清楚如何手动指定要使用的证书?

就上下文而言,我知道VERIFY_NONE 解决方案,但考虑到它引入的漏洞,我更愿意避免使用它。

【问题讨论】:

标签: ruby ssl mechanize sni


【解决方案1】:

您无需指定主机名或使用 Mechanize 检查主机名。

Ruby 的 Net::HTTP 为您处理它:

https://github.com/ruby/ruby/blob/trunk/lib/net/http.rb#L928

如果主机名不匹配,将引发 OpenSSL::SSL::SSLError 异常。

【讨论】:

  • 有趣。所以主机名不匹配问题是随机发生的,我听说 SNI 问题可能会导致这种情况。如果主机名规范不是问题,你知道我该如何调试这个问题吗?
  • 如果你想去掉 Ruby 你可以使用 openssl 来调试它。正确的 SNI 设置应该以 openssl s_client -connect example.com:443 失败,然后如果您指定 -servername example.com 则成功。如果它持续或间歇性地失败,那么这就是服务器的问题。假设您不控制服务器,您可以联系所有者/管理员并要求他们修复其 SSL 设置。
  • 它似乎只是在 Mechanize 中间歇性地失败。我在使用 openssl 时确实注意到了一个错误:verify error:num=19:self signed certificate in certificate chain。这会导致 Mechanize 出现间歇性故障吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
相关资源
最近更新 更多