2016-08-19 1 views
-1
Socket fromServer = new Socket("host", 443); 

    SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
    SSLSocket sslsocket = (SSLSocket) factory.createSocket(fromServer, null, true); 
    sslsocket.setUseClientMode(true); 

私はそれを試してみたが、得る "javax.net.ssl.SSLException:受信致命的なアラート:INTERNAL_ERROR" 私はのSSLSocketを使用している場合ハンドシェイクの前にSSLSocketで書き込む方法は?

直接それは動作(factory.createSocket( "ホスト"、443);)

追加: コード作品: は、私は握手する前にカスタムヘッダーを追加し、ため

ADD2は、カスタムプロトコルを実装する必要があります!それは私の失敗、私はSNIのサーバーでテストする

+0

達成したいことは何ですか? – Fildor

+0

Fildor、カスタムプロトコルのカスタムヘッダーを追加 – inter

+0

ここをクリックしてください:http://blog.trifork.com/2009/11/10/securing-connections-with-tls/ – Fildor

答えて

3

TLS接続内のデータを転送するSSLSocket。データを転送する前にTLS接続を確立する必要があります。つまり、ハンドシェイクが正常に完了する必要があります。したがって、ハンドシェイクがTCP接続が確立される前にTCPソケットに書き込むのと同じ方法で完了する前に、SSLSocketに書き込むことは意味がありません。

追加:私は、この情報は質問がより理にかなって追加しまった後に握手する前にカスタムヘッダーを追加し、ためのカスタムプロトコル

を実装する必要があります。暗号化されていないデータを交換した後、SMTP + STARTTLSなどでTLSにアップグレードする必要があるようです。この場合は、最初に通常のTCP接続を確立し、後でそれをTLSにアップグレードする必要があります。後者の方法については、Is it possible to change plain socket to SSLSocket?を参照してください。

+0

私はそれを知っています。カスタムプロトコルを実装するために、ハンドシェイクの前にカスタムヘッダーを追加する必要があります – inter

+0

あなたのプロトコルが安全な**と**安全でない通信を可能にするのであれば意味があります。両方のポートを同じポート上で処理したい場合は、裸にして、SSL/TLSを使用することに同意するとすぐにTLSを開始することができます。例はSMTPとなります... – Fildor

+0

Fildor、そうです。 – inter

関連する問題