Yuuki

Yuuki's Blog

Hacker. Code Enthusiast.
github
bilibili
twitter

深い理解HTTPS証明書

要約#

HTTPS 証明書は、ウェブサイトのデータの安全な転送を保護するためのデジタル証明書であり、主に身元確認とデータの暗号化によって実現されます。証明書の種類には、DV SSL、OV SSL、EV SSL があり、それぞれに適用シナリオと特性があります。ブラウザは証明書の有効性をチェックし、証明書内の公開鍵を使用して通信を暗号化します。また、コマンドラインツールを使用してウェブサイトの HTTPS 証明書を手動で取得およびチェックし、一般名(CN)と代替名(SAN)を確認することもできます。

HTTPS 証明書とは何ですか?#

HTTPS 証明書、または SSL 証明書または CA 証明書とも呼ばれるものは、ウェブサイトのデータの安全な転送を保護するためのデジタル証明書です。この証明書により、ユーザーとウェブサイト間の通信中にデータが第三者によって傍受または改ざんされないことが保証されます。同時に、ブラウザは証明書をチェックして、ユーザーがアクセスしているウェブサイトが本物で信頼できるものであるかを確認することもできます。

HTTPS 証明書の役割は何ですか?#

HTTPS 証明書の役割は、主に以下の 2 つの側面に現れます:

  1. 身元確認: HTTPS 証明書にはウェブサイトの身元情報が含まれています。ユーザーが HTTPS 証明書を使用しているウェブサイトにアクセスすると、ブラウザは証明書の有効性をチェックします。証明書が有効な場合、ブラウザはそのページが安全であると表示します。証明書が無効または改ざんされている場合、ブラウザはユーザーに警告を表示します。
  2. データの暗号化: HTTPS 証明書は、ユーザーのブラウザとサーバーの間に暗号化された通信チャネルを確立することができます。これにより、データが第三者によって傍受または改ざんされることなく転送されるため、ユーザーのプライバシーデータが効果的に保護されます。

HTTPS 証明書にはどのような種類がありますか?#

HTTPS 証明書には、次のような主要な種類があります:DV SSL 証明書(ドメイン検証型)、OV SSL 証明書(組織検証型)、および EV SSL 証明書(拡張検証型)。

Alibaba Cloud による異なる証明書の説明は次のとおりです:

OV(Organization Validation)証明書

  • OV 証明書は、企業 SSL 証明書の選択肢であり、企業の認証によって SSL 証明書の真正性を保証し、ウェブサイトのリスクを拒否します。
  • OV 証明書は特殊なドメイン名(gov、edu、.gov、.org、.jp(国の略称)など)の発行をサポートしています。
  • OV 証明書は証明書のマージをサポートし、複数の証明書(ドメイン)を 1 つの証明書にマージして発行することができます。

DV(Domain Validation)証明書

  • DV 証明書は、個人のウェブサイト / テストに使用されることが一般的であり、DV 証明書は人間の審査を必要とせず、ドメインの検証情報が正しい場合には 1〜15 分で発行されます。
  • DV 証明書は特殊なドメイン / パブリック IP に対して証明書を発行することはできません(例:edu、.gov、.org、.jp(国の略称)などの接尾辞を持つドメイン)。
  • DV 証明書は複数のドメインを 1 つの証明書にマージすることはできません。

EV(Extended Validation)証明書

  • EV 証明書は、最高レベルのパスワードセキュリティ、信頼レベル、および権威レベルを提供し、ウェブサイトのデータ転送の安全性を保証します。
  • 利点:許可されていない代理申請証明書の状況を防ぎます。

ブラウザはどのように HTTPS 証明書をチェックしますか?#

ウェブサイトにアクセスする際、ブラウザは通常、次の手順でウェブサイトの証明書をチェックします:

  1. 証明書の要求:HTTPS ウェブサイトにアクセスすると、ブラウザはウェブサイトに対して HTTPS 証明書を要求します。
  2. 発行者の確認:ブラウザは証明書の発行者が信頼できる認証局であるかどうかを確認します。そうでない場合、ブラウザは警告を表示します。
  3. 証明書の検証:ブラウザは証明書の有効性を検証します。これには、証明書の有効期限のチェックや、証明書のドメインがアクセスしているウェブサイトのドメインと一致しているかどうかのチェックが含まれます。
  4. 公開鍵の使用:証明書が有効な場合、ブラウザは証明書内の公開鍵を使用してウェブサイトに送信する情報を暗号化します。同時に、ウェブサイトは対応する秘密鍵を使用して送信された情報を解読します。

証明書のドメインとは何ですか?#

証明書のドメイン、または ** コモンネーム(Common Name)またはサブジェクトオルタナティブネーム(Subject Alternative Name)** とも呼ばれるものは、HTTPS 証明書の重要な部分です。これは、証明書がどのウェブサイトに対して発行されたものかを示しています。

** コモンネーム(Common Name, CN)** は、証明書の主要な識別子であり、通常は証明書で保護されているホスト名(例:www.example.com)です。以前の SSL 証明書では、コモンネームは証明書で保護されているドメインを識別するための唯一のフィールドでした。また、コモンネームの値は 1 つしか存在しませんでした。

しかし、インターネットの発展に伴い、1 つの証明書で複数のドメインを保護する必要がある場合があります。そのため、** サブジェクトオルタナティブネーム(Subject Alternative Name, SAN)** が導入されました。SAN は拡張フィールドであり、1 つ以上のドメインまたはサブドメインを含むことができます。たとえば、証明書の SAN にはexample.comwww.example.commail.example.comなどが含まれる場合があります。これにより、1 つの証明書でこれらの 3 つのドメインを保護することができます。

どのようなタイプの証明書ドメインがありますか?#

HTTPS 証明書のドメインには、次のような主要なタイプがあります:

  1. シングルドメイン SSL 証明書:このタイプの証明書は、特定の 1 つのドメインのみを保護することができます。たとえば、証明書の CN または SAN にexample.comが含まれている場合、この証明書はexample.comのウェブサイトのみを保護します。
  2. マルチドメイン SSL 証明書:このタイプの証明書は、複数のドメインを保護することができます。これらのドメインは、証明書のサブジェクトオルタナティブネーム(SAN)にリストされる必要があります。たとえば、証明書のサブジェクトオルタナティブネームにwww.example.comexample.comsub.example.comが含まれている場合、この証明書はこれらの 3 つのウェブサイトを保護します。
  3. ワイルドカード SSL 証明書:このタイプの証明書は、1 つのメインドメインとそのすべての 1 レベルのサブドメインを保護することができますが、2 レベル以上のサブドメインやそれ以下のサブドメインは保護できません。たとえば、CN または SAN に*.example.comが含まれている場合、この証明書は example.com とそのすべての 1 レベルのサブドメインのウェブサイトを保護します。

ウェブサイトの HTTPS 証明書を手動でチェックする#

Unix ベースのオペレーティングシステムを使用している場合、次のコマンドを使用してターゲットウェブサイトの SSL 証明書を取得できます:

website=example.com
echo | openssl s_client -servername $website -connect $website:443 2>/dev/null | openssl x509 -noout -text

このコマンドでは、次のことが行われます:

  • openssl s_client -servername $website -connect $website:443の部分は、SSL/TLS クライアントを起動し、指定したウェブサイトの 443 ポート(HTTPS のデフォルトポート)に接続します。-servernameパラメータは SNI(Server Name Indication)を指定するために使用されます。これは、ハンドシェイクフェーズでサーバー名を送信するための TLS 拡張です。
  • 2>/dev/nullの部分は、エラーメッセージを /dev/null にリダイレクトするためのものです。つまり、エラーメッセージは表示されません。
  • openssl x509 -noout -textの部分は、s_client コマンドから取得した証明書情報を解析します。-nooutパラメータは、エンコードされた証明書を出力しないことを意味し、-textパラメータは証明書の詳細情報をテキスト形式で表示することを意味します。

ターゲットウェブサイトが HTTPS 証明書を使用している場合、このコマンドは証明書の詳細情報を含む出力を返します。証明書のバージョン、シリアル番号、署名アルゴリズム、発行者、有効期間、サブジェクト、公開鍵情報、拡張フィールドなどが含まれます。

証明書のコモンネームとサブジェクトオルタナティブネームをチェックする#

上記のコマンドの出力結果でSubject:行を検索すると、証明書のコモンネームをここで見つけることができます。

20240607_180859

X509v3 Subject Alternative Name:行を検索すると、証明書のサブジェクトオルタナティブネームをここで見つけることができます。

20240607_181031

証明書の一意の識別子を取得する#

証明書の一意の識別子を取得する必要がある場合、通常は証明書のフィンガープリントを使用します。証明書のフィンガープリントは、証明書の DER エンコード(バイナリ形式)に特定のハッシュアルゴリズム(SHA-256 など)を適用して得られます。次のコマンドを使用して証明書の SHA-256 フィンガープリントを表示できます:

website=example.com
echo | openssl s_client -servername $website -connect $website:443 2>/dev/null | openssl x509 -noout -fingerprint -sha256

このコマンドは、SHA256 Fingerprint=XX:XX:XX:...のような出力を返します。XX:XX:XX:...の部分が証明書の SHA-256 フィンガープリントであり、証明書の一意の識別子として使用できます。各証明書のフィンガープリントは一意であり、証明書の他の情報(サブジェクトや発行者など)が同じであっても、証明書自体が異なる場合はフィンガープリントも異なります。したがって、フィンガープリントは証明書を一意に識別するために使用できます。フィンガープリントが同じである場合、それらの証明書は完全に同じです。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。