NIFI通过InvokeHTTP调用API报PKIX path building错误如何解决
该报错为Nifi运行使用的Java环境信任库中未存入目标API服务的SSL证书,导致SSL握手校验失败,按以下步骤操作即可解决:
步骤1:确认Nifi使用的JDK路径
- 登录部署Nifi的Linux服务器,切换为Nifi进程启动用户,执行命令查看对应JDK路径:
ps -ef | grep nifi | grep -v grep | awk '{print $8}' | xargs ls -l - 记录返回的JDK根目录,下文用
${JAVA_HOME}代指该路径,常见路径示例:/usr/lib/jvm/java-1.8.0-openjdk
步骤2:下载目标API服务的SSL证书
将命令中<目标API域名>、<目标API端口>替换为实际参数(HTTPS默认端口为443),执行:openssl s_client -connect <目标API域名>:<目标API端口> < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > target_api.crt
执行完成后,当前目录会生成target_api.crt证书文件。
步骤3:将证书导入JDK默认信任库
JDK默认信任库密码为changeit,如果自定义过密码请替换为实际密码,执行:sudo ${JAVA_HOME}/jre/bin/keytool -import -alias target-api-cert -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file target_api.crt
- 提示输入信任库密码时输入
changeit回车 - 后续提示是否信任证书,输入
yes回车确认
步骤4:验证证书导入结果
执行命令校验证书是否成功存入信任库:${JAVA_HOME}/jre/bin/keytool -list -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit | grep target-api-cert
返回对应证书条目即为导入成功。
步骤5:重启Nifi服务生效
导入完成后必须重启Nifi才能加载新的信任库配置:cd <你的Nifi安装目录>/bin./nifi.sh restart
等待Nifi启动完成后,重新测试InvokeHTTP处理器即可正常调用目标API。
如果Nifi单独配置了自定义信任库而非使用JDK默认信任库,可在nifi.properties配置文件中查找nifi.security.truststore参数获取自定义信任库路径,将步骤3中-keystore后的路径替换为该自定义路径即可。
内容的提问来源于stack exchange,提问作者Aravind

