「X.509証明書」の編集履歴(バックアップ)一覧はこちら

X.509証明書 - (2025/04/24 (木) 07:39:46) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

* X.509証明書とPKIの基礎知識まとめ ** 🔐 公開鍵基盤(PKI)とは? - デジタル証明書を用いて、安全な通信や認証を可能にする枠組み。 - 信頼の連鎖(Trust Chain)に基づいて証明書の正当性を保証。 - 主な構成要素: - 公開鍵/秘密鍵ペア - 認証局(CA: Certificate Authority) - 登録局(RA: Registration Authority) - 証明書失効リスト(CRL)、OCSP ** 📜 X.509証明書の基本構造 X.509v3 証明書には以下の主なフィールドが含まれる: - Version: 通常は v3 - Serial Number: 証明書ごとの一意な識別子 - Signature Algorithm: 使用される署名アルゴリズム(例:sha256WithRSAEncryption) - Issuer: 発行者(CA)の情報 - Validity: 有効期間(Not Before / Not After) - Subject: 証明書の所有者情報 - Subject Public Key Info: 公開鍵とそのアルゴリズム - Extensions: 拡張フィールド(X.509v3) ** 🧩 X.509v3 証明書拡張の例 |拡張|説明|備考| |Basic Constraints|この証明書がCAかどうか|CA:TRUE / FALSE| |Key Usage|使用目的の指定|digitalSignature、keyEncipherment など| |Extended Key Usage|より細かい使用目的|serverAuth、clientAuth など| |Subject Alternative Name (SAN)|複数のDNS/IPを含める|Let's Encryptなどで必須| |CRL Distribution Points|CRLの取得先URL|失効確認用| |Authority Information Access (AIA)|発行元CAの情報|OCSPや中間証明書URL| ** 🔧 OpenSSL コマンドと操作例 *** 🔑 鍵の生成 openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048 *** 📝 CSRの作成 openssl req -new -key private.key -out request.csr -subj "/CN=example.com" *** 🖊️ 自己署名証明書の作成(テスト用) openssl req -x509 -key private.key -in request.csr -out cert.pem -days 365 *** 📖 証明書の内容確認 openssl x509 -in cert.pem -noout -text ** 🌐 [[Certificate Transparency]] - CAによる証明書発行ログを''公開ログサーバ''に登録 - ブラウザがSSL証明書の正当性をリアルタイムで確認 - 攻撃者による不正な証明書発行の検知に有効 ** 📦 フォーマットの違い |形式|拡張子|内容| |PEM|.pem、.crt、.key|Base64 + ヘッダ| |DER|.der、.cer|バイナリ形式| |PKCS#12|.p12、.pfx|鍵+証明書を1つのファイルに| ** 🌐 Let's Encrypt / ACME / certbot - Let's Encrypt: 無料のSSL証明書提供CA - ACME: 証明書の自動取得・更新プロトコル - certbot: ACMEクライアントの代表例  certbot certonly --webroot -w /var/www/html -d example.com ** 🛠️ CFSSL(Cloudflare製) - JSONベースの設定・操作が特徴の証明書管理ツール - サーバ証明書、CA証明書の発行・署名・失効が可能 - REST APIによる操作も可能 ** 📉 証明書の失効・無効化 *** ❌ [[CRL]] (Certificate Revocation List) - CAが発行する「失効済証明書のリスト」 *** ❌ [[OCSP]] (Online Certificate Status Protocol) - 証明書の状態をリアルタイムで確認するためのプロトコル ** 📚 学習のポイントまとめ - 証明書の''構造と拡張''を理解する - ''信頼の連鎖と失効確認''の仕組みを押さえる - [[OpenSSL]]や[[certbot]]の''コマンド操作に慣れる'' - [[CA]]や[[PKI]]を''自分で構築・運用してみる'' ** 🧠 Detail - X.509はITU-Tが定義した公開鍵証明書の標準仕様(Recommendation X.509)。 - 公開鍵基盤(PKI)において、公開鍵とその所有者の関連性を第三者(CA)が保証するための仕組み。 - 現在主に使用されているのは **X.509v3**(バージョン3)。 ** 🔧 X.509 証明書の構造(ASN.1 DERで定義) - 証明書はASN.1で記述され、DER(Distinguished Encoding Rules)形式で符号化される。 - PEM形式(Base64 + ヘッダ/フッタ)への変換は可逆。 *** 🧬 構成フィールド一覧 |フィールド|説明| |Version|v1, v2, v3のいずれか(通常はv3)| |Serial Number|CAが一意に割り当てる整数識別子| |Signature Algorithm|署名アルゴリズム(例:sha256WithRSAEncryption)| |Issuer|CAの識別情報(Distinguished Name)| |Validity|Not Before / Not After による有効期間| |Subject|証明書所有者の識別情報(Distinguished Name)| |Subject Public Key Info|公開鍵アルゴリズム + 公開鍵本体| |Extensions|X.509v3で導入された拡張領域| |Signature Algorithm|署名アルゴリズムの繰り返し(署名情報に付随)| |Signature Value|Issuerの秘密鍵による署名| ** 🧩 X.509v3 Extensions(拡張) - 証明書の用途や制約を明示的に指定できる柔軟な設計。 - 各拡張には「critical」ビットがあり、未対応のcritical拡張があれば証明書は無効と見なされる。 *** 🔬 主な拡張一覧 |拡張|用途|備考| |Basic Constraints|CAかエンドエンティティかの指定|CA:TRUE / FALSE| |Key Usage|使用目的の制限|digitalSignature、keyCertSignなど| |Extended Key Usage|応用レベルでの用途|serverAuth、clientAuth、codeSigningなど| |Subject Alternative Name (SAN)|複数のFQDN、IP、URIなどの紐付け|Common Nameと異なる主体名を補完| |Authority Key Identifier|発行元のキー識別子|中間CAの照合に使用| |Subject Key Identifier|自身のキー識別子|証明書チェーンのビルドに有用| |CRL Distribution Points|CRLの取得先|証明書失効確認に使用| |Authority Information Access (AIA)|OCSPレスポンダや中間証明書へのURL|OCSPステータスやチェーン構築に使用| ** 🔄 証明書のライフサイクル - 証明書は「発行→利用→更新/失効→期限切れ」というサイクルを持つ。 - ライフサイクル全体を管理するためには以下の構成が必要: *** ⛓️ 信頼の連鎖(Trust Chain) - ルートCA(自己署名) → 中間CA → エンドエンティティ(サーバ/クライアント)証明書 - ブラウザやOSはルート証明書を信頼し、それに連なる署名チェーンを検証 *** ❌ 証明書の失効 - CRL(Certificate Revocation List): 定期更新方式(一覧をダウンロード) - OCSP(Online Certificate Status Protocol): リアルタイム問い合わせ方式 - OCSP Stapling: サーバ側でOCSPレスポンスをキャッシュしTLSハンドシェイク中に提示 ** 🌐 Certificate Transparency(CT) - 不正な証明書発行を防止するGoogle主導の仕組み - CAはすべての証明書発行ログを**公開CTログサーバ**に登録 - ブラウザは証明書に**SCT(Signed Certificate Timestamp)**が含まれているかを検証 - 攻撃者による「偽の証明書発行」を**監視可能な状態**にする *** CT導入の背景 - DigiNotar、CNNICなどのCAが不正に証明書を発行した事件 - ログ監査によるCAの監視と透明性の向上 ** 🔐 X.509とPKIのセキュリティ課題 - CAの鍵漏洩・ハッキング(ルートCAの信頼崩壊) - 鍵の長期運用によるセキュリティリスク(RSA2048の寿命問題) - 証明書発行の自動化と信頼性のトレードオフ(Let's Encryptのケース) ** 🔧 OpenSSLでの操作例(実践) *** 🔑 鍵の生成 openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048 *** 📝 CSR(証明書署名要求)の生成 openssl req -new -key private.key -out request.csr -subj "/CN=example.com" *** 🖊️ 自己署名証明書(テスト用途) openssl req -x509 -key private.key -in request.csr -out cert.pem -days 365 *** 🔍 証明書内容の確認 openssl x509 -in cert.pem -noout -text
* X.509証明書とPKIの基礎知識まとめ ** 🔐 公開鍵基盤(PKI)とは? - デジタル証明書を用いて、安全な通信や認証を可能にする枠組み。 - 信頼の連鎖(Trust Chain)に基づいて証明書の正当性を保証。 - 主な構成要素: - 公開鍵/秘密鍵ペア - 認証局(CA: Certificate Authority) - 登録局(RA: Registration Authority) - 証明書失効リスト(CRL)、OCSP ** 📜 X.509証明書の基本構造 X.509v3 証明書には以下の主なフィールドが含まれる: - Version: 通常は v3 - Serial Number: 証明書ごとの一意な識別子 - Signature Algorithm: 使用される署名アルゴリズム(例:sha256WithRSAEncryption) - Issuer: 発行者(CA)の情報 - Validity: 有効期間(Not Before / Not After) - Subject: 証明書の所有者情報 - Subject Public Key Info: 公開鍵とそのアルゴリズム - Extensions: 拡張フィールド(X.509v3) ** 🧩 X.509v3 証明書拡張の例 |拡張|説明|備考| |Basic Constraints|この証明書がCAかどうか|CA:TRUE / FALSE| |Key Usage|使用目的の指定|digitalSignature、keyEncipherment など| |Extended Key Usage|より細かい使用目的|serverAuth、clientAuth など| |Subject Alternative Name (SAN)|複数のDNS/IPを含める|Let's Encryptなどで必須| |CRL Distribution Points|CRLの取得先URL|失効確認用| |Authority Information Access (AIA)|発行元CAの情報|OCSPや中間証明書URL| ** 🔧 OpenSSL コマンドと操作例 *** 🔑 鍵の生成 openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048 *** 📝 CSRの作成 openssl req -new -key private.key -out request.csr -subj "/CN=example.com" *** 🖊️ 自己署名証明書の作成(テスト用) openssl req -x509 -key private.key -in request.csr -out cert.pem -days 365 *** 📖 証明書の内容確認 openssl x509 -in cert.pem -noout -text ** 🌐 [[Certificate Transparency]] - CAによる証明書発行ログを''公開ログサーバ''に登録 - ブラウザがSSL証明書の正当性をリアルタイムで確認 - 攻撃者による不正な証明書発行の検知に有効 ** 📦 フォーマットの違い |形式|拡張子|内容| |PEM|.pem、.crt、.key|Base64 + ヘッダ| |DER|.der、.cer|バイナリ形式| |PKCS#12|.p12、.pfx|鍵+証明書を1つのファイルに| ** 🌐 Let's Encrypt / ACME / certbot - Let's Encrypt: 無料のSSL証明書提供CA - ACME: 証明書の自動取得・更新プロトコル - certbot: ACMEクライアントの代表例  certbot certonly --webroot -w /var/www/html -d example.com ** 🛠️ CFSSL(Cloudflare製) - JSONベースの設定・操作が特徴の証明書管理ツール - サーバ証明書、CA証明書の発行・署名・失効が可能 - REST APIによる操作も可能 ** 📉 証明書の失効・無効化 *** ❌ [[CRL]] (Certificate Revocation List) - CAが発行する「失効済証明書のリスト」 *** ❌ [[OCSP]] (Online Certificate Status Protocol) - 証明書の状態をリアルタイムで確認するためのプロトコル ** 📚 学習のポイントまとめ - 証明書の''構造と拡張''を理解する - ''信頼の連鎖と失効確認''の仕組みを押さえる - [[OpenSSL]]や[[certbot]]の''コマンド操作に慣れる'' - [[CA]]や[[PKI]]を''自分で構築・運用してみる'' ** 🧠 Detail - X.509はITU-Tが定義した公開鍵証明書の標準仕様(Recommendation X.509)。 - 公開鍵基盤(PKI)において、公開鍵とその所有者の関連性を第三者(CA)が保証するための仕組み。 - 現在主に使用されているのは **X.509v3**(バージョン3)。 ** 🔧 X.509 証明書の構造(ASN.1 DERで定義) - 証明書はASN.1で記述され、DER(Distinguished Encoding Rules)形式で符号化される。 - PEM形式(Base64 + ヘッダ/フッタ)への変換は可逆。 *** 🧬 構成フィールド一覧 |フィールド|説明| |Version|v1, v2, v3のいずれか(通常はv3)| |Serial Number|CAが一意に割り当てる整数識別子| |Signature Algorithm|署名アルゴリズム(例:sha256WithRSAEncryption)| |Issuer|CAの識別情報(Distinguished Name)| |Validity|Not Before / Not After による有効期間| |Subject|証明書所有者の識別情報(Distinguished Name)| |Subject Public Key Info|公開鍵アルゴリズム + 公開鍵本体| |Extensions|X.509v3で導入された拡張領域| |Signature Algorithm|署名アルゴリズムの繰り返し(署名情報に付随)| |Signature Value|Issuerの秘密鍵による署名| ** 🧩 X.509v3 Extensions(拡張) - 証明書の用途や制約を明示的に指定できる柔軟な設計。 - 各拡張には「critical」ビットがあり、未対応のcritical拡張があれば証明書は無効と見なされる。 *** 🔬 主な拡張一覧 |拡張|用途|備考| |Basic Constraints|CAかエンドエンティティかの指定|CA:TRUE / FALSE| |Key Usage|使用目的の制限|digitalSignature、keyCertSignなど| |Extended Key Usage|応用レベルでの用途|serverAuth、clientAuth、codeSigningなど| |Subject Alternative Name (SAN)|複数のFQDN、IP、URIなどの紐付け|Common Nameと異なる主体名を補完| |Authority Key Identifier|発行元のキー識別子|中間CAの照合に使用| |Subject Key Identifier|自身のキー識別子|証明書チェーンのビルドに有用| |CRL Distribution Points|CRLの取得先|証明書失効確認に使用| |Authority Information Access (AIA)|OCSPレスポンダや中間証明書へのURL|OCSPステータスやチェーン構築に使用| ** 🔄 証明書のライフサイクル - 証明書は「発行→利用→更新/失効→期限切れ」というサイクルを持つ。 - ライフサイクル全体を管理するためには以下の構成が必要: *** ⛓️ 信頼の連鎖(Trust Chain) - ルートCA(自己署名) → 中間CA → エンドエンティティ(サーバ/クライアント)証明書 - ブラウザやOSはルート証明書を信頼し、それに連なる署名チェーンを検証 *** ❌ 証明書の失効 - CRL(Certificate Revocation List): 定期更新方式(一覧をダウンロード) - OCSP(Online Certificate Status Protocol): リアルタイム問い合わせ方式 - OCSP Stapling: サーバ側でOCSPレスポンスをキャッシュしTLSハンドシェイク中に提示 ** 🌐 Certificate Transparency(CT) - 不正な証明書発行を防止するGoogle主導の仕組み - CAはすべての証明書発行ログを**公開CTログサーバ**に登録 - ブラウザは証明書に**SCT(Signed Certificate Timestamp)**が含まれているかを検証 - 攻撃者による「偽の証明書発行」を**監視可能な状態**にする *** CT導入の背景 - DigiNotar、CNNICなどのCAが不正に証明書を発行した事件 - ログ監査によるCAの監視と透明性の向上 ** 🔐 X.509とPKIのセキュリティ課題 - CAの鍵漏洩・ハッキング(ルートCAの信頼崩壊) - 鍵の長期運用によるセキュリティリスク(RSA2048の寿命問題) - 証明書発行の自動化と信頼性のトレードオフ(Let's Encryptのケース) ** 🔧 OpenSSLでの操作例(実践) *** 🔑 鍵の生成 openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048 *** 📝 CSR(証明書署名要求)の生成 openssl req -new -key private.key -out request.csr -subj "/CN=example.com" *** 🖊️ 自己署名証明書(テスト用途) openssl req -x509 -key private.key -in request.csr -out cert.pem -days 365 *** 🔍 証明書内容の確認 openssl x509 -in cert.pem -noout -text 以下は、**X.509証明書とSSL/TLS・Apache HTTPD (mod_ssl)・OpenSSL の専門家向け解説資料**です。 アットウィキ形式でコピペしやすいように、`|`区切りテーブル+コードブロック形式で構成しています。 --- **&bold(){🔐 SSL/TLS プロトコルの概要}** |バージョン|特徴|状態| |TLS 1.3|暗号スイート簡素化、ハンドシェイク高速化|推奨| |TLS 1.2|業界標準、AEAD暗号対応|推奨| |TLS 1.0/1.1|SHA-1やRC4など非推奨|非推奨・廃止| |SSL 3.0/2.0|脆弱(POODLEなど)|廃止済み| &bold(){暗号スイート構成要素:} - 鍵交換方式: ECDHE, DHE - 認証: RSA, ECDSA - 暗号: AES-GCM, ChaCha20-Poly1305 - MAC: HMAC-SHA256(※TLS1.3では不要) --- **&bold(){⚙️ Apache HTTPD (mod_ssl) 基本設定}** &code(){httpd.conf または ssl.conf に以下を設定} ``` LoadModule ssl_module modules/mod_ssl.so Listen 443 https <VirtualHost *:443> ServerName example.com SSLEngine on SSLCertificateFile /etc/ssl/certs/example.crt SSLCertificateKeyFile /etc/ssl/private/example.key SSLCertificateChainFile /etc/ssl/certs/chain.pem SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite HIGH:!aNULL:!MD5:!RC4 SSLHonorCipherOrder on Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" DocumentRoot /var/www/html </VirtualHost> ``` --- **&bold(){🏷️ SNI 対応と HSTS 設定}** - &bold(){SNI (Server Name Indication)} 複数のSSL証明書を1 IPでホスト可能。VirtualHost を ServerName で分けて設定。 - &bold(){HSTS (HTTP Strict Transport Security)} 常時HTTPSを強制。以下のヘッダで実装: ``` Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" ``` --- **&bold(){🔐 クライアント証明書認証}** &code(){httpd.conf 設定例} ``` <VirtualHost *:443> SSLEngine on SSLCertificateFile /path/to/server.crt SSLCertificateKeyFile /path/to/server.key SSLCACertificateFile /path/to/ca.crt SSLVerifyClient require SSLVerifyDepth 2 <Location /> SSLRequire %{SSL_CLIENT_S_DN_CN} eq "trusted-client" </Location> </VirtualHost> ``` --- **&bold(){🧾 OCSP Stapling の設定}** ``` SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:/var/run/ocsp(128000) SSLCACertificateFile /etc/ssl/certs/ca-bundle.crt ``` OCSP URI確認: ``` openssl x509 -in cert.pem -noout -ocsp_uri ``` --- **&bold(){🧪 OpenSSLによるテスト手法}** |操作|コマンド| |----|--------| |サーバ接続テスト|`openssl s_client -connect example.com:443`| |OCSPレスポンス確認|`openssl s_client -connect example.com:443 -status`| |クライアント証明書付き接続|`openssl s_client -connect example.com:443 -cert client.crt -key client.key -CAfile ca.crt`| --- **&bold(){🛠️ トラブルシュート早見表}** |エラー例|原因|対応| |--------|-----|----| |handshake failure|TLSバージョン/暗号不一致|`SSLProtocol`, `SSLCipherSuite`見直し| |unable to verify the first certificate|中間証明書の欠如|`SSLCertificateChainFile`の指定| |client certificate not provided|クライアント証明書なし|ブラウザor curlに証明書を設定| --- 必要に応じてさらに詳細展開できます。応用例や自動化スクリプトが必要であれば教えてください。

表示オプション

横に並べて表示:
変化行の前後のみ表示: