公開鍵基盤(PKI) システムでは、証明書署名要求( CSRまたは認証要求) は、デジタル ID 証明書を申請するために申請者から公開鍵基盤 (PKI) の証明機関に送信されるメッセージです。CSR には通常、証明書の発行対象となる公開鍵、識別情報 (ドメイン名など)、および整合性保護を含む真正性の証明 (デジタル署名など) が含まれています。CSR の最も一般的な形式は PKCS # 10仕様ですが、その他の形式には、より高機能な証明書要求メッセージ形式 (CRMF) [1]や、一部のWeb ブラウザーで生成されるSPKAC (署名済み公開鍵およびチャレンジ) 形式があります。
手順
X.509証明書の CSR を作成する前に、申請者はまずキー ペアを生成し、そのペアの秘密キーを秘密に保ちます。例:
# https://www.openssl.org/docs/manmaster/man1/openssl-genrsa.html # "openssl genrsa" は RSA 秘密鍵を作成します: $ openssl genrsa -out 2024_wikipedia.org.key
CSR には、申請者を識別する情報 (識別名など)、申請者が選択した公開鍵、および場合によってはその他の情報が含まれます。PKCS #10 形式を使用する場合、申請者の秘密鍵を使用してリクエストを自己署名する必要があります。これにより、秘密鍵の所有が証明されますが、この形式の使用は (何らかの形式の) 署名に使用できる鍵に制限されます。CSR には、証明機関が要求する発行元の証明 (つまり、申請者の身元の証明) を添付する必要があります。証明機関は、詳細情報を得るために申請者に連絡することがあります。
CSR に必要な一般的な情報 (サンプル X.509 証明書のサンプル列)。識別名 (DN) には代替値が存在する場合が多いため、推奨される値がリストされていることに注意してください。
このサンプル コマンド ラインでは、上記の表に記載されている詳細を使用します。
# https://www.openssl.org/docs/manmaster/man1/openssl-req.html # "openssl req" は署名リクエストを作成します: $ openssl req -sha512 -new -subj "/C=US/ST=カリフォルニア/L=サンフランシスコ/O=ウィキメディア財団、Inc./CN=*.wikipedia.org" -key 2024_wikipedia.org.key -out 2024_wikipedia.org.csr
要求が成功すると、証明機関は証明機関の秘密キーを使用してデジタル署名された ID 証明書を送り返します。
PKCS #10 CSR の構造
PKCS #10 形式の証明書要求は、証明書要求情報、署名アルゴリズム識別子、証明書要求情報に対するデジタル署名の 3 つの主要部分から構成されます。最初の部分には、公開鍵などの重要な情報が含まれます。要求者による署名により、エンティティが他人の公開鍵の偽の証明書を要求することを防ぎます。[3] したがって、PKCS #10 CSR を生成するには秘密鍵が必要ですが、CSR の一部ではありません。[4]
個人 ID 証明書および署名証明書の CSR には、ID 所有者の電子メール アドレスまたはビジネス ID の場合は組織名が含まれている必要があります。
最初の部分である ASN.1 タイプのCertificationRequestInfo は、バージョン番号 (仕様の既知のバージョン 1.0、1.5、1.7 では 0)、サブジェクト名、公開鍵 (アルゴリズム識別子 + ビット文字列)、および証明書のサブジェクトに関する追加情報を提供する属性のコレクションで構成されます。属性には、必要な証明書の拡張機能、失効を制限するチャレンジ パスワード、および証明書のサブジェクトに関する追加情報 (ローカル タイプや将来のタイプを含む可能性があります) を含めることができます。[3]
PKCS #10 CSR の例
PKCS#10標準は、X.509で使用する CSR をエンコードするためのバイナリ形式を定義します。これはASN.1で表現されます。以下は、 OpenSSL を使用して ASN.1 構造を調べる方法の例です。
openssl asn1parse -i -in your_request.p10
CSR はBase64 でエンコードされた PKCS#10 として表すことができます。以下に例を示します。
-----証明書リクエストの開始-----
MIICzDCCAbQCAQAwgYYxCzAJBgNVBAYTAkVOMQ0wCwYDVQQIDARub25lMQ0wCwYD
VQQHDARub25lMRIwEAYDVQQKDAlXaWtpcGVkaWExDTALBgNVBAsMBG5vbmUxGDAW
BgNVBAMMDyoud2lraXBlZGlhLm9yZzEcMBoGCSqGSIb3DQEJARYNbm9uZUBub25l
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP/U8RlcCD6E8AL
PT8LLUR9ygyygPCaSmIEC8zXGJung3ykElXFRz/Jc/bu0hxCxi2YDz5IjxBBOpB/
kieG83HsSmZZtR+drZIQ6vOsr/ucvpnB9z4XzKuabNGZ5ZiTSQ9L7Mx8FzvUTq5y
/Arium+FBeuno/IV8zvwAe/VRa8i0QjFXT9vBBp35aeatdnJ2ds50yKCsHHcjvtr
9/8zPVqqmhl2XFS3Qdqlsprzbgksom67OobJGjaV+fNHNQ0o/rzP//Pl3i7vvaEG
7Ff8tQhEwR9nJUR1T6Z7ln7S6cOr23YozgWVkEJ/dSr6LAopb+cZ88FzW5NszU6i
57HhA7ECAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4IBAQBn8OCVOIx+n0AS6WbEmYDR
SspR9xOCoOwYfamB+2Bpmt82R01zJ/kaqzUtZUjaGvQvAaz5lUwoMdaO0X7I5Xfl
sllMFDaYoGD4Rru4s8gz2qG/QHWA8uPXzJVAj6X0olbIdLTEqTKsnBj4Zr1AJCNy
/YcG4ouLJr140o26MhwBpoCRpPjAgdYMH60BYfnc4/DILxMVqR9xqK1s98d6Ob/+
3wHFK+S7BRWrJQXcM8veAexXuk9lHQ+FgGfD0eSYGz0kyP26Qa2pLTwumjt+nBPl
rfJxaLHwTQ/1988G0H35ED0f9Md5fzoKi5evU1wG5WRxdEUPyt3QUXxdQ69i0C+7
-----証明書リクエスト終了-----
上記の証明書署名要求の ASN.1 構造 (openssl によって解析される) は次のようになります。最初の数字はバイト オフセット、d は深さ、hl は現在のタイプのヘッダー長、l はコンテンツの長さです。
0:d=0 hl=4 l= 716 定数: シーケンス
4:d=1 hl=4 l= 436 短所: シーケンス
8:d=2 hl=2 l= 1 プリム: 整数:00
11:d=2 hl=3 l= 134 短所: シーケンス
14:d=3 hl=2 l= 11 定数: SET
16:d=4 hl=2 l= 9 短所: シーケンス
18:d=5 hl=2 l= 3 プリム: オブジェクト:countryName
23:d=5 hl=2 l= 2 プリム: PRINTABLESTRING :EN
27:d=3 hl=2 l= 13 定数: SET
29:d=4 hl=2 l= 11 短所: シーケンス
31:d=5 hl=2 l= 3 プリム: オブジェクト:stateOrProvinceName
36:d=5 hl=2 l= 4 プリム: UTF8STRING :なし
42:d=3 hl=2 l= 13 定数: SET
44:d=4 hl=2 l= 11 短所: シーケンス
46:d=5 hl=2 l= 3 プリム: オブジェクト:localityName
51:d=5 hl=2 l= 4 プリム: UTF8STRING :なし
57:d=3 hl=2 l= 18 定数: SET
59:d=4 hl=2 l= 16 定数: シーケンス
61:d=5 hl=2 l= 3 プリム: オブジェクト:組織名
66:d=5 hl=2 l= 9 プリム: UTF8STRING :Wikipedia
77:d=3 hl=2 l= 13 短所: SET
79:d=4 hl=2 l= 11 短所: シーケンス
81:d=5 hl=2 l= 3 プリム: オブジェクト:organizationalUnitName
86:d=5 hl=2 l= 4 プリム: UTF8STRING :なし
92:d=3 hl=2 l= 24 定数: SET
94:d=4 hl=2 l= 22 短所: シーケンス
96:d=5 hl=2 l= 3 プリム: オブジェクト:commonName
101:d=5 hl=2 l= 15 プリム: UTF8STRING :*.wikipedia.org
118:d=3 hl=2 l= 28 定数: SET
120:d=4 hl=2 l= 26 短所: シーケンス
122:d=5 hl=2 l= 9 プリム: オブジェクト:emailAddress
133:d=5 hl=2 l= 13 プリム: IA5STRING :none@none.com
148:d=2 hl=4 l= 290 短所: シーケンス
152:d=3 hl=2 l= 13 短所: シーケンス
154:d=4 hl=2 l= 9 プリム: オブジェクト:rsaEncryption
165:d=4 hl=2 l= 0 プリム: NULL
167:d=3 hl=4 l= 271 プリム: ビット文字列
442:d=2 hl=2 l= 0 矛盾: 続き [ 0 ]
444:d=1 hl=2 l= 13 短所: シーケンス
446:d=2 hl=2 l= 9 プリム: オブジェクト:md5WithRSAEncryption
457:d=2 hl=2 l= 0 プリム: NULL
459:d=1 hl=4 l= 257 プリム: ビット文字列
これは、コマンドに base64 エンコーディングを指定することによって生成されました。ここで、PEM ( Privacy-Enhanced Mail ) は、base64 での ASN.1 Distinguished Encoding Rulesのエンコーディングです。
openssl asn1parse -in your_request.p10 -inform PEM -i
