我正在尝试与Windows上托管的kafka中的经纪人和经纪人-客户端通信建立SSL通信。在生产中,每个服务器都有许多已签名的证书,但是要建立POC,我想通过创建自己的证书并使用我自己创建的CA在本地对其进行签名来模拟这一点。
似乎最好的测试方法是让它在本地运行两个代理,每个代理具有有效的签名证书(与同一台计算机使用的证书相同),并确认它们可以正常运行。重复客户端-服务器通信。然后尝试在代理2和客户端上用一个未签名的证书替换一个已签名的证书,并确认它拒绝访问。
这听起来像是一种合理的方法吗?
如果是的话,我有几个问题
我正在使用keytool命令来创建初始证书。实际上我的整个过程如下
keytool -keystore server.keystore.jks -alias localhost -validity 10000 -genkey -keyalg RSA
openssl req -new -x509 -keyout ca-key -out ca-cert -days 365
keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert
keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert
keytool -keystore server.keystore.jks -alias localhost -certreq -file cert-file
openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 10000 -CAcreateserial -passin pass:Kafkaflow1
keytool -keystore server.keystore.jks -alias CARoot -import -file ca-cert
keytool -keystore server.keystore.jks -alias localhost -import -file cert-signed
我的问题是
1)在创建密钥库的第一步之后,它要求输入密码。然后询问名字和姓氏,组织单位,组织,地区,州和国家/地区代码。转换为
CN={}, OU={}, O={}
等该信息有多重要,仅是信息还是必须完全匹配我机器上的某些内容才能正常工作?有了产品证书,他们已经设置了各种值,但是在本地要使其正常工作,我可以在这里输入任何内容吗?我在MMC中可以找到的唯一证书是我的本地用户,该证书已设置,其中已填充CN,OU和三个DC。但是我看不到本地用户证书与我生成的证书有什么关系,所以我真的可以在想要的这些值中放入任何内容吗?
2)由于我将同时在我的计算机上运行经纪人,生产者和使用者,因此我是否对所有四个进程使用相同的密钥和信任存储?
3)为使用者设置密钥库,为代理设置信任库是否足以进行身份验证?我的机器名称是否可以在任何地方输入?我看到有人提到了名为SAN = DNS的keytool参数:但不确定这对我是否有必要
4)配置代理时,我的server.properties是
listeners=PLAINTEXT://localhost:9092,SSL://localhost:9093
ssl.client.auth=required
ssl.keystore.type=JKS
ssl.truststore.type=JKS
ssl.truststore.location=c:/kafka/kafka_2.12-2.1.1/kafka.server.truststore.jks
ssl.truststore.password=Kafkaflow1
ssl.keystore.location=c:/kafka/kafka_2.12-2.1.1/kafka.server.keystore.jks
ssl.keystore.password=Kafkaflow1
ssl.key.password=Kafkaflow1
位于
的Apache文档https://kafka.apache.org/documentation/#security_ssl
说要用以下方法测试密钥和信任存储集
openssl s_client -debug -connect localhost:9093 -tls1
它说您应该看到此命令的证书输出,但是当我这样做时,我会看到
将“屏幕”加载到随机状态-完成CONNECTED(000001F4)写入 0x784740 [0x78eb30](92字节=> 92(0x5C))0000-16 03 01 00 57 01 00 00-53 03 01 5c 87 7e 7d d2 .... W ... S ...〜}。 0010-b4 e4 43 e0 fd 8d a3 96-4b 15 75 7d b8 5c 6c 6a ..C ..... K.u}。\ lj 0020-是b0 f8 f6 20 bf 52 d1-eb 3f 3c 00 00 26 00 39 .... .R ..?<..&。9 0030-00 38 00 35 00 16 00 13-00 0a 00 33 00 32 00 2f .8.5 ....... 3.2./ 0040-00 05 00 04 00 15 00 12-00 09 00 14 00 11 00 08 ................ 0050-00 06 00 03 01 00 00 04-00 23 .........#005c- 从0x784740 [0x78a320]读取(5个字节=> -1 (0xFFFFFFFF))写道:errno = 10053
因此不确定是协议问题还是设置错误,
此外,当我尝试在没有任何使用者或生产者的情况下仅在本地启动服务器时,只要启动代理,它就会加载正常。但是,当我与消费者/生产者建立联系时,即使我在消费者/生产者上未设置SSL,它也不会拒绝授权。我以为这会否定?
任何帮助将不胜感激