セキュリティ

SSL 証明書チェッカー

ドメインを入力すると、そのサーバーが実際に配信している TLS 証明書をハンドシェイクで取得して表示します。有効期限まであと何日か、証明書チェーンがパブリックルートで検証できるか、ホスト名が一致するか、SAN がどのホスト名を含むか、そしてサーバーがまだ受け付ける TLS バージョンまで確認できます。チェーン上の各証明書は PEM として書き出せるほか、証明書デコーダーに渡してフィールド単位で読むこともできます。無料・登録不要です。

  • PEM を用意しなくても、ドメイン名だけで実際のハンドシェイクを実行
  • 有効期限までの残り日数に加えて、開始日時と失効日時も正確に表示
  • チェーンの信頼性・ホスト名一致・有効期間・中間証明書の配信を個別に判定
  • TLS 1.0 〜 1.3 をバージョンごとに探索し、ネゴシエートされた暗号スイートも表示
  • SAN・鍵長・フィンガープリントを含むチェーン全体を表示し、PEM や JSON で書き出し

ハンドシェイク時に送るホスト名です。空欄なら上の宛先を使います。IP を直接指定しつつ特定の名前の証明書を取得したいときに指定します。

ドメインを入力してチェックを押してください。残り日数、信頼とホスト名の判定、TLS バージョンの対応状況、証明書チェーンがここに表示されます。

概要

証明書のトラブルで必ず問われること——いつ切れるのか、信頼されているのか、どの名前を含むのか、実際に何がネゴシエートされるのか——を 1 回のチェックで確認できます。

  1. 01

    期限までのカウントダウン

    残り日数を数値で示し、期限が近づくと色が変わります。横には UTC での正確な有効期間も並べて表示します。

  2. 02

    判定を項目ごとに表示

    信頼、ホスト名の一致、有効期間、チェーンの配信状況、非推奨プロトコルの受け入れを 1 項目ずつ判定するので、名前の不一致がチェーン自体の問題を覆い隠しません。

  3. 03

    証明書が対象とする名前をすべて表示

    ワイルドカードを含むサブジェクト代替名を一覧表示するので、サブドメインを向ける前に対象範囲を確認できます。

  4. 04

    TLS バージョンの対応状況

    TLS 1.0・1.1・1.2・1.3 をそれぞれ個別に探索し、受け付けるバージョンについてはネゴシエートされた暗号スイートも表示します。

  5. 05

    サーバーが実際に送るチェーン

    サーバー証明書・中間証明書・サーバーが同梱するルート証明書を、発行者、鍵、用途、フィンガープリント、OCSP と CRL の URL まで含めて展開できます。

  6. 06

    書き出しと受け渡し

    チェーンは fullchain.pem として、結果全体は JSON としてダウンロードできます。任意の 1 枚を証明書デコーダーで開いて詳細に読むこともできます。

使い方

ブラウザと同じ順序で証明書を確認します。宛先を入力し、判定を読み、必要ならチェーンを掘り下げます。

  1. 01

    ドメインを入力し(完全な URL の貼り付けも可能で、スキームとパスは無視されます)、チェックを押します。

  2. 02

    443 以外で待ち受けている場合はポートを、IP へ直接つなぐ場合は SNI を指定します。

  3. 03

    カウントダウンとチェック項目(信頼、ホスト名、有効期間、チェーンの配信、非推奨プロトコルの受け入れ)を確認します。

  4. 04

    TLS バージョンの一覧で TLS 1.0 や 1.1 がまだ有効になっていないかを確認し、暗号スイートも見ておきます。

  5. 05

    チェーン上の証明書を開いて SAN とフィンガープリントを確認し、必要なら PEM か JSON で書き出します。

詳細

証明書の壊れ方は数パターンに限られるため、合否をひとつにまとめず、それぞれを独立した行として表示します。

  • DevKitLab のサーバーから実際にハンドシェイクするため、手元のブラウザのキャッシュではなく、そのサーバーが到達したエンドポイントの状態を確認できます
  • 信頼とホスト名検証を分けて報告します。証明書自体は正当でも別の名前に発行されている、というケースは珍しくありません
  • ブラウザが AIA で補完してしまう不完全なチェーンも明示します。厳格なクライアントや古い端末は補完しません
  • 期限切れの証明書は残り日数がマイナス表示になるため、どれだけ放置されていたかがすぐわかります
  • 接続直後にそのポートで TLS を開始するサービスに対応しており、暗黙的 TLS のメールポート、LDAPS、互換性のある非標準ポートのサービスを確認できます
  • SNI を宛先とは別に指定できるので、ロードバランサーや anycast の背後にある特定のノードを個別に検証できます

活用シーン

証明書の有効期間は短くなり続けており、90 日サイクルでの更新も珍しくありません。このページを開く人の多くは、何かが壊れた直後です。

  1. 更新が本当に反映されたか確認する

    更新後にホスト自体をチェックすれば、新しい証明書がディスクに置かれただけでなく実際に配信されていることをカウントダウンで確認できます。

  2. ブラウザの警告の原因を切り分ける

    期限切れ・チェーンが信頼できない・ホスト名の不一致という典型的な 3 原因を分けて確認でき、エラー画面から推測せずに済みます。

  3. 中間証明書の設定漏れを突き止める

    ブラウザでは開けるのに curl や Java、モバイルアプリで失敗する場合、原因はたいていチェーンが完全に配信されていないことです。

  4. サブドメインが対象に含まれるか確認する

    公開前に SAN の一覧を見て、ワイルドカードあるいは対象の名前が証明書に入っているかを確かめます。

  5. 非標準ポートのサービスを確認する

    465 のメール、993 の IMAPS、636 の LDAPS など、接続直後に TLS を開始するサービスならポートを指定して、提示される証明書を確認できます。

  6. 監査の前にプロトコルを点検する

    TLS 1.0 や 1.1 をまだ受け付けていないか、各バージョンでどの暗号スイートになるかを確認し、その結果をチケットに添付します。

関連情報

すでに PEM ファイルがあり、拡張フィールドまで細かく読みたい場合は 証明書デコーダーを使ってください。そもそも名前が解決しない場合や、発行を制御する CAA レコードを確認したい場合は DNS 検索から始めます。証明書のフィンガープリントを受け取った値と突き合わせたいときは ハッシュ生成ツールでローカルにダイジェストを計算できます。

使い方のヒント

チェック結果はひとつのエンドポイントのある瞬間のスナップショットです。次の習慣で結果の価値が上がります。

  • 利用者が実際に入力するホスト名を、www あり・なしの両方で確認してください。別々の設定で配信されていることがよくあります。
  • カウントダウンが 1 桁になる前に更新してください。自動更新が黙って失敗しているのが最も多い障害原因です。
  • チェーンの不備はブラウザが補完できても実際の不具合として扱ってください。API クライアントや古い Android、各言語のランタイムは補完しません。
  • ロードバランサーの背後は、IP と SNI を指定してノードごとに確認してください。1 台だけ古い証明書のままということがあります。
  • 依存がないと確認できたら TLS 1.0 と 1.1 は早めに無効化してください。いずれも非推奨で、監査でも指摘されがちです。
  • 障害対応を引き継ぐときは JSON をチケットと一緒に保存しておくと、その時点の状態が正確に残ります。

制限事項

このツールは 1 回の外向き TLS ハンドシェイクを行い、サーバーが提示した内容をそのまま報告します。総合的なセキュリティ評価より意図的に範囲を狭くしています。

  • 失効確認は行いません。証明書に記載された OCSP レスポンダーと CRL の URL は表示しますが問い合わせは行わないため、失効済みの証明書でも有効に見えることがあります。
  • チェックできるのはインターネットから到達できるホストのみです。プライベート、ループバック、リンクローカル、予約済みのアドレスは拒否されるので、内部サーバーには openssl s_client などのローカルツールを使ってください。
  • 結果は当サービスのサーバーが到達したノードの状態です。anycast や地域別ルーティングでは、別の地域に別の証明書が配信されることがあります。
  • 総合スコアは出しません。暗号スイートの優先順位、鍵交換の強度、既知のプロトコル脆弱性はこのチェックの対象外です。
  • 証明書透明性ログ、HSTS ポリシー、混在コンテンツは別の話題であり、ここでは検査しません。
  • チェックは DevKitLab のサービス経由で実行され、接続は当サービスが代行します。相手のホストから見えるのは当サービスのアドレスで、あなたのアドレスではありません。

よくある質問

有効期限、信頼エラー、ホスト名の不一致、ポート、そしてこのチェックが対象としない範囲についてのよくある質問です。

ウェブサイトの SSL 証明書を確認するには?

ドメイン(example.com、または完全な URL でも構いません。スキームとパスは無視されます)を入力してチェックを押します。ツールがそのホストへ TLS 接続を行い、配信されている証明書について残り日数、チェーンの信頼性、ホスト名の一致、SAN、受け付けている TLS バージョンを報告します。

SSL 証明書の有効期限はいつですか?

結果の上部に表示されるカウントダウンが、現在配信されている証明書の残り日数です。その横に UTC での開始日時と失効日時が並びます。マイナスの数値は、すでにその日数だけ期限を過ぎていることを意味します。

「チェーンが信頼できない」とはどういう意味ですか?

サーバーが提示したチェーンを、パブリックルートストアの証明書までたどって検証できなかったという意味です。よくある原因は、自己署名証明書、公開クライアントが知らない内部 CA、中間証明書の設定漏れ、あるいは証明書自体の期限切れです。検証器が返した理由は該当項目の横に表示されます。

ホスト名が一致しないと表示されるのはなぜですか?

証明書は SAN に記載された名前に対してのみ有効で、*.example.com のようなワイルドカードはラベル 1 段だけを対象とします(api.example.com には一致しますが、example.com や a.b.example.com には一致しません)。本ツールは信頼とホスト名を分けて報告するため、チェーンは正当でも別の名前に発行されている状況を見分けられます。

ブラウザでは開けるのに curl やアプリでは失敗します。なぜですか?

この組み合わせは、ほぼ確実にサーバーが中間証明書を送っていないことが原因です。ブラウザは証明書内の AIA から不足分を取得して黙って補完できますが、curl、Java、Go、古いモバイル端末は通常それを行いません。「チェーンが完全に配信されている」の項目がまさにこれを検出します。

443 以外のポートも確認できますか?

できます。ポート欄を指定するか、example.com:8443 のようにホストに付けて入力してください。465 のメール送信や 636 の LDAPS のように、接続直後から TLS を開始するサービスを確認できます。587 の STARTTLS のように平文で始めてから昇格する方式や、独自プロトコルの交渉後に TLS を有効にするサービスには対応していません。

SNI とは何で、いつ指定しますか?

SNI はハンドシェイク時に送るホスト名で、複数サイトを収容するサーバーがどの証明書を提示すべきかを判断するために使われます。既定では入力した宛先が使われます。IP へ直接つなぎつつ特定の名前の証明書を取得したいときに明示します。ロードバランサーの背後にある 1 台を個別に検証する場合に便利です。

証明書が失効しているかどうかも確認しますか?

いいえ。証明書に記載された OCSP レスポンダーと CRL の URL は表示し、ハンドシェイク時に OCSP レスポンスがステープルされたかどうかも示しますが、これらの URL には問い合わせません。失効済みでも有効期間内の証明書は、ここでは有効に見えます。

TLS 1.0 と 1.1 はまだサポートすべきですか?

通常は不要です。主要ブラウザは 2020 年に両方を廃止しており、監査でも指摘されます。バージョン一覧は 4 つのバージョンを個別に探索するため、設定ファイル上の記述ではなくサーバーが実際に受け付ける内容を確認できます。非推奨バージョンを受け付けている場合は警告として表示されます。

localhost や社内サーバーも確認できますか?

できません。チェックは当サービスのサーバーから実行されるためインターネット上のホストにしか到達できず、プライベート、ループバック、リンクローカル、予約済みのアドレスは拒否されます。内部ホストの場合はローカルで openssl s_client -connect host:port -servername host を実行し、得られた PEM を証明書デコーダーに貼り付けてください。

関連ツール

手元の証明書をそのまま読み解くか、名前の背後にある DNS レコードやアドレスへとたどっていきましょう。