是否有简单的方法来dinamic生成不受信任的SSL证书没有域,并将其应用到服务器套接字 - 所有的代码,没有命令行或额外的文件?如何简单地生成SSL证书和ServerSocket形式的Java代码
目的是两台主机之间的安全连接只知道IP和端口相互通信 - 证书在服务器启动时随机生成并用作“不可信”,没有域,所以没有验证(如果我没有错)。我认为这对于确保第三方应用程序中数据中心之间的数据传输是有用的。
这是未加密的简单客户端 - 服务器测试的工作代码。
package study.benchmark.utils;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.net.ServerSocketFactory;
import javax.net.SocketFactory;
import org.junit.Test;
public class DynamicSSLTest {
@Test
public void sslServerSocketTest() throws Exception {
System.out.println("ssl server test");
final int port = 8750;
// server
Thread th = new Thread() {
@Override
public void run() {
try {
//ServerSocketFactory factory = SSLServerSocketFactory.getDefault();
ServerSocketFactory factory = ServerSocketFactory.getDefault();
ServerSocket server = factory.createServerSocket(port);
Socket socket = server.accept();
OutputStream out = socket.getOutputStream();
out.write("some data".getBytes());
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
};
th.start();
//client
//SocketFactory factory = SSLSocketFactory.getDefault();
SocketFactory factory = SocketFactory.getDefault();
Socket socket = factory.createSocket("localhost", port);
InputStream is = socket.getInputStream();
StringBuffer sb = new StringBuffer();
int data;
while ((data = is.read()) >= 0) {
System.out.print((char) data);
}
System.out.println();
socket.close();
th.join();
}
}
这是用自签名证书的安全数据,据我所知应用程序可以动态生成它 – jlmfao 2010-10-12 00:03:07
不,他们不能。客户端必须信任服务器的证书。在Java中,这意味着将其导入到客户端的信任库中。 – EJP 2010-10-12 00:21:11