JDK 7と8はopensourceなので、原則として必要な新しいコードをバックポートして独自のバージョンをビルドすることができます(7.5と呼んでください)。 /公式のjava7 JREしかし、相当数のランタイムシステムやアプリケーション、特にビジネスクリティカルなアプリケーションについて話しているのであれば、サポートするのは面倒かもしれません。 と同じことをやってみることができます。また、java8の新機能と同じ理由で、 'underneath'というドキュメントに基づいています。具体的にあなたがSSLServerSocket
かSSLSocket(client=false)
インタフェース「シンプル」を使用している場合:
(TCPコネクションを自分(明示的またはSSLServerSocketの交換で)
はのClientHelloを読み、作品を解析を受け入れる秒)あなたは、このデータを記憶しているSocket
のためのラッパーを作成SNI拡張
、すなわちたいとread
が最初に戻って、それを呼ばれたときにものClientHelloとを含むbyte[]
のようなものを持っていますClientHello既読とwrite
及び他の操作が
このラッパーソケット「上に」サーバー側SSLSocket
を作成するなどの通常の動作及び通常
として使用しながら、その後、実際のソケットから読み出します例えばX509KeyManager
コールバックで、[SSL]Socket
からExtendedSSLSession
を見るのではなく、Socket
をラッパーソケットにダウンキャストして見て、SNIを取得したいとします。 (あなたがjava8に入手できますときに、それ自体を遮断socket instanceof MyWrapper
でこの条件にすることができます。)
をあなたはSSLEngine
インタフェースを使用している場合は、すでに接続およびI/O、あなたのように管理しています最初の入力(ClientHello)をSSLEngine
に送ってそれを解析してラッパーで覚えておく前に、2、3A、および5を実行するだけで済みます。
[サーバー名表示(SNI)を実装する方法](http://stackoverflow.com/q/5113333)、[SNIを使用して複数のドメインを1つのボックスに表示する](http://stackoverflow.com/q/22373332)、[SSL_CTX_set_tlsext_servername_callbackコールバック関数が呼び出されていません](http://stackoverflow.com/q/22607121)を参照してください。 – jww
申し訳ありませんが、この情報をどのように使用することができますか教えてください。彼らはSSL_get_servernameを使用しているように思えますが、これはJava 7の実装を見つけることを望んでいると思いますか?ありがとう! –
これはOpenSSLコールです。なぜ質問にOpenSSLタグがあるのですか? – jww