gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:08 26 4
gpt4 key购买 nike

我正在尝试让 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com