SASL_SSL 安全协议如何工作?客户端是否验证服务器(X.509 证书)?

How does SASL_SSL security protocol work? Does client verify the server (X.509 cert)?

SSL 的工作原理是众所周知的,因为它在各个地方都被广泛使用和描述。简而言之 - SSL 涉及

  1. 客户端通过验证服务器 X.509 证书来验证服务器真实性。
  2. 然后使用 diffie-hellman 密钥交换算法得到对称密钥。

但我不确定 security.protocol=SASL_SSL 会发生什么。 Kafka 等少数技术的客户端和服务器通信依赖此安全协议作为选项之一。在这里,我担心上面的第1点。如果我从某人那里得到了错误的代理地址(作为一个技巧),是否 SASL_SSL 验证服务器证书是我的问题。如果是这样,那么我可以确定收到的代理不是真实的,我的应用程序将不会发布或订阅来自该服务器的消息,我的数据是安全的。

编辑 1:按照@steffen-ullrich 的回答和评论还有更多挖掘,我在下面看到。看起来证书验证在通过 chrome 使用时正在发生,并且可能也在 cacerts 中加载。所以 java 代码能够验证服务器..所以看起来没问题..

编辑 2:正确的是,证书 DST 和 ISRG 预加载在 JDK 11 cacerts 中,因此客户端能够按照 Stephen 的评论对服务器进行身份验证。

您所询问的与其他配置有关,请阅读以下说明。

ssl.endpoint.identification.algorithm 客户端用来验证服务器主机名的端点识别算法。默认值为 https。客户端(包括由代理创建的用于代理间通信的客户端连接)验证代理主机名是否与代理证书中的主机名匹配。通过将 ssl.endpoint.identification.algorithm 设置为空字符串来禁用服务器主机名验证。 类型:字符串 默认值:https 重要性:中

SASL 是客户端身份验证的标准 - 请参阅 Simple Authentication and Security Layer。 SASL_SSL 只是意味着客户端身份验证 (SASL) 用于受保护的连接 (SSL) 以防止拦截,而不是通过普通连接。