Https SSLv3记录层内的TLS握手
我的服务器配置为同时接受SSLv3和TLS1.0协议。但有几个客户端发送的握手参数低于此值,在服务器hello之后,客户端会断开连接并发送“握手失败(40)”警报,不确定是客户端故障还是服务器故障 以下是初始的客户端hello数据包:Https SSLv3记录层内的TLS握手,https,ssl,handshake,Https,Ssl,Handshake,我的服务器配置为同时接受SSLv3和TLS1.0协议。但有几个客户端发送的握手参数低于此值,在服务器hello之后,客户端会断开连接并发送“握手失败(40)”警报,不确定是客户端故障还是服务器故障 以下是初始的客户端hello数据包: Secure Socket Layer SSLv3 Record Layer: Client Hello Content Type: Handshake (22) Version: SSL 3.0 (0x0300) <------------
Secure Socket Layer
SSLv3 Record Layer: Client Hello
Content Type: Handshake (22)
Version: SSL 3.0 (0x0300) <-----------------
Length: 103
Handshake Protocol: Client Hello
Handshake Type: Client Hello (1)
Length: 78
Version: TLS 1.0 (0x0301) <-------------
Random
Session ID Length: 0
Cipher Suites Length: 18
Cipher Suites (9 suites)
上面的curl命令将在wireshark上显示:
EDIT2:这合法吗?我一直在谷歌搜索,找不到任何例子。是否违反任何rfc标准
谢谢
我只是想知道我怎样才能发送这样的数据包?有命令吗
应该生成与您提供的跟踪类似的内容。是的,这是合法的(至少在最近的TLS规范中对此进行了澄清)
您可以在(TLS 1.2)或(SSL 3.0)或其他有关SSL/TLS的rfc中查找此信息。问题在于记录协议的初始版本和握手协议:
rfc5246:
Earlier versions of the TLS specification were not fully clear on
what the record layer version number (TLSPlaintext.version) should
contain when sending ClientHello (i.e., before it is known which
version of the protocol will be employed). Thus, TLS servers
compliant with this specification MUST accept any value {03,XX} as
the record layer version number for ClientHello.
TLS clients that wish to negotiate with older servers MAY send any
value {03,XX} as the record layer version number. Typical values
would be {03,00}, the lowest version number supported by the client,
and the value of ClientHello.client_version.
关于握手协议,客户端将协商其已实现的最高版本:
client_version: The version of the TLS protocol by which the client wishes to
communicate during this session. This SHOULD be the latest
(highest valued) version supported by the client
到目前为止,你发布的跟踪没有问题。这是与TLS谈判的正常方式。您需要提供有关警报的更多数据。很可能客户端不信任服务器证书。@Mardanian:使用SSL代理或类似WireShark的东西来深入研究SSL协议。虽然这些工具不是最容易使用的,但大多数时候你都能看到哪里出了问题。不过,正如EJP建议的那样,验证服务器证书是否可信应该是可行的。这在记录层和握手层上使用ssl3,类似于上图。
Earlier versions of the TLS specification were not fully clear on
what the record layer version number (TLSPlaintext.version) should
contain when sending ClientHello (i.e., before it is known which
version of the protocol will be employed). Thus, TLS servers
compliant with this specification MUST accept any value {03,XX} as
the record layer version number for ClientHello.
TLS clients that wish to negotiate with older servers MAY send any
value {03,XX} as the record layer version number. Typical values
would be {03,00}, the lowest version number supported by the client,
and the value of ClientHello.client_version.
client_version: The version of the TLS protocol by which the client wishes to
communicate during this session. This SHOULD be the latest
(highest valued) version supported by the client