构建Apollo开源项目时Bazel遇PKIX证书路径错误,需补充哪些设置?
解决Bazel构建Apollo时SSL证书验证失败问题
可行解决方案:
确认Bazel使用的JDK并导入证书
先执行命令查看Bazel实际依赖的JDK路径:bazel info java-home如果该路径与你配置的
$JAVA_HOME不一致,需要将证书导入到这个JDK的证书库中,命令如下(替换<bazel-java-home>为实际输出路径):sudo keytool -importcert -alias startsl -keystore <bazel-java-home>/jre/lib/security/cacerts -storepass changeit -file my.crt直接为Bazel指定信任证书库
可以临时构建时添加参数,也可以写入配置文件持久化:- 临时构建命令:
bazel build --jvmopt="-Djavax.net.ssl.trustStore=/path/to/your/cacerts" --jvmopt="-Djavax.net.ssl.trustStorePassword=changeit"- 写入项目根目录或用户目录下的
.bazelrc文件:
build --jvmopt="-Djavax.net.ssl.trustStore=/path/to/your/cacerts" build --jvmopt="-Djavax.net.ssl.trustStorePassword=changeit"注:
/path/to/your/cacerts替换为你已导入证书的证书库实际路径。配置Bazel代理及证书
若依赖代理访问外部资源,需为Bazel单独配置代理参数(结合证书):
在.bazelrc中添加:build --host_jvmopt="-Dhttps.proxyHost=你的代理地址" --host_jvmopt="-Dhttps.proxyPort=代理端口" build --host_jvmopt="-Djavax.net.ssl.trustStore=/path/to/cacerts" --host_jvmopt="-Djavax.net.ssl.trustStorePassword=changeit"或设置环境变量:
export BAZEL_JAVAC_OPTS="-Dhttps.proxyHost=xxx -Dhttps.proxyPort=xxx -Djavax.net.ssl.trustStore=/path/to/cacerts -Djavax.net.ssl.trustStorePassword=changeit"清理Bazel缓存重试
执行命令清理所有缓存,避免旧状态干扰:bazel clean --expunge之后重新执行构建命令。
验证证书导入有效性
检查证书是否成功导入证书库:keytool -list -alias startsl -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit若提示“别名不存在”,说明之前的导入操作未生效,需重新执行导入命令(注意使用sudo获取权限)。
内容的提问来源于stack exchange,提问作者eve
相关产品推荐
相关产品推荐

