Java Kafka客户端对接AWS MSK PEM证书报tag=48错误问询
问题根因
该报错为Oracle JDK 8u261/OpenJDK 8u272之前的版本,原生不支持PBES2算法加密的PEM私钥解析导致,AWS ACM生成的加密私钥默认采用PBES2加密方案,直接传入Kafka客户端会触发解析失败。
可行解决思路
- 升级JDK版本
优先将你的Java 8环境升级到Oracle JDK 8u261及以上、或OpenJDK 8u272及以上版本,这些版本已原生支持PBES2加密私钥解析,升级完成后原有配置无需修改即可直接生效。 - 转换私钥为兼容格式(适配旧版本JDK)
若暂时无法升级JDK,可通过openssl工具将现有私钥转换为Java 8旧版本支持的PKCS#8 v1.5格式:- 将私钥内容保存为本地文件
private.pem - 执行转换命令:
openssl pkcs8 -topk8 -v1 PBE-SHA1-3DES -in private.pem -out private_pkcs8.pem - 执行时输入原有私钥密码,生成的
private_pkcs8.pem文件内容替换原有配置里的ssl.keystore.key值即可。
- 将私钥内容保存为本地文件
- 修正配置项格式问题
- 不要对PEM内容加多余的引号,Kafka会把引号识别为PEM内容的一部分导致解析失败
- 确保PEM内容里的换行符被正确传递,不要手动转义为
\r\n纯文本字符串,若通过环境变量注入,需确认注入工具保留了换行符的实际转义效果 - 补充缺失的PEM格式信任库配置,完整配置参考如下:
ssl.keystore.type=PEM ssl.keystore.certificate.chain=-----BEGIN CERTIFICATE----- 你的证书链内容 -----END CERTIFICATE----- ssl.keystore.key=-----BEGIN ENCRYPTED PRIVATE KEY----- 转换后的私钥内容 -----END ENCRYPTED PRIVATE KEY----- ssl.key.password=你的私钥密码 ssl.truststore.type=PEM ssl.truststore.certificates=-----BEGIN CERTIFICATE----- AWS MSK根CA证书内容 -----END CERTIFICATE-----
内容的提问来源于stack exchange,提问作者Muthuponmozhi Somasundaram
相关产品推荐
相关产品推荐

