curlでHTTPSとTLS証明書を確認する方法|Windows・Linux対応




はじめに

curlを学び始めると、「HTMLを表示する以外に何ができるのか」「HTTPSや証明書も確認できるのか」と疑問に思うことがあります。HTTPS通信の基本的な確認に役立つのがcurlです。

curlを使うと、指定したURLへ実際に接続し、HTTPS通信の成否、証明書の検証、HTTPレスポンス、リダイレクト先を確認できます。ただし、JavaScriptで後から発生する通信までは十分に追えません。結論として、curlで静的な情報を調べ、Chrome DevToolsで実際の通信を確認するのが基本です。

要点 この記事ではexample.comを例に、HTTPS通信を理解するための基本的な確認方法を紹介します。curlだけでサイト全体の安全性を判定できるわけではありません。

curlコマンドとは

curlは、URLを指定してサーバーとデータを送受信するコマンドラインツールです。Linux専用ではなく、macOSやWindowsでも利用できます。

Windows 10・11にはcurl.exeが含まれています。Windows PowerShell 5.1ではcurlが別コマンドの別名になっているため、この記事ではcurl.exeと明記します。PowerShell 7以降やLinuxでは通常curlで実行できます。

まず、利用できるバージョンを確認しましょう。

curl.exe --version

Linuxでは次のように実行します。

curl --version

curlがHTTPSの確認に向いている理由

curlがHTTPSの確認に向いているのは、ブラウザの画面表示に隠れている通信結果を文字で確認し、記録へ残しやすいためです。

確認項目 分かること
URLの方式 http://https://
TLS接続 HTTPSで接続を開始できるか
証明書検証 発行元、ドメイン名、有効期限などの検証に失敗しないか
HTTPステータス 200301404など
リダイレクト 最終的にどのURLへ移動するか
レスポンスヘッダー サーバーが返したセキュリティ関連設定など

TLS証明書は、ドメイン名と公開鍵を結び付け、接続先を確認するための電子証明書です。curlはHTTPS接続時に証明書を既定で検証し、信頼できない発行元、ドメイン不一致などがあればエラーにします。

HTTPSとTLS証明書を確認する手順

1. 対象ページへ接続する

WindowsのPowerShellでは次のように実行します。-Iはヘッダーだけを取得し、-vは接続の詳細を表示、-Lはリダイレクトを追跡する指定です。

curl.exe -IvL https://example.com/

Linuxでは実行ファイル名だけが変わります。

curl -IvL https://example.com/

証明書エラーがなく、最終的に200など想定したステータスが返るか確認します。Windows版はTLS処理にSchannelを使うことがあり、表示内容がLinux版と異なる場合があります。

2. HTML内の外部URLを探す

PowerShellでは、取得したHTMLからHTTP・HTTPSの記述を検索できます。

curl.exe -sS -L https://example.com/ |
    Select-String -Pattern 'http://','https://'

Linuxではgrepを組み合わせます。

curl -sS -L https://example.com/ | grep -nE 'https?://'

scriptiframeimglinkなどに別ドメインのURLがあれば、ページ外から読み込んでいる素材の候補です。HTTPSページからhttp://の素材を読み込む状態はMixed Content(混在コンテンツ)と呼ばれ、ブラウザによる自動アップグレードやブロックの対象になります。

3. 外部URLを個別に確認する

見つけた外部URLごとに、同じ方法で接続と転送先を確認します。

curl.exe -IvL https://external.example/widget.js

HTMLにhttp://と書かれている場合、転送先がHTTPSでも埋め込み元をhttps://へ修正するのが基本です。ブラウザがHTTPリクエストを先にブロックし、リダイレクトまで到達しない可能性があるためです。

Chrome DevToolsで動的な通信を確認する

curlは指定したURLを一度取得するツールで、ページ内の素材を自動巡回せず、JavaScriptもブラウザのようには実行しません。タグマネージャー、広告、SNSウィジェットなどの動的な通信はChromeで補います。

  1. 対象ページをChromeで開き、F12キーでDevToolsを開きます。
  2. ページを再読み込みします。
  3. 「プライバシーとセキュリティ」でHTTPSと安全でないオリジンを確認します。
  4. 「Network」でscheme:httpまたはmixed-content:allを使って絞り込みます。
  5. 外部ドメイン、失敗した通信、証明書の警告を確認します。

この確認により、HTMLには直接書かれていない外部通信も見つけやすくなります。

確認するときの注意点

注意 証明書エラーを無視する-kまたは--insecureは、HTTPSの状態を確認するときには使用しません。問題がある接続まで成功したように見えてしまいます。

-IはHEADリクエストを送ります。接続先がHEADを拒否する場合は、ブラウザまたは通常のGETリクエストで再確認してください。また、-vの出力を共有するときは、AuthorizationCookie、トークンなどの秘密情報が含まれていないか確認します。

HTTPSで正常に接続できても、接続先の内容や運営元まで安全だと保証されるわけではありません。TLSが保護する範囲と、サイトやサービスそのものの信頼性は分けて考えましょう。

まとめ

curlを使うと、Webサイトや外部URLのHTTPS接続、TLS証明書の検証、HTTPステータス、リダイレクトをコマンドラインから確認できます。Windowsでもcurl.exeとして利用でき、Linux専用のコマンドではありません。

さらにHTML内のURLを調べ、Chrome DevToolsでJavaScript実行後の通信とMixed Contentを確認すると、curlの結果を補えます。まずは例示用URLでコマンドの見方を覚え、自分で管理しているページの表示確認などに応用してみてください。

参考情報

コメント

タイトルとURLをコピーしました