栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

你正在

SSLContext
使用
null KeyManager
数组进行初始化。

密钥管理器负责处理服务器证书(在服务器端),这是使用时可能要设置的目标

javax.net.ssl.keyStore

但是,正如《JSSE参考指南》中所述,null对第一个参数使用并不会像你认为的那样起作用:

如果KeyManager []参数为

null
,则将为此上下文定义一个空的KeyManager。如果TrustManager []参数为null,则将在已安装的安全提供程序中搜索TrustManagerFactory的最高优先级实现,从中将获取适当的TrustManager。同样,SecureRandom参数可以为null,在这种情况下,将使用默认实现。

一个空白KeyManager不包含任何RSA或DSA证书。因此,将禁用所有依赖于此类证书的默认密码套件。这就是为什么你会收到所有这些“ 忽略不可用的密码套件 ”消息的原因,从而最终导致“ 没有公共密码套件 ”消息。

如果希望将密钥库用作密钥库,则需要加载它并使用它初始化KeyManagerFactory:

    KeyStore ks = KeyStore.getInstance("JKS");    InputStream ksIs = new FileInputStream("...");    try {        ks.load(ksIs, "password".toCharArray());    } finally {        if (ksIs != null) { ksIs.close();        }    }    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory .getDefaultAlgorithm());    kmf.init(ks, "keypassword".toCharArray());

使用

kmf.getKeyManagers()
作为第一个参数
SSLContext.init()

对于其他两个参数,由于显然不请求客户端证书身份验证,因此应将信任管理器保留为默认值(null),而不是复制/粘贴可能导致漏洞的信任管理器,并且还可以使用默认值null SecureRandom。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431926.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号