This question already has answers here:
Java SSLHandshakeException “no cipher suites in common”
(8个答案)
2年前关闭。
尽管我通过了《 JSSE参考指南》,但对加密技术和SSL / TLS协议都不是很熟悉。我正在进行一个需要通过TCP连接提供某种安全性的项目,因此我选择了TLS作为最常用的协议。
我已经在《 JSSE参考指南》上找到了SSLSocket和SSLServerSocket的代码段,并将其复制到了我的项目中,但是实际上并没有预期该操作的结果。当我启动服务器(Java应用程序)时,一切似乎都能正常进行,直到我尝试与客户端(也是Java应用程序)连接。那时,发生SSLHandshakeException:没有通用的密码套件。
我的问题是,通常是什么密码套件(我用Google搜索过,但我不太了解,我需要初学者的基本解释),并且我必须如何修复下面给出的代码才能使我的项目正常运行?
SSLSocket:
SSLServerSocket:
(8个答案)
2年前关闭。
尽管我通过了《 JSSE参考指南》,但对加密技术和SSL / TLS协议都不是很熟悉。我正在进行一个需要通过TCP连接提供某种安全性的项目,因此我选择了TLS作为最常用的协议。
我已经在《 JSSE参考指南》上找到了SSLSocket和SSLServerSocket的代码段,并将其复制到了我的项目中,但是实际上并没有预期该操作的结果。当我启动服务器(Java应用程序)时,一切似乎都能正常进行,直到我尝试与客户端(也是Java应用程序)连接。那时,发生SSLHandshakeException:没有通用的密码套件。
我的问题是,通常是什么密码套件(我用Google搜索过,但我不太了解,我需要初学者的基本解释),并且我必须如何修复下面给出的代码才能使我的项目正常运行?
SSLSocket:
import java.io.*;
import javax.net.ssl.*;
. . .
int port = availablePortNumber;
String host = "hostname";
try {
SSLSocketFactory sslFact =
(SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket s = (SSLSocket)sslFact.createSocket(host, port);
OutputStream out = s.getOutputStream();
InputStream in = s.getInputStream();
// Send messages to the server through
// the OutputStream
// Receive messages from the server
// through the InputStream
}
catch (IOException e) {
}
SSLServerSocket:
import java.io.*;
import javax.net.ssl.*;
. . .
int port = availablePortNumber;
SSLServerSocket s;
try {
SSLServerSocketFactory sslSrvFact =
(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
s = (SSLServerSocket)sslSrvFact.createServerSocket(port);
SSLSocket c = (SSLSocket)s.accept();
OutputStream out = c.getOutputStream();
InputStream in = c.getInputStream();
// Send messages to the client through
// the OutputStream
// Receive messages from the client
// through the InputStream
}
catch (IOException e) {
}
最佳答案
您可能没有服务器证书。您没有显式创建SSLContext
,因此服务器访问证书和私钥的唯一方法是在设置了某些系统属性的情况下运行程序。如果没有必要的密钥材料,则服务器将仅启用匿名密码套件。
默认情况下,客户端会禁用这些匿名密码套件,因为它们实际上并不提供任何安全性。因此,握手失败是因为没有通用的密码套件。
关于java - 使用TLS协议(protocol)在客户端和服务器之间进行通信的密码套件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42286742/
10-11 09:21