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

建立安全连接时,没有通用的密码套件

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

建立安全连接时,没有通用的密码套件

在服务器端,你不能初始化密钥库/ keymanagers,只有信任/ trustmanagers:

ctx.init(null,tmf.getTrustManagers(), null)

在服务器上,始终必须初始化密钥管理器以配置服务器证书。仅当您要使用客户端证书身份验证时,才需要初始化信任库。(有关密钥管理器和信任管理器之间的区别,此问题中有更多详细信息。)

没有配置任何密钥管理器,就没有基于RSA或DSA的证书,因此没有依赖于证书进行身份验证的密码套件(默认情况下所有启用的密码套件)都可用。因此,您在客户端和服务器之间不会获得相同的密码套件。

您需要这样的东西:

KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());kmf.init(keystore, password.toCharArray()); // That's the key's password, if different.// ...ctx.init(kmf.getKeyManagers(), null, null);

从您的示例中还不清楚,但是您当然不应该在客户端(作为信任库)和服务器端(作为密钥库)使用相同的密钥库:私钥应该只为服务器所知,而不会不必位于客户的信任库中。


编辑:( 我将尝试以另一种方式重新解释,因为目前尚不清楚每个人。也许有帮助。)

以下代码

SSLContext
使用一
null
组密钥管理器(第一个参数)初始化:
ctx.init(null,tmf.getTrustManagers(), null)
。(没有默认的密钥管理器。)

密钥管理器是在运行代码的一侧管理 您的
(私有)密钥和证书的工具。在服务器上,密钥管理器负责处理服务器证书及其私钥。密钥管理器本身通常由“密钥库密钥库”初始化。Java中的“ keystore
”可以有多种含义。 密钥库 的含义之一是可以将密钥和证书(通常是文件)存储到其中的实体。这样的密钥库可用于初始化信任管理器1(在这种情况下,它称为
truststore )或密钥管理器(在这种情况下,它称为 密钥库)。 )。抱歉,不是我选择的名称,但这是调用系统属性的方式。


当服务器配置有空密钥管理器时,它将配置为不包含任何证书和关联的私钥。因此,它没有任何RSA或DSA证书。因此,无论它们是否已显式启用,它都将无法使用任何

*_RSA_*
*_DSS_*
密码套件(它们将因缺少证书而被自动禁用)。这有效地丢弃了默认情况下启用的任何密码套件(或无论如何显式启用的任何此类密码套件)。因此,“没有共同的密码套件”。

简而言之,需要

SSLContext
在服务器端配置一个证书及其私钥2。这是通过配置其密钥管理器来完成的。反过来,这通常是通过将密钥库与
KeyManagerFactory
(而不是
TrustManagerFactory
)一起使用来完成的。

1:信任管理器使用本地信任锚(例如,受信任的CA证书)来评估对 远程 方(即​​,信任客户端证书的服务器或信任服务器证书的客户端)的信任。

2:JSSE支持的某些密码套件不需要证书,但是它们是匿名密码套件(不安全)或Kerberos密码套件(需要完全不同地设置)。两者都是默认禁用的。



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

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

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