我正在尝试让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版本(带有--enable-tlsext的0.9.8f或0.9.8j或更高版本),并在OpenSSL::SSL::SSLSocket#hostname = 'hostname'之前调用SSLSocket#connectNet::HTTPS目前尚不支持SNI,open-uri还不支持。

check out httpclient开发存储库应支持SNI。

  • https://github.com/nahi/httpclient

  • 让我知道您是否需要尽快发布真正的 gem ...

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

    10-12 14:26
    查看更多