Kafka创建SSL证书

摘要:
对于消息组件,RabbitMQ根据原始设计具有最高的性能。因为RabbitMQ设计相对完整,但Kafka不同。卡夫卡最初设计的最大缺陷是没有安全认证。因此,为了考虑安全性,一些初始系统使用性能较差的ssl身份验证进行设计,即使用证书来处理身份验证操作。如果要对证书执行ssl处理,则必须使用Java中的keytool工具生成相应的证书信息,然后在访问之前将证书信息提交给客户端和服务器进行共同匹配。
对于消息组件,如果按照最初的设计来讲,性能最高得就是RabbitMQ,因为RabbitMQ设计比较完整,而Kafka不同,Kafka最初的设计最大的坑:没有安全认证,所以最初的一些系统设计的时候为了考虑到安全性,所以采用了性能较差的ssl认证方式来进行出来,也就是说使用证书的方式来处理认证操作。

如果要想进行证书的ssl处理,那么肯定需要通过java中的keytool工具生成相应的证书信息,而后将此证书信息内容交给客户端与服务端共同匹配后才可以访问。

一、生成ssl证书
1、    为了方便证书的保存处理,首先建立一个证书的保存目录:
mkdir -p /usr/ca/{root,server,client,trust}

2、    生成server.keystore.jks证书的孵化器:
keytool -keystore /usr/ca/server/server.keystore.jks -alias kafka-single -validity 365 -genkey -keypass mldnjava -dname "CN=kafka-single.com,OU=mldn,O=mldnjava,L=bj,S=bj,C=cn" -storepass mldnjava

在/usr/ca/server/目录下会生成server.keystore.jks文件

3、    为了保证整个证书的安全性,所以需要使用CA进行证书的签名保证,下面创建CA的认证证书:
openssl req -new -x509 -keyout /usr/ca/root/ca-key -out /usr/ca/root/ca-cert -days 365 -passout pass:mldnjava -subj "/C=cn/ST=bj/L=b/O=mldn/OU=mldnjava/CN=kafka-single.com"

4、    通过CA创建一个服务器端的信任证书,有了信任证书才可以进行证书有效性的检测:
keytool -keystore /usr/ca/trust/server.truststore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass mldnjava

提示时输入:y

5、    通过CA创建一个客户端的信任证书:
keytool -keystore /usr/ca/trust/client.truststore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass mldnjava

6、    进行服务器端证书签名处理:

##导出服务器证书"server.cert-file":
keytool -keystore /usr/ca/server/server.keystore.jks -alias kafka-single -certreq -file /usr/ca/server/server.cert-file -storepass mldnjava

##用ca给服务器证书进行签名处理:
openssl x509 -req -CA /usr/ca/root/ca-cert -CAkey /usr/ca/root/ca-key -in /usr/ca/server/server.cert-file -out /usr/ca/server/server.cert-signed -days 365 -CAcreateserial -passin pass:mldnjava

##将CA证书导入到服务器keystore
keytool -keystore /usr/ca/server/server.keystore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass mldnjava

##将已签名的服务器证书导入到服务器keystore
keytool -keystore /usr/ca/server/server.keystore.jks -alias kafka-single -import -file /usr/ca/server/server.cert-signed  -storepass mldnjava

7、    如果你的现在kafka主机有很多(集群),那么所有的客户端服务器还需要设置客户端证书处理:
keytool -keystore /usr/ca/client/client.keystore.jks -alias kafka-single -validity 365 -genkey -keypass mldnjava -dname "CN=kafka-single.com,OU=mldn,O=mldnjava,L=bj,S=bj,C=cn" -storepass mldnjava

keytool -keystore /usr/ca/client/client.keystore.jks -alias kafka-single -certreq -file /usr/ca/client/client.cert-file  -storepass mldnjava

openssl x509 -req -CA /usr/ca/root/ca-cert -CAkey /usr/ca/root/ca-key -in /usr/ca/client/client.cert-file -out /usr/ca/client/client.cert-signed -days 365 -CAcreateserial -passin pass:mldnjava

keytool -keystore /usr/ca/client/client.keystore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass mldnjava

keytool -keystore /usr/ca/client/client.keystore.jks -alias kafka-single -import -file /usr/ca/client/client.cert-signed  -storepass mldnjava


##server.properties
listeners=SSL://kafka-single:9093
advertised.listeners=SSL://kafka-single:9093
ssl.keystore.location=/usr/ca/server/server.keystore.jks
ssl.keystore.password=mldnjava
ssl.key.password=mldnjava
ssl.truststore.location=/usr/ca/trust/server.truststore.jks
ssl.truststore.password=mldnjava
ssl.client.auth=required
ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1
ssl.keystore.type=JKS
ssl.truststore.type=JKS
security.inter.broker.protocol=SSL

免责声明:文章转载自《Kafka创建SSL证书》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇几种优化web页面加载速度的策略STM32 SWD下载口无法下载的原因和解决办法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SOAP、SOCKET协议

一、SOAP( SOAP:Simple Object Access Protocol) 简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件...

K8S 上部署 Redis-cluster 三主三从 集群

介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理。它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合。 由于Redis接受多种格式的密钥,因此可以在服务器上执行操作,从而减少了客户端的工作量。 它仅将磁盘用于持久性,而将数据库完全保存在内存中。Redis是一种流行的数据...

第四章 软件架构演化

第一节 软件架构定义及演化 分层架构 ·“关注点分离”原则 ·软件系统的组件被分成多个相互不重叠的层次,每一层都有着特定的职能,仅处理本层的逻辑,而并不关心其它层的实现。 ·表现层 ·业务层 ·持久层 ·数据层 ·分层架构模式特点: +结构简单 +易于组织开发 +便于独立测试、维护 -不易实现特续发布、部署 -性能代价 -可扩展性差 面向服务架构...

细说websocket快速重连机制

引言 在一个完善的即时通讯应用中,websocket是极其关键的一环,它为web应用的客户端和服务端提供了一种全双工的通信机制,但由于它本身以及其底层依赖的TCP连接的不稳定性,开发者不得不为其设计一套完整的保活、验活、重连方案,才能在实际应用中保证应用的即时性和高可用性。就重连而言,其速度严重影响了上层应用的“即时性”和用户体验,试想打开网络一分钟后,微...

SSL连接建立过程分析(1)

Https协议:SSL建立过程分析 web訪问的两种方式: http协议,我们普通情况下是通过它訪问web,由于它不要求太多的安全机制,使用起来也简单,非常多web网站也仅仅支持这样的方式下的訪问. https协议(Hypertext Transfer Protocol over Secure Socket Layer),对于安全性要求比較高的情况,能够...

实时日志刷新

任务在执行过程中,日志增量写入(按行写入) 可以使用Redis来缓存日志文件(Redis具有append方法可以增量写入) 将当前更新的日志片段,作为一条消息发塞入MQ WebSocket服务端监听MQ,将消息的内容转发给前端(此处几乎没有任何逻辑) 或者丢弃 前端收到WebSocket发送来的消息 根据需要刷新界面 如果日志不能增量写入,可以定时查询...