ruby - Net::HTTP 中的服务器名称指示支持?

标签 ruby ssl https openssl sni

我正在尝试让 Ruby 的 Net::HTTP 实现与 SNI 一起工作。

mail.google.com 和 gmail.com 都位于同一个 IP 地址上,因此当通过 SSL 连接时,Google 服务器需要知道要使用哪个证书。默认情况下,它会返回 mail.google.com 证书,如果您尝试实现 WebFinger,这就是一个问题。

WebFinger 要求您检索 https://gmail.com/.well-known/host-meta 以获取 LRDD 信息,但是,出于安全原因,验证 SSL 证书至关重要信息。

由于 Google 在这种情况下提供默认的 mail.google.com 证书,因此 SSL post_connection_check 失败。此处正确的解决方案是为 Net::HTTP 启用服务器名称指示,但我不清楚如何使用 OpenSSL 的 Ruby 绑定(bind)来实现它。还有其他人有想法吗?

您应该能够通过运行看到问题:

require 'open-uri'
open('https://gmail.com/.well-known/host-meta') { |f| f.read }

我还创建了一个要点来展示使用早期版本的 curl 和 OpenSSL 的问题:

https://gist.github.com/7936ef38787092a22897

最佳答案

对于 SNI 支持,您需要更新的 OpenSSL 版本(0.9.8f with --enable-tlsext 或 0.9.8j 或更高版本)并调用 OpenSSL::SSL::SSLSocket# hostname = 'hostname'SSLSocket#connect 之前。 Net::HTTPS 还不支持 SNI,open-uri 也不支持。

检查 httpclient 开发库应该支持 SNI。

如果您现在需要真正发布的 gem,请告诉我...

关于ruby - Net::HTTP 中的服务器名称指示支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4685736/

相关文章:

ssl - 在长轮询期间刷新 NginX 的 SSL 缓冲区

Ruby:从散列返回带有[key,value]数组的数组副本

jquery - Ruby on Rails 项目时间选择器

qt - QNetwork TLS 可移植

redirect - Nginx 将 HTTP 重定向到 HTTPS,将 WWW 重定向到非 WWW

security - 使用MD5将密码安全地从前端发送到后端

ruby - 将 ruby​​ 方法从 method() 转换为 ().method

ruby - 是否有用于 Golang 风格持续时间解析的 Ruby 库?

ajax - CORS ajax 调用自签名安全 URL

security - 我是否在 API 中发现了安全问题,或者我只是不了解 SSL?