kafka使用ssl加密和认证
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka使用ssl加密和认证相关的知识,希望对你有一定的参考价值。
参考技术AApache kafka 允许clinet通过SSL连接,SSL默认是不可用的,需手动开启。
主要步骤是:
os: ubuntu 18
java: 1.8.0_275
kafka: 2.7.0
官方的步骤
把上面的步骤拆开来,并解释
生成密钥和证书,可以使用java的keytool来生产。我们将生成密钥到一个临时的密钥库,之后我们可以导出并用CA签名它。
例子
keystore: 密钥仓库存储证书文件。密钥仓库文件包含证书的私钥(保证私钥的安全)。
validity: 证书的有效时间,天
此步骤要注意的是,名与姓(CN)这一项必须输入域名,如 "localhost",切记不可以随意写,我曾尝试使用其他字符串,在后面客户端生成证书认证的时候一直有问题。
客户端将根据以下两个字段之一验证服务器的完全限定域名(FQDN):
这两个字段均有效,但是RFC-2818建议使用SAN。SAN更加的灵活,允许声明多个DNS条目。另一个优点是,出于授权目的,可以将CN设置为更有意义的值。 要添加SAN,需将以下参数 -ext SAN=DNS:FQDN 追加到keytool命令:
完成上面步骤,可使用命令
来验证生成证书的内容
server.keystore.jks 这个文件包含了一对 公私钥 ,和 一个证书 来识别机器。但是,证书是未签名的,这意味着攻击者可以创建一个这样的证书来伪装成任何机器。
生成的CA是一个简单的 公私钥对 和 证书 ,用于签名其他的证书。
例子
将生成的CA添加到 **clients\' truststore(客户的信任库)** ,以便client可以信任这个CA:
ca-cert: CA的证书
例子
客户端的信任库存储所有客户端信任的证书,将证书导入到一个信任仓库也意味着信任由该证书签名的所有证书,正如上面的比喻,信任政府(CA)也意味着信任它颁发的所有护照(证书),此特性称为信任链,在大型的kafka集群上部署SSL时特别有用的。可以用单个CA签名集群中的所有证书,并且所有的机器共享相同的信任仓库,这样所有的机器也可以验证其他的机器了。
用步骤2.2 生成的CA签名 步骤2.1生成的证书。首先导出请求文件:
cert-file: 出口,服务器的未签名证书
然后用CA签名:
例子
最后,你需要导入CA的证书和已签名的证书到密钥仓库:
参数
Kafka Broker支持监听多个端口上的连接,通过 server.properteis 配置,最少监听1个端口,用逗号分隔。
下面是broker端需要的SSL配置,
more config/server.properties
Producer和Consumer的SSL的配置是相同的。
如果broker中不需要client(客户端)验证,那么下面是最小的配置示例:
more client-ssl.properties
如果需要客户端认证,则必须像 步骤2.1 一样创建密钥库,并且还必须配置以下内容:
启动 zookeeper 和 kafka
在不同的Terminal 分别运行下面命令
Terminal1
Terminal2
Terminal3
创建topic
生产和消费topic
官网: http://kafka.apache.org/documentation/#security_ssl
https://www.orchome.com/171
https://www.orchome.com/1959
Java 11 导致 SSL handshake fail https://stackoverflow.com/questions/57601284/java-11-and-12-ssl-sockets-fail-on-a-handshake-failure-error-with-tlsv1-3-enable
生成本机证书时,CN 需要填写 localhost 或者真实的域名,否则客户端连接失败。
以上是关于kafka使用ssl加密和认证的主要内容,如果未能解决你的问题,请参考以下文章