X.509証明書の構造
デジタル証明書内の主体、発行者、有効期間、公開鍵、拡張領域などのフィールドを確認し、それぞれの意味を理解します。
「X.509証明書の構造」はCoddyKit上の無料Security+ Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSecurity+ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Security+ Academyコースには全4レッスンが含まれています。
X.509証明書とは
X.509証明書は、公開鍵を身元情報に結び付ける標準化されたデジタル文書です。X.509標準(RFC 5280で定義)は、世界中のデジタル証明書で使用される形式、フィールド、拡張機能を規定しています。TLS/HTTPS証明書、S/MIMEメール証明書、コード署名証明書、クライアント認証証明書は、すべてX.509形式に従います。X.509証明書の構造を理解すると、証明書情報の読み取り、証明書エラーの診断、証明書の導入と検証に関する適切な判断ができるようになります。
# View an X.509 certificate in human-readable form
openssl x509 -in certificate.pem -noout -text
# Or view a website's certificate directly
openssl s_client -connect example.com:443 2>/dev/null | \
openssl x509 -noout -textバージョン、シリアル番号、アルゴリズム
X.509証明書の最初のフィールドでは、基本的な識別情報を定義します。Version:X.509 v3が現在の標準です(v3で拡張機能が追加されました)。Serial Number:発行元CAが割り当てる一意の整数で、この証明書を識別します。CRL(失効リスト)で個々の証明書を失効させる際に使用されます。Signature Algorithm:CAが証明書への署名に使用したアルゴリズムを指定します(例:sha256WithRSAEncryptionやecdsa-with-SHA256)。このフィールドはTBSCertificateと外側の署名ラッパーに1回ずつ現れ、両者は一致していなければなりません。
# Certificate header fields
# Version: 3 (v3 = supports extensions)
# Serial Number:
# 30:4b:7e:bf:36:e3:46:a8
# Signature Algorithm: sha256WithRSAEncryption
# The serial number is used for revocation:
# CRL lists serial numbers of revoked certificates from this CAIssuerフィールドとSubjectフィールド
証明書に関係する当事者を定義する、特に重要なフィールドが2つあります。Issuerフィールドは、証明書に署名したCAを識別します(例:CN=DigiCert Global CA G2, O=DigiCert Inc, C=US)。Subjectフィールドは、証明書の発行対象となったエンティティを識別します(例:CN=*.example.com, O=Example Corp, C=US)。TLS証明書では、SubjectのCommon Name(CN)またはSubject Alternative Name(SAN)拡張機能によって、その証明書が有効なドメイン名を指定します。ブラウザーは、要求されたホスト名をこれらのフィールドと照合します。
# Extract Issuer and Subject
openssl x509 -in cert.pem -noout -subject -issuer
# subject=CN = *.google.com, O = Google LLC, L = Mountain View, ST = California, C = US
# issuer=CN = GTS CA 1C3, O = Google Trust Services LLC, C = US
# Check Subject Alternative Names (critical for hostname validation)
openssl x509 -in cert.pem -noout -ext subjectAltName
# DNS:*.google.com, DNS:google.com有効期間:notBeforeとnotAfter
有効期間は、証明書が有効になる期間を定義します。2つのタイムスタンプで構成されます。notBefore(この日時より前は証明書がまだ有効ではありません)とnotAfter(この日時を過ぎると証明書は期限切れになります)です。TLSクライアントは、現在時刻がこの期間内にあることを検証します。有効期間外の証明書が提示されると、ブラウザーで証明書エラーが発生するため、更新が必要です。秘密鍵が発行から有効期限までの間に侵害された場合の影響を抑えるため、現在のベストプラクティスでは、短期間だけ有効な証明書(Let's Encryptのように90日間)を発行します。
# Check certificate expiry dates
openssl x509 -in cert.pem -noout -dates
# notBefore=Jan 1 00:00:00 2026 GMT
# notAfter=Mar 31 23:59:59 2026 GMT
# Check how many days until expiry
echo | openssl s_client -connect example.com:443 2>/dev/null | \
openssl x509 -noout -enddate
# notAfter=Jun 15 12:00:00 2026 GMT公開鍵フィールド
証明書の中核となる情報はSubject Public Key Infoフィールドです。このフィールドには、認証対象となる公開鍵と、その公開鍵で使用されるアルゴリズムが含まれます。RSA証明書の場合、このフィールドにはRSA公開鍵の法と指数、およびビット長(2048、4096)が含まれます。ECC証明書の場合は、曲線名(例:prime256v1)と公開鍵ポイントが含まれます。CAがこの鍵ペアを生成するわけではありません。証明書の申請者が自身の鍵ペアを生成し、Certificate Signing Request(CSR)には公開鍵だけを含めて送信します。
# Generate a key pair and CSR (Certificate Signing Request)
# First, generate the private key
openssl genrsa -out server.key 2048
# Create a CSR containing the public key and subject info
openssl req -new -key server.key -out server.csr \
-subj '/CN=www.example.com/O=Example Corp/C=US'
# The CSR is sent to the CA for signing
# The CA returns the signed X.509 certificate
# Private key NEVER leaves your possessionX.509 v3拡張機能
X.509 v3では、証明書の機能を大幅に拡張する拡張機能が導入されました。拡張機能には、critical(この拡張機能を処理できないクライアントは証明書を拒否しなければなりません)とnon-critical(理解できなくても無視できます)があります。主な拡張機能には、次のものがあります。Subject Alternative Name(SAN):証明書の対象となる追加のドメイン名またはIPアドレス、Key Usage:鍵で実行できる操作(デジタル署名、鍵暗号化)を制限、Extended Key Usage:用途(TLSサーバー認証、クライアント認証、コード署名)をさらに制限、Basic Constraints:SubjectがCAであるかどうかを示します。
# View X.509 v3 extensions
openssl x509 -in cert.pem -noout -text | grep -A 20 'X509v3 extensions'
# X509v3 Key Usage: critical
# Digital Signature, Key Encipherment
# X509v3 Extended Key Usage:
# TLS Web Server Authentication, TLS Web Client Authentication
# X509v3 Subject Alternative Name:
# DNS:example.com, DNS:www.example.com
# X509v3 Basic Constraints: critical
# CA:FALSESubject Alternative Name(SAN)とCommon Nameの違い
従来は、Subjectの識別フィールドにあるCommon Name(CN)フィールドで、主要なドメイン名を指定していました。現在の証明書では、代わりにSubject Alternative Name(SAN)を使用します。ブラウザーがCNベースの照合(RFC 2818)を廃止し、SANを優先するようになったためです。SANを使用すると、1つの証明書で複数のドメイン(マルチSAN証明書)や、あるドメインのすべてのサブドメイン(ワイルドカード証明書:*.example.com)を対象にできます。SANのワイルドカードが対象にできるのは1階層だけです。*.example.comはwww.example.comを対象にできますが、sub.www.example.comは対象になりません。
CRL Distribution PointとOCSP拡張機能
2つの重要な拡張機能により、クライアントは証明書の有効期限前に、その証明書が失効しているかどうかを確認する方法を把握できます。CRL Distribution Points(CDP):CAのCertificate Revocation ListをダウンロードできるURLを含みます。Authority Information Access(AIA):リアルタイムで失効確認を行うCAのOCSP(Online Certificate Status Protocol)レスポンダーのURLを含みます。CRLは大きなファイルになる可能性があるため、現在のクライアントはCRLのダウンロードよりもOCSPを優先します。OCSP応答に付けられたCAのデジタル署名により、クライアントは真正な失効ステータス情報を受け取れます。
# Check OCSP status of a certificate
openssl ocsp -issuer intermediate_ca.pem \
-cert server_cert.pem \
-url http://ocsp.digicert.com \
-text
# Response shows: good, revoked, or unknown
# server_cert.pem: good
# This Update: Jun 21 00:00:00 2026 GMT証明書形式:PEM、DER、PFX
X.509証明書には、実際の運用で遭遇する複数のエンコード形式があります。PEM(Privacy Enhanced Mail):base64でエンコードしたDERを-----BEGIN CERTIFICATE-----ヘッダーで囲んだ形式です。人間が読みやすく、Linux/Apache/nginxで使用されます。DER(Distinguished Encoding Rules):バイナリ形式です。Javaアプリケーションや一部のWindows環境で使用されます。PFX/PKCS#12:証明書、証明書チェーン、秘密鍵を1つのパスワード保護ファイルにまとめるコンテナ形式です。Windows IISや、秘密鍵付きで証明書をエクスポートする場合に使用されます。P7B/PKCS#7:証明書チェーンだけを含み、秘密鍵は含まない形式です。Windowsの証明書ストアで使用されます。
# Convert between certificate formats
# PEM to DER
openssl x509 -in cert.pem -outform DER -out cert.der
# DER to PEM
openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem
# Export certificate + private key to PFX (for Windows IIS)
openssl pkcs12 -export -in cert.pem -inkey private.key \
-certfile chain.pem -out cert.pfx -passout pass:ExportPasswordCertificate Transparency(CTログ)
Certificate Transparency(CT)は、CAに対して、発行したすべての証明書を公開監査可能なログへ記録するよう求める仕組みです。これにより、誰でも自分のドメインに対して不正に発行された証明書を監視できます。ChromeとSafariでは、TLS証明書をCTログに登録することが必須です。SCT(Signed Certificate Timestamp)はログへの登録を証明するもので、証明書に埋め込むか、TLS拡張機能を介して提供します。CTログにより、誤発行は速やかに発見できます。CAが自分のドメイン用に誤って証明書を発行した場合、攻撃者に悪用される前にcrt.shなどのログで確認できます。
# Search for all certificates issued for a domain using crt.sh
# This would be done via browser or API:
# https://crt.sh/?q=example.com
# Check CT log inclusion in a certificate
openssl x509 -in cert.pem -noout -text | grep -A 5 'CT Precertificate'
# X509v3 extension: CT Precertificate SCTs (critical)
# Signed Certificate Timestamp:
# Version: v1 (0x0)
# Log ID: A4:B9...証明書に対するCAの署名
X.509証明書の最後の構成要素は、CAのデジタル署名です。CAは証明書データ(TBSCertificate)全体をハッシュ化し、そのハッシュに自身の秘密鍵で署名します。この署名によって証明書が信頼できるものになります。誰でもCAの公開鍵(CA自身の証明書に記載されています)を使って署名を検証できます。使用された署名アルゴリズムは、署名フィールドに記載されているものと、証明書の前半で指定されているものが一致していなければなりません。署名後に証明書が変更されると署名は無効になり、証明書の完全性が保証されます。
# Verify that a certificate was signed by a specific CA
openssl verify -CAfile ca_chain.pem server_cert.pem
# server_cert.pem: OK
# If the signature is invalid or the chain is broken:
# server_cert.pem: C = US, O = Example, CN = www.example.com
# error 20 at 0 depth lookup: unable to get local issuer certificateクイックチェック
このレッスンで扱ったCompTIA Security+(SY0-701)の概念について、理解度を確認します。
レッスンのまとめ
このレッスンでは、X.509証明書にバージョン、シリアル番号、Issuer、Subject、有効期間、公開鍵、およびv3拡張機能が含まれること、SAN拡張機能が証明書の対象となるホスト名を制御すること、CDPおよびAIA拡張機能が失効確認エンドポイントを示すこと、そしてCTログが証明書発行の公開監査証跡を提供することを学びました。次は証明書のライフサイクルと失効について学びます。
よくある質問
「X.509証明書の構造」レッスンは無料ですか?
はい。「X.509証明書の構造」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Security+ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Security+ Academyコースには全4レッスンが含まれています。
「X.509証明書の構造」で何を学びますか?
デジタル証明書内の主体、発行者、有効期間、公開鍵、拡張領域などのフィールドを確認し、それぞれの意味を理解します。 ブラウザで直接実行するハンズオンコードでSecurity+ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Security+ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSecurity+ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「X.509証明書の構造」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSecurity+ Academyレッスンでコードを書いて実行できますか?
はい。すべてのSecurity+ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。