将不安全的 Socket 转为安全的 Socket

本节提供的源代码的例子来说明如何使用 JSSE 将不安全的 Socket 连接转为安全的 Socket 连接。本节中的代码摘自本书 Java SE 6 Network Security(Marco Pistoia 等著)。

第一个例子是“没有 SSL 的 Socket 实例”的示例代码,可以使用不安全的 Socket 设置客户端和服务器之间的通信。此代码是在“使用 SSL 的 Socket 实例”上的例子做了修改。

没有 SSL 的 Socket 实例

下面是服务器端和客户端建立不安全 socket 连接。

在一个 Java 程序中,作为服务器和客户端使用 socket 交互,建立 socket 通讯类似是以下的代码:

  1. import java.io.*;
  2. import java.net.*;
  3. . . .
  4. int port = availablePortNumber;
  5. ServerSocket s;
  6. try {
  7. s = new ServerSocket(port);
  8. Socket c = s.accept();
  9. OutputStream out = c.getOutputStream();
  10. InputStream in = c.getInputStream();
  11. // Send messages to the client through
  12. // the OutputStream
  13. // Receive messages from the client
  14. // through the InputStream
  15. } catch (IOException e) { }

客户端使用 socket 来与服务器通讯,代码设置如下:

  1. import java.io.*;
  2. import java.net.*;
  3. . . .
  4. int port = availablePortNumber;
  5. String host = "hostname";
  6. try {
  7. s = new Socket(host, port);
  8. OutputStream out = s.getOutputStream();
  9. InputStream in = s.getInputStream();
  10. // Send messages to the server through
  11. // the OutputStream
  12. // Receive messages from the server
  13. // through the InputStream
  14. } catch (IOException e) { }

使用 SSL 的 Socket 实例

下面是服务器端和客户端建立安全 socket 连接。

在一个 Java 程序中,作为服务器和客户端使用安全的 socket 交互,建立 socket 通讯类似是以下的代码:

  1. import java.io.*;
  2. import javax.net.ssl.*;
  3. . . .
  4. int port = availablePortNumber;
  5. SSLServerSocket s;
  6. try {
  7. SSLServerSocketFactory sslSrvFact =
  8. (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
  9. s = (SSLServerSocket)sslSrvFact.createServerSocket(port);
  10. SSLSocket c = (SSLSocket)s.accept();
  11. OutputStream out = c.getOutputStream();
  12. InputStream in = c.getInputStream();
  13. // Send messages to the client through
  14. // the OutputStream
  15. // Receive messages from the client
  16. // through the InputStream
  17. }
  18. catch (IOException e) {
  19. }

户端使用安全的 socket 来与服务器通讯,代码设置如下: