如何做ssl socket编程

我正在通过以下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); } } } 

创建SSLSocket而不是Socket。 rest是一样的。

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

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

要对服务器进行身份validation,客户端的信任存储区必须包含服务器的证书。 具有服务器身份validation的客户端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"); 

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

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

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

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

然后,您需要获取SSLSocket并连接到服务器,然后开始与服务器进行握手。

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

Java中的HTTPS客户端和HTTPS服务器演示提供了有关如何使用Java创建SSL服务器和SSL客户端的演示。 这非常有用。

Java有SSLSocket类。

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

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