好的朋友,所以我创建了一个使用TCP客户端/服务器套接字的Java聊天。 我创建服务器,然后创建连接到服务器的客户端,以便它们可以通过服务器彼此进行通信! 代码:服务器:Java客户端/服务器SSL套接字聊天
public ServerChat() throws Exception{
ServerSocket soc=new ServerSocket(5217);
while(true)
{
Socket CSoc=soc.accept();
//and then the code for handling the messages, we don't need that
}
}
而且客户端:
Server soc=new Socket("127.0.0.1",5217);
Thread t=new Thread(this);
t.start();
//i Have ommited many parts of the code, but you know, i focus on the connection part of the problem!`
所以,现在,我想用SSL保护(这样我就可以看到在Wireshark中的变化)。 我使用OpenSSL(它是我的assingment必需的)来创建根CA和设备证书。我将这些文件放在netbeans上的src文件夹中,并将代码复制到两个新类SSLServer和SSLClient中,并尝试了一下SSL部分!所以:
public SSLServer() throws Exception{
SSLContext sslContext=????//supposed to add the files somehow here?
SSLServerSocketFactory factory=(SSLServerSocketFactory)slContext.getServerSocketFactory();
SSLServerSocket sslserversocket=(SSLServerSocket) factory.createServerSocket(1234);
while(true)
{
SSLSocket sslsocket=(SSLSocket)sslserversocket.accept();
}
}
客户端的东西是一样的。所以我有点卡在SSLContext部分!我在这里阅读了很多线索,但仍然... SSLContext下面的部分是否正确?我如何在SSLContext中使用证书?编辑:也许这会工作? :
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("keystoreFile"), "keystorePassword".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
kmf.init(ks, "keystorePassword".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(ks);
SSLContext sc = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = tmf.getTrustManagers();
sc.init(kmf.getKeyManagers(), trustManagers, null);
SSLServerSocketFactory ssf = sc.getServerSocketFactory();
SSLServerSocket s = (SSLServerSocket) ssf.createServerSocket(serverport);
SSLSocket c = (SSLSocket) s.accept();