WSLにおけるSSL証明書エラー

WSLにおけるSSL証明書エラー

先日、社用PCのWSLにRustをinstallしようとしたところ、CurlがSSLエラーを吐いてしまった。
証明書を無視するオプションを付けても解決しない。
いろいろ調べると、会社指定のZscalerが原因であることが判明した。

Zscalerに限らず、SSL証明書に関連するセキュリティソフト関連の問題も、同様だと思われる。

TL; DR

  • ZscalerのSSL証明書をWindowsからエクスポートする
  • 上記のSSL証明書をpem形式に変換する
  • その証明書をWSL内のSSL証明書ファイルとして配置する

発端

WSLにRustをinstallしようとしたところ、CurlがSSLエラーを吐いてしまった。

1
2
3
4
5
6
7
8
# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

しかし、別のPCではこの問題は生じていない。
WSLではネットワーク関係の問題が起きやすいので、そのあたりを踏まえつつ、調査を続けた。

Tweet

今回は名前解決の問題ではなかった。
頻繁に登場するので、WSLの通信で問題が起きると、いつでも頭をよぎってしまう……。

特定

StackOverflowのこの回答内で、
問題を切り分けるために、以下のコマンドを実行するように示されていた。

1
openssl s_client -connect google.com:443

実行結果をChatGPTに投げつつ確認したところ、常駐セキュリティソフトの存在ゆえにWSL内でSSL証明書のエラーが生じていることが分かった。
今回の場合で言えばZscalerが常駐しており、ネットワーク通信はそこを経由する。
Zscalerが提供したSSL証明書を利用しない場合、そこでエラーが生じる。
WindowsにはZscalerのSSL証明書がインストールされているので、Windows側ではこの問題は生じていない。

Solution

Windows側にあるZscalerのSSL証明書を、WSL側にinstallする

手順

ZscalerのSSL証明書をWindowsからエクスポートする

Redditのthreadに従う。

  1. Win+Rからcertmgr.mscを起動する
  2. 「信頼されたルート証明機関」 > 「証明書」 > Zscalerの証明書を選択する
  3. 右クリック > 「すべてのタスク」 > 「エクスポート」を選択する
  4. DER形式で保存する

pem形式に変換する

opensslを利用して、DER形式からpem形式に変換する。

1
openssl x509 -inform der -in zscaler.cer -out zscaler.pem

WSL内のSSL証明書ファイルとして配置する

/etc/ssl/certs/zscaler.pemca-certificates.crtとして配置する。
これは望ましい方法ではない。

Tweet

本来は/usr/local/share/ca-certificates/に配置して、sudo update-ca-certificatesを実行で取り込まれるそうだ。
だが、なぜやら反映されなかった。

本来の解決方法は、こちらのQiitaの記事を参照。

コメント