我有一个简单的服务器程序,收集来自多个硬件设备在开放式无线网络中的数据。我希望确保连接到我的端口的任何人都不能发送命令或监听我的流量,因此我需要服务器验证客户端。我找到了一些示例,但大多数似乎采用从客户端验证服务器的方法。我对SSL和Socket编程不熟悉。
在客户端方面,我有
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(new FileInputStream("KeyStore"), "password".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(keystore);
SSLContext context = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = tmf.getTrustManagers();
context.init(null, trustManagers, null);
SSLSocketFactory sf = context.getSocketFactory();
return (SSLSocket) sf.createSocket(host, port);
在服务器上,我有以下内容
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(newFileInputStream("server"),"password".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "password".toCharArray());
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(kmf.getKeyManagers(), null, null);
SSLServerSocketFactory ssf = sc.getServerSocketFactory();
server = (SSLServerSocket) ssf.createServerSocket(this.port);
我不确定所有代码的作用,但是从我找到的示例来看,它是双向身份验证,可能过于复杂了。我认为我只需要其中一段代码,但不理解SSL足够深入,无法确定哪个。是哪一方需要密钥库?谁需要密钥和证书?谢谢。