客户端失败TLS 1.0服务器提供CA列表时的握手

时间:2015-04-06 22:13:52

标签: ssl certificate handshake

我们有一个相对较旧的硬件运行客户端应用程序,需要通过TLS 1.0进行Web服务调用。

服务器有许多不同的客户端,因此它支持TLS 1.0,1.1和1.2。因此,当服务器发送它的证书时,它也会与CA的列表一起发送。设置服务器以便客户端可以选择提供证书,但这不是必需的。问题是,一旦客户端看到CA的列表,它就会发回FIN / ACK(关闭连接)。

这似乎是不正确的行为。根据TLS 1.0 RFC http://tools.ietf.org/html/rfc2246#section-7.4.2

  

请注意,客户可以      如果没有合适的证书,则不发送证书      发送以响应服务器的身份验证请求。

据推测,客户端正在查看CA的列表,并假设它需要提供证书并且完全失败,因为它没有证书。客户端在没有提供CA列表时工作,我们可以通过在服务器上禁用TLS 1.1和1.2来强制执行。不幸的是,这在我们的生产环境中不是一种选择。

我的问题是上述结论是否正确;客户端应该没有证书而不是关闭连接吗?

如果是这样,我会看到几个选项:

  • 创建客户端证书并在每个客户端设备上安装
  • 在服务器上打开一个单独的端口,仅允许专门为此客户端使用TLS 1.0。
  • 支持客户端设备供应商的票,希望他们修复它或有解决方案(疑问)

我们倾向于选项2,因为这是我们实施的最简单的解决方案。如果有人有任何其他方式让我们解决问题,我们将不胜感激。

1 个答案:

答案 0 :(得分:2)

  

我的问题是上述结论是否正确;客户端应该没有证书而不是关闭连接吗?

是。见RFC 2246 #7.4.6 Client Certificate

  

此消息仅在发送时发送          服务器请求证书。如果没有合适的证书          可用,客户端应发送证书消息          不含证书。

完全清楚。

  

如果是这样,我会看到几个选项:

     
      
  • 创建客户端证书并在每个客户端设备上安装
  •   

可能是最好的解决方案,但它也是最昂贵的。

  
      
  • 在服务器上打开一个单独的端口,仅允许专门为此客户端使用TLS 1.0。
  •   

我不明白为什么这是必要的。服务器应该已经知道客户端正在从第一个ClientHello消息中说出TLS 1.0。我怀疑这个选项会改变什么。如果是这样,则表明服务器有问题。

  
      
  • 支持客户端设备供应商的票,希望他们修复它或有解决方案(疑问)
  •   

无论你做什么,我都会这样做。供应商违反了RFC 2256,因此发布了一个无用的产品,并且可能不符合自己的规范(毫无疑问会提到TLS 1.0)。

  

我们倾向于选项2,因为这是我们实施的最简单的解决方案。

正如我上面所说的,我怀疑它是否会真正解决它。我认为您应该参与供应商的支持渠道。