首页  >  文章  >  Java  >  使用 SSLServerSocket 时,为什么我会收到“SSLHandshakeException:没有共同的密码套件”?

使用 SSLServerSocket 时,为什么我会收到“SSLHandshakeException:没有共同的密码套件”?

DDD
DDD原创
2024-11-03 17:14:30294浏览

Why am I receiving an

Java SSLHandshakeException“没有共同的密码套件”

问题:

我无法使用SSL 服务器套接字。尽管启用了所有可能的密码套件和协议,我还是收到了 SSLHandshakeException,指出“没有共同的密码套件。”

答案:

问题在于初始化SSLContext。提供空 KeyManager 数组会导致缺少 RSA 或 DSA 证书的空 KeyManager。这不允许使用依赖这些证书的默认密码套件,并最终导致错误。要解决此问题:

  1. 加载包含证书的密钥库:
KeyStore ks = KeyStore.getInstance("JKS");
InputStream ksIs = new FileInputStream("...");
ks.load(ksIs, "password".toCharArray());
  1. 使用密钥库初始化 KeyManagerFactory:
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, "keypassword".toCharArray());
  1. 更新 SSLContext 初始化以使用 KeyManager:
SSLContext sc = SSLContext.getInstance("TLSv1.2");
sc.init(kmf.getKeyManagers(), null, new SecureRandom());

以上是使用 SSLServerSocket 时,为什么我会收到“SSLHandshakeException:没有共同的密码套件”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn