我正在尝试在简单的kafka生产者和代理之间创建SSL加密的通信。
我完全按照官方文档中的说明配置了代理:https://kafka.apache.org/documentation/#security
对于生产者,我使用的是kafka-python,其构造函数的配置如下:
self.producer = KafkaProducer(bootstrap_servers=broker,
request_timeout_ms=request_timeout,
security_protocol='SSL',
ssl_check_hostname=True,
ssl_cafile='ssl/CARoot.pem',
ssl_certfile='ssl/certificate.pem',
ssl_keyfile='ssl/key.pem')
这是发生了什么
ssl_check_hostname
设置为False
,则连接建立正确。作为证明,我尝试使用Wireshark嗅探数据包,但我什么也看不到,相反,通过PLAINTEXT通信,Wireshark可以获取所有数据包并可以轻松读取所有内容。ssl_check_hostname
设置为True
,则系统出现以下错误:
[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败:IP地址不匹配,证书对于[IP_address]无效
在Internet上搜索时,我发现此问题与在配置server.keystore期间插入的SAN有关。
keytool -keystore server.keystore.jks -alias localhost -validity 365000 -genkey -keyalg RSA -ext SAN = DNS:{fqdn}
我尝试过:
hostname --fqdn
命令的输出[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败:证书链中的自签名证书
我该如何解决这个问题?
谢谢。