java ssl握手而不下载证书

问题描述:

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

因此,如果我已将证书与我的客户端一起分发,那么如何跳过下载以改善性能?

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

在此先感谢。

编辑

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

+1

如果您关心的是连接到不使用证书的服务器,这与[如何连接到Java中不发送证书的SSL服务器相同](http://*.com/问题/ 29512394 /如何对连接到一个-SSL服务器功能于Java的是 - 犯规 - 发送-A-证书)。如果您询问有关使用证书连接到服务器的问题,但不再下载*,那么您将有效地询问会话简历,该会话简历与[恢复Java中的恢复TLS连接]重复(http://*.com/questions/12318325/resume -TLS-连接在-java的)。 –

+0

@SteffenUllrich其实我问的是连接到带有证书的服务器,但没有下载_even在第一次_。那可能吗? – Immueggpain

+0

您的问题体现了矛盾。如果您使用需要证书的密码套件,则需要证书。除了握手消息的一种情况外,SSL不使用公钥进行加密。因此你的问题没有意义。 – EJP

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

我认为您在TLS中缺少证书的角色。主要任务是提供身份验证,以便在中间攻击(即中间声称是服务器的人)中防止连接受到攻击。

有效负载加密不是由证书完成的。它最多用于在基于RSA的密钥交换中交换加密密钥。但对于目前推荐的密钥交换(ECDHE和可能的DHE),根本不需要证书。

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

+0

其实我使用证书进行身份验证。但是证书通过离线传递作为本地文件给出。我认为这里有证书是有意义的。 – Immueggpain

+2

@Iueueggpain作为本地文件而不是通过电报提供的证书不可能构成任何可想象的在线对等身份验证过程的一部分。你没有任何意义。 – EJP

+1

@Iueueggpain:认证不仅仅是客户端知道哪个证书是期望的,而是服务器证明它拥有这个证书,即服务器有私钥。 TLS没有支持在没有发送证书的情况下进行证明。 –

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

我不知道你来自哪里得到你的步数,但是在发送服务器证书是强制性的,除非在ClientHello消息的客户说,它接受一个非认证的加密套件,这是具体描述在RFC 2246中是不安全的。

因此,如果我已将证书与我的客户端一起分发,那么如何跳过下载以改善性能?

你不行。

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

当然你还没有找到它。它不在那里。在Java文档或RFC 2246中完全没有关于它的内容。你已经发明了这个要求。这并不意味着Java JSSE或SSL本身都支持它。它没有。

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

SSL不执行对称密钥交换。你再一次在谈论一些不存在的东西。如果你想了解SSL,请阅读RFC 2246.如果你想发明自己的,没有任何感觉,但不要把它称为SSL,并且不要欺骗它,因为它可以是表现性的,或者与SSL一样安全,已经有近25年的发展历史。它不会。

+0

我刚刚读了RFC5246的第7.4.2节。虽然_服务器必须发送证书消息,只要商定的密钥交换方法使用证书进行authentication_。但该消息的定义是_ASN.1Cert certificate_list ; _。那么,如果我理解正确的话,那么我可以发送NO证书并将其称为SSL(我想我们正在谈论SSL/TLS,毕竟它们只是同一事物的不同版本)。也许你在引用一些过时的材料? – Immueggpain