技術的な話

Bazel build時に証明書エラーが出た時の対処方法

build時に証明書関係のエラーが出て少し困ったのでメモしておきます。

環境

  • Windows10 Pro
  • openjdk 1.8.0_345
  • bazel 5.3.1

エラー内容

必要なファイルをインターネット経由で探してくる際に証明書の検証に失敗している様子です。

多分会社内にProxyがある環境だと出るかも。

# エラー内容抜粋
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

対処方法

基本的にはbazelが動作するJava(JVM)に対して、きちんと証明書を登録してあげると解決します。

どの証明書が足りないかは…頑張って調べます。

1. bazelが使用しているJavaの場所を確認します

コマンドプロンプトを起動して以下を入力します。

# pathに設定しているjava.exeを確認
$ java -version
openjdk version "1.8.0_345"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_345-b01)
OpenJDK 64-Bit Server VM (Temurin)(build 25.345-b01, mixed mode)

# javaの場所を確認
$ where java
C:\Program Files\Eclipse Adoptium\jdk-8.0.345.1-hotspot\bin\java.exe

2. cacertsファイルの場所を確認します

前の手順で調べたJavaの場所でbinの1つ上の階層(ここではjdk-8.0.345.1-hotspot)に移動します。以下のような場所です。

jre若しくはlibの下にsecurityというフォルダが無いかを確認します。

私の環境だと以下にありました。

C:\Program Files\Eclipse Adoptium\jdk-8.0.345.1-hotspot\jre\lib\security

securityフォルダ以下にcacertsというファイルがあることを確認します。

次の手順ではこのファイルを更新していきます。

3. keytoolコマンドを使用してcacertsを更新します

ここで必要となるのは、

  1. エイリアス(登録する証明書の別名。まぁ分かりやすい名前であれば良いです。)
  2. 前の手順で調べたcacertsの場所
  3. 登録する証明書の場所

# command sample
$ keytool -import -alias <your_alias> -keystore <your_cacerts_path> -file <cert_path>

# 今回の例だと…
$ keytool -import -alias my_cert -keystore C:\Program Files\Eclipse Adoptium\jdk-8.0.345.1-hotspot\jre\lib\security\cacerts -file ./my_cert.crt

4. bazelが動作するJVMをオプション付きで起動します

既にbazelを起動している場合は一度停止しておいた方が良いです。

オプションとしてはjvm_argsを一つ追加するだけになります。

bazel --host_jvm_args '-Djavax.net.ssl.trustStore=C:\Program Files\Eclipse Adoptium\jdk-8.0.345.1-hotspot\jre\lib\security\cacerts' build src:all

もし他にも証明書が必要な場合は同様の手順でkeytoolで証明書を登録してbazelを再起動する必要があります。

恐らくこれで証明書関係のエラーが無くなり、通信出来るようになるかと思います。

-技術的な話
-, , ,