如何做ssl socket编程

时间:2011-07-22 07:31:00

标签: 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);

     }

}

}

3 个答案:

答案 0 :(得分:19)

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

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

您可能想要添加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");

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

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

答案 1 :(得分:2)

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

创建SSLSocket时,首先需要配置用于验证服务器证书的信任存储。

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

握手成功完成后,您可以开始与服务器交换应用程序数据,就像其他普通套接字连接一样。

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

答案 2 :(得分:0)

Java有SSLSocket类。

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

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