我正在尝试让 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 证书,因此 SSLpost_connection_check
失败。这里正确的解决方案是为 启用服务器名称指示Net::HTTP
,但我不清楚如何使用 OpenSSL 的 Ruby 绑定。还有人有想法吗?
您应该能够通过运行看到问题:
require 'open-uri'
open('https://gmail.com/.well-known/host-meta') { |f| f.read }
我还创建了一个要点,使用早期版本的 curl 和 OpenSSL 来展示问题: