我正在尝试使用openssl和keytool命令用ssl配置kafka。我将证书配置为接受特定的cn和一些可选名称;以下是我所做的:
openssl req -x509 -nodes -newkey rsa:2048 -days 3650 -sha256 -keyout ca-key -out ca-cert -reqexts SAN -extensions SAN -subj '/CN=kafkabroker' -config <(cat /etc/ssl/openssl.cnf; printf "[SAN]\nsubjectAltName=DNS:kafkabroker,DNS:kafka-broker,DNS:localhost,DNS:host.docker.internal,IP:127.0.0.1,IP:1.1.1.1, IP:2.2.2.2")
keytool -keystore kafka.server.keystore.jks -alias kafkabroker -validity 365 -genkey -storepass passw -keypass passw -ext SAN=DNS:kafkabroker,DNS:localhost,IP:1.1.1.1,DNS:juliet,DNS:host.docker.internal,IP:2.2.2.2,IP:127.0.0.1
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert
keytool -keystore kafka.server.keystore.jks -alias kafkabroker -certreq -file cert-file
openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 3650 -CAcreateserial -passin pass:passw
keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert
keytool -keystore kafka.server.keystore.jks -alias kafkabroker -import -file cert-signed
keytool -keystore kafka.client.keystore.jks -alias kafkabroker -validity 365 -genkey -storepass passw -keypass passw -ext SAN=DNS:kafkabroker,DNS:localhost,IP:1.1.1.1,DNS:juliet,DNS:host.docker.internal,IP:2.2.2.2,IP:127.0.0.1
keytool -keystore kafka.client.keystore.jks -alias kafkabroker -certreq -file cert-file
openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 3650 -CAcreateserial -passin pass:passw
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert
keytool -keystore kafka.client.keystore.jks -alias kafkabroker -import -file cert-signed
keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert
在本地环境中,使用主机名“kafkabroker”可以工作,但当我在另一个环境中使用相同的证书运行kafka时,该环境在证书创建过程中配置了ip,它会显示:
java.security.cert.certificateexception:不存在主题替代名称
我不明白为什么。我检查了jks文件,它是信任库和密钥库,我可以清楚地看到“可选名称”部分完全填充了上述名称和ip地址。
1条答案
按热度按时间rqenqsqc1#
主要的问题是,kafka需要在签名服务器证书(在server.keystore.jks中)中使用san。如我所见,在“请求”部分中,您没有添加san名称:
准备好添加/编辑/etc/pki/tls/openssl.cnf(centos/rhel目录)或/etc/ssl/openssl.cnf(其他)-服务器证书(或模拟)部分。另一种方法是创建自己的openssl.cnf副本,如我的示例(文件openssl sigh.cnf)所示。服务器证书部分可以是这样的(cnf文件中的任何位置):
然后通过以下方式检查结果:
您应该可以在x509扩展中看到san文本行。
我不确定client.keystore-您创建了另一对具有相同名称的证书。请先检查server.keystore.jks。