不下载证书的java ssl握手

不下载证书的java ssl握手,java,cryptography,x509certificate,Java,Cryptography,X509certificate,在SSL握手期间,从服务器下载证书的步骤3是可选的 因此,如果我已将证书与客户端一起分发,如何跳过下载以提高性能 请注意,我知道如何加载本地证书以及如何信任它。但是我不知道如何跳过下载过程,而且在java文档中也没有发现任何有用的东西 提前谢谢 编辑 我的问题不是使用不需要证书的密码套件。我仍然有一个证书,并希望使用其公钥进行对称密钥交换 我的问题不是使用不需要证书的密码套件。我仍然有一个证书,希望使用它的公钥进行加密 我认为您缺少TLS中证书的角色。主要任务是提供认证,以防止连接受到中间人攻击

在SSL握手期间,从服务器下载证书的步骤3是可选的

因此,如果我已将证书与客户端一起分发,如何跳过下载以提高性能

请注意,我知道如何加载本地证书以及如何信任它。但是我不知道如何跳过下载过程,而且在java文档中也没有发现任何有用的东西

提前谢谢

编辑

我的问题不是使用不需要证书的密码套件。我仍然有一个证书,并希望使用其公钥进行对称密钥交换

我的问题不是使用不需要证书的密码套件。我仍然有一个证书,希望使用它的公钥进行加密

我认为您缺少TLS中证书的角色。主要任务是提供认证,以防止连接受到中间人攻击(即中间人声称是服务器)。p> 有效负载加密根本不是由证书完成的。在基于RSA的密钥交换中,它最多用于交换加密密钥。但对于目前推荐的密钥交换(ECDHE,可能还有DHE),根本不需要证书

这意味着仅将证书用于密钥交换而不用于身份验证是没有意义的,因此,没有支持这一点的密码

在SSL握手期间,从服务器下载证书的步骤3是可选的

我不知道您从何处获得步骤号,但发送服务器证书是强制性的,除非客户端在
ClientHello
消息中声明它将接受非身份验证密码套件,并且RFC 2246中特别说明这是不安全的

因此,如果我已将证书与客户端一起分发,如何跳过下载以提高性能

你不能

请注意,我知道如何加载本地证书以及如何信任它。但是我不知道如何跳过下载过程,而且在java文档中也没有发现任何有用的东西

当然你还没找到。它不在那里。Java文档或RFC2246中根本没有关于它的任何内容。你发明了这个要求。这并不意味着JavaJSSE或SSL本身都支持它。没有

我的问题不是使用不需要证书的密码套件。我仍然有一个证书,并希望使用其公钥进行对称密钥交换


SSL不执行对称密钥交换。你又一次在谈论一些不存在的东西。如果您想了解SSL,请阅读RFC2246。如果您想发明自己的,请放心,但不要称之为SSL,也不要自欺欺人地说它将与SSL一样性能优异或安全,SSL已经发展了近25年。不会的。

如果您关心连接到不使用证书的服务器,则这是重复的。如果您询问使用证书连接到服务器,但没有再次下载证书,那么您实际上询问的是会话恢复,该会话恢复重复到。@SteffenUllrich实际上我询问的是使用证书连接到服务器,但即使是第一次也没有下载证书。这可能吗?你的问题在措辞上存在矛盾。如果使用需要证书的密码套件,则需要证书。SSL不使用公钥进行加密,握手消息除外。因此,你的问题毫无意义。@EJP我可能没有说清楚。我希望使用预共享公钥之类的东西。我想要一个需要证书的密码套件,但我也希望从本地而不是从在线服务器获取证书。SSL密码套件中的证书执行身份验证功能,而不是加密功能,并且通过有线传输。否则它无法执行该功能。因此,需要证书但不将其用于身份验证且无法通过网络获取的密码套件在术语上是矛盾的。您所描述的根本不是SSL,也不是我能看到的任何东西。实际上,我使用证书进行身份验证。但是证书是通过脱机传递以本地文件的形式提供的。我认为在这里有一个证书是有意义的。@immuch一个作为本地文件而不是通过网络提供的证书不可能构成任何可以想象的在线对等身份验证过程的一部分。您没有任何意义。@Immueggpain:身份验证不仅是客户端知道应该使用哪个证书,而且是服务器证明它拥有这个证书,即服务器拥有私钥。TLS不支持在不发送证书的情况下进行证明。谢谢您的回复。我想问题是我对TLS了解不多。所以我认为有一种类似于开关的东西可以关闭证书传输。但有一件事仍然让我困惑。您说过服务器无法证明它拥有这个证书。但我认为,如果握手成功,那么服务器必须拥有私钥,否则TLS握手将失败,从而表明服务器可能是假的。确切地说,当证书通过SSL握手传递时。如果是在本地获得的,则没有可能的证据。我刚刚阅读了RFC5246第7.4.2节。尽管如此,只要约定的密钥交换方法使用证书进行身份验证,服务器就必须发送证书消息。但是消息的定义是ASN.1Cert certificate\u list;。好的,如果我理解正确,那么我可以不发送任何证书而将其称为SSL(我想我们在这里讨论的是SSL/TLS,毕竟它们只是sa的不同版本)