是否有簡單的方法來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