Java 通过SSL/TLS保护多平台客户端(主要是桌面和Android)与桌面服务器之间的通信
我阅读了JSSE参考指南+堆栈溢出最常见的关于SSL/TLS的解释,但还没有找到任何能够封装我所需要的一切的东西 我目前正在做的项目是将多平台客户端(Android或Desktop)连接到与机器人相连的桌面服务器上(它在具有并行TCP和UDP连接的本地网络中工作->TCP用于将机器人的某种命令从客户端发送到服务器,UDP用于更新从服务器发送到客户端的地图上的机器人位置) 也许我有点不理智,所以我尝试实现Android代码,但没有真正告知自己可能出现的所有错误。下面的代码代表服务器端(桌面应用程序)和客户端(Android应用程序)的代码 服务器:Java 通过SSL/TLS保护多平台客户端(主要是桌面和Android)与桌面服务器之间的通信,java,android,ssl,tcp,udp,Java,Android,Ssl,Tcp,Udp,我阅读了JSSE参考指南+堆栈溢出最常见的关于SSL/TLS的解释,但还没有找到任何能够封装我所需要的一切的东西 我目前正在做的项目是将多平台客户端(Android或Desktop)连接到与机器人相连的桌面服务器上(它在具有并行TCP和UDP连接的本地网络中工作->TCP用于将机器人的某种命令从客户端发送到服务器,UDP用于更新从服务器发送到客户端的地图上的机器人位置) 也许我有点不理智,所以我尝试实现Android代码,但没有真正告知自己可能出现的所有错误。下面的代码代表服务器端(桌面应用程序
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(new FileInputStream(PATH_TO_KEYSTORE), PASSWORD.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keystore, PASSWORD.toCharArray());
SSLContext context = SSLContext.getInstance("TLS");
KeyManager[] keyManagers = kmf.getKeyManagers();
context.init(keyManagers, null, null);
SSLServerSocketFactory factory = context.getServerSocketFactory();
serverSocket = (SSLServerSocket) factory.createServerSocket(port);
serverSocket.setSoTimeout(0);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(Gdx.files.internal(PATH_TO_KEYSTORE).read(), 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 sslSocketFactory = context.getSocketFactory();
sslSocket = (SSLSocket) sslSocketFactory.createSocket(address, port);
Android客户端:
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(new FileInputStream(PATH_TO_KEYSTORE), PASSWORD.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(keystore, PASSWORD.toCharArray());
SSLContext context = SSLContext.getInstance("TLS");
KeyManager[] keyManagers = kmf.getKeyManagers();
context.init(keyManagers, null, null);
SSLServerSocketFactory factory = context.getServerSocketFactory();
serverSocket = (SSLServerSocket) factory.createServerSocket(port);
serverSocket.setSoTimeout(0);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(Gdx.files.internal(PATH_TO_KEYSTORE).read(), 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 sslSocketFactory = context.getSocketFactory();
sslSocket = (SSLSocket) sslSocketFactory.createSocket(address, port);
变量PATH_TO_KEYSTORE是指向使用此命令生成的文件的路径keytool-genkey-KEYSTORE server.KEYSTORE
。我知道服务器和客户端不应该有相同的密钥库,但我不知道如何用其他方法来实现,这也是我的问题之一
在执行这段代码之后,出现了一个异常,它说密钥存储的版本错误。,然后我发现我完全迷路了
无论如何,我有几个问题困扰着我: