如何做ssl socket编程

Qai*_*ood 10 java ssl

我正在通过以下IP地址进行套接字通信,但是我不想在ssl模式下进行通信但是如何更改InetAddress serverAddr = InetAddress.getByName("192.168.1.2");为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);

     }

}

}
Run Code Online (Sandbox Code Playgroud)

zac*_*usz 19

创建SSLSocket而不是Socket.休息是一样的.

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("192.168.1.2", 12345);
Run Code Online (Sandbox Code Playgroud)

您可能希望添加aditional SSL属性.你必须做得更早:

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

System.setProperty("javax.net.ssl.trustStore","clientTrustStore.key");
System.setProperty("javax.net.ssl.trustStorePassword","qwerty");
Run Code Online (Sandbox Code Playgroud)

如果服务器进行客户端身份验证,则客户端将需要密钥对和客户端证书:

System.setProperty("javax.net.ssl.keyStore","clientKeyStore.key");
System.setProperty("javax.net.ssl.keyStorePassword","qwerty");
Run Code Online (Sandbox Code Playgroud)


S.L*_*ica 0

Java 有 SSLSocket 类。

http://download.oracle.com/javase/1.4.2/docs/api/javax/net/ssl/SSLSocket.html

希望这有帮助,我自己还没有使用过。