2011-07-22 25 views
9

我正在通过以下IP地址进行套接字通信工作,但没有我想在ssl模式下进行通信,但是如何将InetAddress serverAddr = InetAddress.getByName("192.168.1.2");更改为SSL。如何做ssl套接字编程

public class TCPClient implements Runnable { 

    public void run() { 

    try { 

     InetAddress serverAddr = InetAddress.getByName("192.168.1.2"); 

      Log.d("TCP", "C: Connecting..."); 

      Socket socket = new Socket(serverAddr,12345); 

      String message = "Hello from Client android emulator"; 
       try { 

        Log.d("TCP", "C: Sending: '" + message + "'"); 

        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); 

        out.println(message); 

        Log.d("TCP", "C: Sent."); 

       Log.d("TCP", "C: Done."); 



     } catch(Exception e) { 

      Log.e("TCP", "S: Error", e); 
       } finally { 

        socket.close(); 

        } 
    } catch (Exception e) { 

      Log.e("TCP", "C: Error", e); 

    } 

} 

} 
+0

HTTPS是安全的HTTPS流量。您似乎正在编写一个原始套接字服务器。把它称为SSL。 –

+0

您*无法*'更改'InetAddress serverAddr = InetAddress.getByName(“192.168.1.2”)'到SSL.'这是一个IP地址查找。这个问题没有意义。你正在寻找的是'javax.net.ssl.SSLSocket'和朋友。 – EJP

回答

19

创建SSLSocket,而不是插座。休息是一样的。

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("192.168.1.2", 12345); 

您可能需要添加aditional SSL属性。你必须这样做:

要验证服务器,客户端的信任存储必须包含服务器的证书。带有服务器身份验证的客户端SSL由URL属性ssl或属性ssl设置为peerAuthentication启用。此外,该系统属性javax.net.ssl.trustStore中和javax.net.ssl.trustStorePassword中需要设置:

System.setProperty("javax.net.ssl.trustStore","clientTrustStore.key"); 
System.setProperty("javax.net.ssl.trustStorePassword","qwerty"); 

如果服务器客户端认证,客户端将需要一个密钥对和客户端证书:

System.setProperty("javax.net.ssl.keyStore","clientKeyStore.key"); 
System.setProperty("javax.net.ssl.keyStorePassword","qwerty"); 
+1

没有“如果客户想要认证服务器”。这在SSL中是强制性的。 – EJP

1

基本上你需要使用SSLSocket,它用于Java中的SSL通信。

在创建SSLSocket时,你首先需要配置信任存储这是验证服务器证书。

然后,你需要得到的SSLSocket并连接到服务器,然后开始做握手与服务器。

一旦握手成功完成,您就可以开始与其他普通套接字连接正常交换应用程序数据。

A HTTPS client and HTTPS server demo in Java提供了关于如何在Java中创建SSL服务器和SSL客户端的演示。这非常有用。