目录
准备工作:修改/etc/hosts文件,自定义一个hosts名
第一步:为了方便证书的保存管理,这里先专门创建几个目录来保存证书
第二步:生成server.keystore.jks文件(即:生成服务端的keystore文件)
第三步:生成CA认证证书(为了保证整个证书的安全性,需要使用CA进行证书的签名保证)
欢迎来到,我的世界!
相关知识点之Kafka支持的认证处理
- JavaSSL认证
SSL(Secure Socket Layer安全套接层),及其继任者传输层安全(Transport ;ayer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。- Kerberos认证 + ACL鉴权
Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。ACL则是在Kerberos的基础上进行的鉴权措施,一般Kerberos认证就够使用了。
SSL相关证书的生成
服务器端SSL证书签发
准备工作:修改/etc/hosts文件,自定义一个hosts名
注:windows的hosts文件在C:\Windows\System32\drivers\etc\目录下。
注:修改/etc/hosts之后正常情况应该是保存之后立即生效的,但是有时不是。使用uname -a 可以查看hostname是多少,
就可以知道是否修改生效了。如果没有,这时的策略有:1、重启机器 2、重启服务3、使用hostname命
令【hostname 定义的主机名】。
说明:kafka2.0.x开始,将ssl.endpoint.identification.algorithm默认设置为了HTTPS,即:需要验证主机名,所以我们这
里可以先配置一个主机名。
追注:不论是否需要主机名验证,都推荐配置一下hosts,比较方便。
第一步:为了方便证书的保存管理,这里先专门创建几个目录来保存证书
mkdir -p /usr/ca/{root,server,client,trust}
注:这四个目录分别用来存放 根证书、服务端证书、客户端正式、受信任的证书。
第二步:生成server.keystore.jks文件(即:生成服务端的keystore文件)
keytool -keystore /usr/ca/server/server.keystore.jks -alias ds-kafka-single -validity 365 -genkey -keypass ds1994 -keyalg RSA -dname "CN=kafka-single,OU=aspire,O=aspire,L=beijing,S=beijing,C=cn" -storepass ds1994 -ext SAN=DNS:kafka-single
执行效果如图:
注:这里的警告是推荐我们使用pkcs12,不过官网使用的仍然是jks,忽略这个警告即可。
注:这里的-ext SAN=DNS:xxx需要指定xxx为我们定义的主机名;-dname中的CN也需要指定为我们定义的主机名。
keytool相关指令说明:
指令 | 含义 |
-alias | 别名 |
-keystore | 指定密钥库的名称(就像数据库一样的证书库,可以有很多个证书,cacerts这个文件是jre自带的, 也可以使用其它文件名字,如果没有这个文件名字,它会创建这样一个) |
-storepass | 指定密钥库的密码 |
-keypass | 指定别名条目的密码 |
-list | 显示密钥库中的证书信息 |
-v | 显示密钥库中的证书详细信息 |
-export | 将别名指定的证书导出到文件 |
-file | 参数指定导出到文件的文件名 |
-delete | 删除密钥库中某条目 |
-import | 将已签名数字证书导入密钥库 |
-keypasswd | 修改密钥库中指定条目口令 |
-dname | 指定证书拥有者信息。 其中,CN=名字与姓氏/域名,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码 |
-keyalg | 指定密钥的算法 |
-validity | 指定创建的证书有效期多少天 |
-keysize | 指定密钥长度 |
…… |
第三步:生成CA认证证书(为了保证整个证书的安全性,需要使用CA进行证书的签名保证)
提示:利用Linux自带的OpenSSL创建即可。
openssl req -new -x509 -keyout /usr/ca/root/ca-key -out /usr/ca/root/ca-cert -days 365 -passout pass:ds1994 -subj "/C=cn/ST=beijing/L=beijing/O=aspire/OU=aspire/CN=kafka-single"
执行效果如图:
第四步:通过CA证书创建一个客户端信任证书
keytool -keystore /usr/ca/trust/client.truststore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass ds1994
执行效果如图:
……
注:有了信任证书才可以进行证书有效性的检查。
注:以后的证书必须通过CA认证后才能使用。
第五步:通过CA证书创建一个服务端器端信任证书
keytool -keystore /usr/ca/trust/server.truststore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass ds1994
执行效果如图:
……
注:以后的证书必须通过CA认证后才能使用。
第六步:服务器证书的签名处理
第一小步:导出服务器端证书server.cert-file。
keytool -keystore /usr/ca/server/server.keystore.jks -alias ds-kafka-single -certreq -file /usr/ca/server/server.cert-file -storepass ds1994
执行效果如图:
第二小步:用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:ds1994
执行效果如图:
第三小步:将CA证书导入到服务器端keystore。
keytool -keystore /usr/ca/server/server.keystore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass ds1994
执行效果如图:
……
第四小步:将已签名的服务器证书导入到服务器keystore。
keytool -keystore /usr/ca/server/server.keystore.jks -alias ds-kafka-single -import -file /usr/ca/server/server.cert-signed -storepass ds1994
执行效果如图:
注:到此步骤为止,其实就可以进行【Kafka配置SSL认证】环节了。不过为了以后方便,我们也可以提前将客户端
的证书生成出来。
客户端SSL证书签发
说明:为了后续方便,我们干脆直接在这里就生成客户端的证书,在后续用到时直接可以复制现在生成的证书。(当然
也可以等到客户端连接时在生成)。
第一步:导出客户端证书
keytool -keystore /usr/ca/client/client.keystore.jks -alias ds-kafka-single -validity 365 -genkey -keypass ds1994 -dname "CN=kafka-single,OU=aspire,O=aspire,L=beijing,S=beijing,C=cn" -ext SAN=DNS:kafka-single -storepass ds1994
执行效果如图:
第二步:将证书文件导入到客户端keystore
keytool -keystore /usr/ca/server/server.keystore.jks -alias ds-kafka-single -validity 365 -genkey -keypass ds1994 -keyalg RSA -dname "CN=kafka-single,OU=aspire,O=aspire,L=beijing,S=beijing,C=cn" -storepass ds1994 -ext SAN=DNS:kafka-single
执行效果如图:
第三步:用CA给客户端证书进行签名处理
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:ds1994
执行效果如图:
第四步:将CA证书导入到客户端keystore
keytool -keystore /usr/ca/client/client.keystore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass ds1994
执行效果如图:
……
第五步:将已签名的证书导入到客户端keystore
keytool -keystore /usr/ca/client/client.keystore.jks -alias ds-kafka-single -import -file /usr/ca/client/client.cert-signed -storepass ds1994
执行效果如图: