2011-12-08 7 views
8

私のアプリが暗号化なしでトークする前に、STARTTLSを発行してから、ソケットをアップグレードしてから暗号化するようにします。ポート(例:5222)に接続し、STARTTLSを使用してjavaを使用してTLSをリクエストできますか?もしそうなら、どのソケットオブジェクトを使用するべきですか?Javaソケットを発行開始後に暗号化する

答えて

9

もちろん可能です。既存の正規のjava.net.Socketラップソケットを作成するためにあなたのSSLSocketFactoryを使用します。

SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(
     socket, 
     socket.getInetAddress().getHostAddress(), 
     socket.getPort(), 
     true); 
5

月の答えは参考になりました(と私はそれに投票した)が、私はそれがために働いて得るためにそれを少し微調整しなければなりませんでした@私:

SSLSocket sslSocket = (SSLSocket) ((SSLSocketFactory) SSLSocketFactory.getDefault()).createSocket(
         socket, 
         socket.getInetAddress().getHostAddress(), 
         socket.getPort(), 
         true); 
InputStream inputStream = sslSocket.getInputStream(); 
OutputStream outputStream = sslSocket.getOutputStream(); 
// reads from the socket 
Scanner scanner = new Scanner(inputStream); 
// writes to the socket 
OutputStream outputStream = new BufferedOutputStream(outputStream); 

1

ここで可能な改善だポート587上でJava 7やGmail(smtp.gmail.com)でテスト:あなたのコードではなく、クライアント側のサーバー側のためである場合は、これを追加し、正常に動作します:

sslsocket.setUseClientMode(false); 
sslsocket.startHandshake();