面试题答案
一键面试SSL(Secure Sockets Layer)
- 原理:
- 握手阶段:客户端和Kafka broker发起连接时,通过SSL握手协议协商加密算法、密钥等参数。例如,客户端发送支持的加密套件列表,broker从中选择合适的套件。同时,broker向客户端发送自己的数字证书,客户端验证证书的有效性,包括证书是否由受信任的证书颁发机构(CA)签名、证书是否过期等。如果broker需要双向认证,客户端也需向broker发送自己的证书。
- 数据传输阶段:握手成功后,双方使用协商好的加密算法(如AES)和密钥对传输的数据进行加密和解密。比如,消息在从生产者发送到broker,以及从broker发送到消费者的过程中,都处于加密状态,保证数据的保密性和完整性。
- 适用场景:
- 对数据安全要求极高的场景:如金融行业,在处理资金交易相关的消息时,确保消息在传输过程中不被窃取或篡改,防止敏感信息泄露。
- 跨网络传输消息场景:当Kafka集群跨越不同的网络区域,如公有云与私有云之间传输数据,使用SSL可以防止网络中间人攻击,保障数据在不可信网络中的安全传输。
SASL(Simple Authentication and Security Layer)
- 原理:
- 机制选择:SASL提供多种认证机制,如PLAIN、SCRAM - SHA - 256等。客户端和broker首先协商使用哪种认证机制。例如,对于PLAIN机制,客户端直接将用户名和密码以明文形式发送给broker(实际在传输前会进行base64编码),broker通过内部配置的用户信息(如存储在Kafka配置文件中的用户名密码对,或者连接外部的用户管理系统,如LDAP)进行验证。对于SCRAM - SHA - 256机制,客户端和broker通过多次消息交互,使用加盐哈希等技术对密码进行验证,避免密码以明文形式传输。
- 授权:认证成功后,Kafka根据配置的访问控制列表(ACL)对通过认证的用户进行授权,决定其对Kafka主题、分区等资源的操作权限,如是否可以读取、写入某个主题。
- 适用场景:
- 企业内部多用户访问场景:在企业内部,多个团队或用户需要访问Kafka集群。通过SASL可以实现不同用户的身份认证和权限管理,例如,开发团队的用户可能只有对开发环境主题的读写权限,而运维团队的用户可能有更高级的管理权限。
- 结合外部用户管理系统场景:当企业已经有成熟的用户管理系统(如LDAP)时,使用SASL可以方便地与外部系统集成,复用现有的用户信息,减少用户管理的成本和复杂度。