X.509 証明書

最終更新: 2025-04-27 23:24:38 +0800 +0800
原文は英語で書かれています。あなたはAI翻訳版を読んでいます。

X.509 証明書は、発行者の署名を通じて、サブジェクトの公開鍵を主張されたサブジェクト アイデンティティに結び付けます。証明書の検証では、その結び付きを特定のプロトコルと 接続で受け入れられるかどうかを判断します。証明書を解析したり署名だけを検証したり するだけでは十分ではありません。

エンコーディングと証明書の構造 #

証明書は ASN.1 値であり、通常は DER でエンコードされます。PEM は DER オブジェクトの Base64 テキスト形式です。

text
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

署名対象の tbsCertificate には、バージョン、発行者固有のシリアル番号、発行者の識別名、 有効期間、サブジェクトの識別名、SubjectPublicKeyInfo (SPKI)、拡張が含まれます。外側の 証明書には、発行者の署名アルゴリズム識別子と tbsCertificate に対する署名も含まれます。 発行者の公開鍵は別の証明書フィールドとして埋め込まれていません。発行者証明書または トラストアンカーへのパスを構築して見つけます。

TLS で使用される拡張 #

RFC 5280 の拡張は、証明書の使用方法を制約します。

  • basicConstraints は CA 証明書とパス長の制限を識別します。
  • keyUsage は keyCertSign や digitalSignature などの操作を制限します。
  • extendedKeyUsage はサーバー認証またはクライアント認証に使用を制限できます。
  • subjectAltName は TLS アイデンティティチェック用の DNS 名と IP アドレスを保持します。
  • サブジェクトキー識別子と認証局キー識別子はパス構築を支援しますが、署名検証の代わりにはなりません。

TLS クライアントは、要求された DNS 名を subjectAltName に対して検証します。共通名は、 正しく発行された現代の証明書における一般的なフォールバックではありません。有効時刻、 クリティカル拡張、署名アルゴリズムポリシー、基本制約、キー使用法はすべて検証に関与します。

パス、失効、ピンニング #

パス構築は、リーフ証明書からローカルに構成されたトラストアンカーまでの発行者の シーケンスを選択します。パス検証では、署名、時刻、basicConstraints、パス長および 名前の制約、キー使用法、クリティカル拡張、依拠当事者のアルゴリズムとポリシー要件を 検証します。アプリケーションが証明書ポリシーを使用する場合、ポリシーツリーで受け入れ 可能な証明書ポリシーを制限できます。サーバーはこの処理に必要な中間証明書を送信します が、通常、トラストアンカーはクライアントのトラストストアから提供されます。

CRL と OCSP は失効情報を提供しますが、クライアントの動作はプラットフォームとプロトコル によって異なります。実際のクライアント集団でテストせずに、即時の失効適用を保証しては なりません。証明書ピンニングは公開鍵または証明書の制約を追加します。運用上の復旧コスト があるため、定義済みのローテーション手順がある場合にだけ使用してください。

フィールドを調べるには openssl x509 -in cert.pem -noout -text を使用します。表示される SHA-256 フィンガープリントは、帯域外比較のための証明書バイト列のダイジェストです。 アイデンティティの証明でも、パス検証の代替でもありません。

証明書を認証する TLS 1.3 ハンドシェイクについては、TLS 1.3 を参照してください。

コメント

GitHub で閲覧・コメントする(投稿にはログインが必要です)