gpt4 book ai didi

java - 将对象流与 SSL 套接字一起使用时出错

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:56 24 4
gpt4 key购买 nike

我有一对客户端-服务器 java 程序,它们使用安全通信进行对象传输(使用对象输入和输出流)。该程序是一个多客户端程序,每个客户端都使用一个单独的线程。这是下面的代码片段:

final static private ServerSocketFactory serverFactory 
= SSLServerSocketFactory.getDefault();
final static private SocketFactory clientFactory = SSLSocketFactory.getDefault();
serverSocket
= serverFactory.createServerSocket
(port, 0, InetAddress.getByName("192.168.1.2"));
while(running) {
clientSocket = serverSocket.accept();
System.out.println("Client connected :: " + clientSocket);
System.out.println("Creating client thread...");
Client c = new Client(count++, clientSocket);
c.T.start();
}

将处理客户端请求的线程:

Client(int id, Socket cs){
T = new Thread(this, "Client Thread" + id);
this.socket = cs;
this.id = null;
try{
input = new ObjectInputStream(cs.getInputStream());
output = new ObjectOutputStream(cs.getOutputStream());
successful = true;
}catch(IOException ex){
successful = false;
}
}

客户端程序的代码非常相似。当我运行这两个程序并将请求从客户端发送到服务器时,服务器将接受请求但是当执行到达从套接字检索对象流的行时,我收到一个错误:javax.net.ssl.SSLHandshakeException:没有共同的密码套件

谁能帮我解决这个问题?有没有更好的方法在 Java GUI 中使用客户端和服务器之间的安全通信?

最佳答案

这不是使用对象流的问题,因为在通过连接传输任何数据之前会发生 SSLHandshakeException。异常消息表明问题在于寻找服务器和客户端同意的加密方法。服务端支持一套密码,客户端支持一套不同的密码,没有两种密码都在。这是假设异常消息是准确的;有时,此异常似乎是其他 SSL 问题的副作用。

我建议下一步是在客户端和服务器 SSL 套接字工厂上调用并打印出 getDefaultCipherSuites() 和 getSupportedCipherSuites() 的结果。如果异常是准确的,则默认密码套件之间应该没有重叠,但希望受支持的密码套件中会有一些重叠,然后您可以将 SSL 套接字工厂设置为启用和使用。

关于java - 将对象流与 SSL 套接字一起使用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com