質問

私はルビーを手に入れようとしています 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 Bindingsでそれを機能させる方法は私には明らかではありません。他の誰かがアイデアを持っていますか?

実行することで問題を確認できるはずです。

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で --enable-tlsext または0.9.8j以降)と電話 OpenSSL::SSL::SSLSocket#hostname = 'hostname'SSLSocket#connect. Net::HTTPS まだSNIをサポートしておらず、Open-uriはサポートしていません。

HTTPCLIENT開発リポジトリをチェックすると、SNIがサポートされるはずです。

すぐにリリースされたGem Realが必要かどうか教えてください...

他のヒント

Ruby 2.0は、TLS SNI(サーバー名表示)の問題に対処します。

net/httpから..

#        ...
#           s.session = @ssl_session if @ssl_session
#           # Server Name Indication (SNI) RFC 3546
#           s.hostname = @address if s.respond_to? :hostname=
#           Timeout.timeout(@open_timeout, Net::OpenTimeout) { s.connect }
#           if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
#             s.post_connection_check(@address)
#           end
#           ...

1.9.2(またはそれ以上)でこの作業を行うには、同様のパッチをnet/httpに適用します

#         ...
# BEGIN:  SNI PATCH http://bugs.ruby-lang.org/issues/4351
#          s.hostname = @address if s.respond_to? :hostname=
# END:   SNI PATCH http://bugs.ruby-lang.org/issues/4351
#          timeout(@open_timeout) { s.connect }
#          if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
#            s.post_connection_check(@address)
#          end
#        ...

参照:http://bugs.ruby-lang.org/issues/4351 http://en.wikipedia.org/wiki/server_name_indication

このキャンペーンを作成しました ハントを発行します SNIのRuby 1.8.7にバックポートに資金を提供することを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top