问题现象描述
执行编译TensorFlow 1.15.5命令时提示unable to find valid certification path to requested target证书校验失败,详细信息如下:

关键过程、根本原因分析
关键错误信息:下载依赖组件时,找不到请求目标的有效证书路径。
| PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
|
结论、解决方案及效果
- 通过浏览器导出证书。
使用浏览器(本文以谷歌浏览器为例)访问https://github.com,按照下图操作顺序导出保存证书,证书文件后缀为crt,例如ca.crt。

- 将浏览器导出的证书导入到服务器。
- 将证书上传到服务器。
- 导入证书。
| keytool -import -alias ca -keystore /usr/lib/jvm/java-11-openjdk-11.0.21.9-1.oe2203sp3.aarch64/lib/security/cacerts -file ca.crt -trustcacerts -storepass changeit -noprompt
|
- 导入证书命令参数说明:
- -alias:指定别名(用户可以自定义名称)。
- -keystore:指定存储文件,在java/lib/security的目录下(用户需要根据环境中实际路径指定)。
- -file:证书文件(绝对路径+证书文件名)。
- -storepass:指定存储密码,默认为changeit,查询或删除配置时,需要用到此密码。
- -trustcacerts:表示将信任的CA证书添加到密钥库中。
- -noprompt:可选项,关闭提示信息。
- cacerts证书库默认密码为“changeit”(如果使用之前有修改过,则使用修改过的密码)。
- 查看证书是否导入成功。
| keytool -list -storepass changeit -keystore /usr/lib/jvm/java-11-openjdk-11.0.21.9-1.oe2203sp3.aarch64/lib/security/cacerts | grep -w ca
|

回显信息显示存在对应别名,代表证书导入成功。
如果需要删除证书,可以执行以下命令。
| keytool -delete -storepass changeit -keystore /usr/lib/jvm/java-11-openjdk-11.0.21.9-1.oe2203sp3.aarch64/lib/security/cacerts -alias ca
|
- 重启设备。
reboot
- 重启设备后需重新配置Tensorflow编译配置。
- 配置网络代理,请参见配置网络代理。
- 设置pip源。
| pip config set global.index-url https://mirrors.huaweicloud.com/repository/pypi/simple
pip config set global.trusted-host mirrors.huaweicloud.com
|
- 添加Bazel信息到环境变量中。
| export PATH=/path/to/bazel/bazel-0.26.1/output:$PATH
|
- 添加Python信息添加到环境变量中。
| export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/python3.7.5/bin:$PATH
|
- 重新编译TensorFlow。
| bazel build --config=v1 --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" //tensorflow/tools/pip_package:build_pip_package
|