cURLを実行すると0x80092012でエラー

事象

Windows環境でcURLを実行すると以下の様なエラーが発生する。

C:\Users\hoge>curl https://www.google.com
curl: (35) schannel: next InitializeSecurityContext failed: 
CRYPT_E_NO_REVOCATION_CHECK (0x80092012)
失効の関数は証明書の失効を確認できませんでした。

原因

多分cURL.exeの不具合(作りこみ不足)と思われる。
curl8.9.1まで当エラーが発生していた。
curl8.10以降では同じコマンドを実行しても当エラーは発生しない。
(証明書の失効確認まで行える様になった)

暫定対応方法

オプションに--ssl-no-revokeを付ける。

C:\Users\hoge>curl https://www.google.com
<!doctype html><html itemscope=(以下略)

恒久対応方法

Windows版のcurlを別途置き、配置した側を利用するようにする。(※1)

※1
元々配置されているcURLWindows Updateで書き換えられると思われる。
そのため、それを上書きするのは良くないと思うので。

対応方法

  1. cURLWindows版をダウンロードする。
    curl for Windows
  2. 適当なフォルダに配置する。(ex. C:\Program Files)
  3. 環境変数PATHに追加する。(※2)

※2
%SystemRoot%system32 より前に追加しなければならない。
通常cURL.exeはc:\Windows\system32配下に配置されている。
そのため、単純にPATHに追加しただけでは、古いcURLが使われてしまうので。

なお、きちんと設定できているかはwhereコマンドを使えば確認できる。
(配置したcurlが優先順位低い場合は設定見直す必要有)

C:\Users\hoge>where curl
C:\Program Files\curl\curl.exe
C:\Windows\System32\curl.exe

その他

  • Windowsアップデートが制限されている環境下で発生していた事象である。
  • 環境変数の設定をするため、コマンドプロンプトは再度立上げする必要がある。
  • 当エラーを解決しても、SASEやプロキシ経由の通信で証明書のエラーを解決しないといけない場合がある。 その場合は別途証明書の追加対応を行う必要がある。
  • 他のアプリが当cURLを利用していると通信エラーになる場合がある。
    私の場合はPower BI Desktopがこれが原因で動かなくて嵌っていた。

参考リンク

ja.stackoverflow.com