编译TensorFlow 1.15.5时提示证书校验失败的解决办法

问题现象描述

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

关键过程、根本原因分析

关键错误信息:下载依赖组件时,找不到请求目标的有效证书路径。

1
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

结论、解决方案及效果

  1. 通过浏览器导出证书。

    使用浏览器(本文以谷歌浏览器为例)访问https://github.com,按照下图操作顺序导出保存证书,证书文件后缀为crt,例如ca.crt。

  2. 将浏览器导出的证书导入到服务器。

    1. 将证书上传到服务器。
    2. 导入证书。
      1
      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”(如果使用之前有修改过,则使用修改过的密码)。
    3. 查看证书是否导入成功。
      1
      keytool -list -storepass changeit -keystore /usr/lib/jvm/java-11-openjdk-11.0.21.9-1.oe2203sp3.aarch64/lib/security/cacerts | grep -w ca
      

      回显信息显示存在对应别名,代表证书导入成功。

      如果需要删除证书,可以执行以下命令。

      1
      keytool -delete -storepass changeit -keystore /usr/lib/jvm/java-11-openjdk-11.0.21.9-1.oe2203sp3.aarch64/lib/security/cacerts -alias ca
      
    4. 重启设备。
      reboot

  3. 重启设备后需重新配置Tensorflow编译配置。

    1. 配置网络代理,请参见配置网络代理
    2. 设置pip源。
      1
      2
      pip config set global.index-url https://mirrors.huaweicloud.com/repository/pypi/simple
      pip config set global.trusted-host mirrors.huaweicloud.com
      
    3. 添加Bazel信息到环境变量中。
      1
      export PATH=/path/to/bazel/bazel-0.26.1/output:$PATH
      
    4. 添加Python信息添加到环境变量中。
      1
      2
      export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
      export PATH=/usr/local/python3.7.5/bin:$PATH
      

  4. 重新编译TensorFlow。

    1
    bazel build --config=v1 --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"  //tensorflow/tools/pip_package:build_pip_package