6.2. TLS 加密
Kafka 支持 TLS 来加密与 Kafka 客户端的通信。
要使用 TLS 加密和服务器身份验证,必须提供包含私钥和公钥的密钥存储。这通常使用 Java Keystore (JKS)格式的文件来完成。此文件的路径在 ssl.keystore.location
属性中设置。ssl.keystore.password
属性应该用于设置保护密钥存储的密码。例如:
ssl.keystore.location=/path/to/keystore/server-1.jks ssl.keystore.password=123456
在某些情况下,使用额外的密码来保护私钥。可以使用 ssl.key.password
属性设置此类密码。
Kafka 可以使用由证书颁发机构和自签名密钥签名的密钥。使用由证书颁发机构签名的密钥应始终是首选的方法。为了允许客户端验证其正在连接的 Kafka 代理的身份,证书应始终包含公告的主机名 (CN) 或 Subject Alternative Name(SAN)。
可以将不同的 SSL 配置用于不同的监听程序。所有以 ssl 开头的选项都可以以
前缀,其中监听程序的名称必须始终为小写。这将覆盖该特定监听器的默认 SSL 配置。以下示例演示了如何为不同的监听程序使用不同的 SSL 配置:
listener.
name.<NameOfTheListener>.
listeners=INT1://:9092,INT2://:9093,REPLICATION://:9094 listener.security.protocol.map=INT1:SSL,INT2:SSL,REPLICATION:SSL # Default configuration - will be used for listeners INT1 and INT2 ssl.keystore.location=/path/to/keystore/server-1.jks ssl.keystore.password=123456 # Different configuration for listener REPLICATION listener.name.replication.ssl.keystore.location=/path/to/keystore/replication.jks listener.name.replication.ssl.keystore.password=123456
其他 TLS 配置选项
除了上面描述的主要 TLS 配置选项外,Kafka 还支持很多选项来微调 TLS 配置。例如,启用或禁用 TLS / SSL 协议或密码套件:
ssl.cipher.suites
- 启用的密码套件列表。每个密码套件都是用于 TLS 连接的身份验证、加密、MAC 和密钥交换算法的组合。默认情况下启用所有可用的密码套件。
ssl.enabled.protocols
-
已启用的 TLS/SSL 协议列表。默认为
TLSv1.2,TLSv1.1,TLSv1
。
6.2.1. 启用 TLS 加密
这个步骤描述了如何在 Kafka 代理中启用加密。
先决条件
- 每个主机上安装了 Apache Kafka 的流,且配置文件可用。
流程
- 为集群中的所有 Kafka 代理生成 TLS 证书。证书应该在其 Common Name 或 Subject Alternative Name 中有其公告和 bootstrap 地址。
编辑所有集群节点上的 Kafka 配置文件:
-
更改
listener.security.protocol.map
字段,为您要使用 TLS 加密的监听程序指定SSL
协议。 -
使用代理证书将
ssl.keystore.location
选项设置为 JKS 密钥存储的路径。 将
ssl.keystore.password
选项设置为用来保护密钥存储的密码。例如:
listeners=UNENCRYPTED://:9092,ENCRYPTED://:9093,REPLICATION://:9094 listener.security.protocol.map=UNENCRYPTED:PLAINTEXT,ENCRYPTED:SSL,REPLICATION:PLAINTEXT ssl.keystore.location=/path/to/keystore/server-1.jks ssl.keystore.password=123456
-
更改
- (重新)启动 Kafka 代理