API を触る機会が増えたことで、技術ドキュメントやチャットツールのサンプルに curl コマンド が頻繁に登場するようになりました。 読み方はカールと読みます。「とりあえずコピペで動かしているけど、実はよく分かっていない」という声もよく聞きます。
この記事では、curl の基本から、企業ネットワークでよく発生する SSL エラー、 そして Git Bash と Windows curl の“中身の違い”まで、現場で本当に役立つポイントに絞って解説します。
🔧 curl の基本とよく使うオプション
curl は「URL を扱うためのコマンドラインツール」で、API の疎通確認やデバッグで欠かせません。
基本構文はシンプルです。
curl [オプション] URLよく使うオプションを目的別に整理するとこうなります。
| 目的 | オプション | 説明 |
|---|---|---|
| レスポンスを詳しく見たい | -v | ヘッダ含む詳細ログ |
| ヘッダだけ確認したい | -I | HEAD リクエスト |
| JSON を送りたい | -H -d | ヘッダ指定・データ送信 |
| POST したい | -X POST | HTTP メソッド指定 |
| リダイレクトを追いたい | -L | Location を追跡 |
| ファイルを保存したい | -o | 保存先指定 |
📡 API を叩くときの実例
GET の例
curl -v https://api.example.com/usersJSON を POST
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Yoshinori Kajimoto"}'⚠️ 企業ネットワークで頻発する curl の SSL エラー
curl を使っていると、企業ネットワーク特有の SSL エラーに遭遇することがあります。 特に最近よく見るのがこの 2 つです。しかもGitBashであれば、うまく通ります。
❗ curl: (60) SSL certificate problem: self signed certificate
Git Bash では通るのに、PowerShell や CMD の curl だけが失敗する── この現象には明確な理由があります。
🔍 Git Bash と Windows curl の“中身の違い”
同じ curl に見えて、実は SSL の仕組みがまったく違います。
| 環境 | 内部の SSL ライブラリ | 特徴 |
|---|---|---|
| Git Bash の curl | OpenSSL(+Git 同梱の CA バンドル) | 独自 CA を使用/失効チェックが緩い |
| Windows curl | Schannel(Windows 証明書ストア) | 失効チェックが厳しい/企業ネットワークの影響を受けやすい |
🧱 Git Bash の curl は「Git が同梱する CA バンドル」を使う
Git for Windows は独自の CA バンドルを持っています。
C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crtそのため Git Bash の curl は、
- Windows の証明書ストアを参照しない
- Git が同梱している CA を信頼する
- 失効チェックも OpenSSL のルールで動く(比較的ゆるい)
結果として、企業ネットワークの SSL インスペクション環境でも動きやすいです。
🪟 Windows curl は「Schannel」を使うためエラーが出やすい
Windows curl は Schannel を使います。 Schannel は次のような厳格なチェックを行います。
- Windows 証明書ストアにある CA だけを信頼
- CRL/OCSP による失効確認を必ず実施
- 失効確認ができない場合はエラーにする
そのため、企業ネットワークでは次のようなエラーが頻発します。
❗ curl: (35) schannel: CRYPT_E_NO_REVOCATION_CHECK
curl: (35) schannel: next InitializeSecurityContext failed:
CRYPT_E_NO_REVOCATION_CHECK (0x80092012)
失効の関数は証明書の失効を確認できませんでした。
これは Schannel が証明書の失効確認(CRL/OCSP)に失敗したことを意味します。
企業ネットワークでは、
- 外部の CRL/OCSP サーバーへのアクセスが制限されている
- 社内 CA が Windows に登録されていない
といった理由で、失効確認が通らずエラーになります。
Git Bash の curl は OpenSSL 系で失効チェックが緩いため、同じ環境でも問題が表面化しません。
🛠 現場で使える対処方法
1. Windows に社内 CA をインポートする(最も正しい)
IT 部門が配布している社内ルート証明書を 信頼されたルート証明機関 に登録します。
2. curl に Git Bash の CA バンドルを指定する
Windows curl に OpenSSL の CA を使わせる方法。
curl --cacert "C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt" https://example.com3. 一時的に検証を無効化する(非推奨)
curl -k https://example.com疎通確認や証跡取得のための一時利用なら現場ではよく使われます。
📝 まとめ:curl を理解すると API が扱いやすくなる
- curl は API 時代の必須ツール
- Git Bash と Windows curl は SSL の仕組みが根本的に違う
- 企業ネットワークでは Windows curl のほうがエラーになりやすい
- self-signed や CRYPT_E_NO_REVOCATION_CHECK の原因はこの違い
- 社内 CA を Windows に登録するのが最も正しい解決策
curl の基本と SSL の仕組みを押さえておくと、 API のデバッグや証跡取得が格段にスムーズになります。

コメント