我正在尝试让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#connect
。 Net::HTTPS
目前尚不支持SNI,open-uri还不支持。
check out httpclient开发存储库应支持SNI。
让我知道您是否需要尽快发布真正的 gem ...
关于ruby - Net::HTTP中的服务器名称指示支持?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4685736/