PKCS #10
RFC 2986 PKCS #10 証明書要求構文仕様 Certification Request Syntax Specification Version 1.7
https://datatracker.ietf.org/doc/html/rfc2986
https://tex2e.github.io/rfc-translater/html/rfc2986.html
RFC 5967 The application/pkcs10 Media Type
PKI PKIX
証明書要求構文仕様 CSR v1.7
X.501 (証明書)
RFC 5280 Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
証明書を発行するための情報を認証局(CA)だか発行機関(RA)だかに送る書式
ITU-T X.501 Name を参照している (RFC 5280 Certificate 4.1.2.4でも可)
属性はPKCS #9 にまとまっているらしい
RFC 2314 (旧) PKCS #10 Certification Request Syntax Specification Version 1.5 → 2986
別形式 CRMF
RFC 4212 Alternative Certificate Formats for the 公開鍵基盤 Using X.509 (PKIX) Certificate Management Protocols
RFC 4211 Internet X.509 公開鍵基盤 Certificate Request Message Format (CRMF)
RFC 4210 Internet X.509 公開鍵基盤 Certificate Management Protocol (CMP)
RFC 2511 (旧) Internet X.509 Certificate Request Message Format → 4211
RFC 2510 (旧) Internet X.509 公開鍵基盤 - Certificate Management Protocols → 4210
別形式? ACME
RFC 8555 ACME
特殊用途?
RFC 9646 Conveying a Certificate Signing Request (CSR) in a Secure Zero-Touch Provisioning (SZTP) Bootstrapping Request
RFC 8209 A Profile for BGPsec Router Certificates, Certificate Revocation Lists, and Certification Requests
RFC 2986
PKCS #10: 証明書要求構文仕様 バージョン 1.7
本メモの位置付け
本メモはインターネットコミュニティ向けの情報を提供するものであり、いかなる種類のインターネット標準も規定するものではありません。本メモの配布は無制限です。
著作権表示
Copyright (C) The Internet Society (2000). All Rights Reserved.
概要
本メモは、RSA Laboratories の公開鍵暗号標準 (PKCS) シリーズから PKCS #10 v1.7 を再発行したものであり、変更管理は PKCS プロセス内で保持されます。本文書の本文は、セキュリティに関する考慮事項を除き、PKCS #9 v2.0 または PKCS #10 v1.7 文書から直接引用されています。
本メモは、証明書要求の構文について説明しています。
1. はじめに
本文書では、証明書要求の構文について説明します。証明書要求は、識別名、公開鍵、およびオプションで属性セットで構成され、証明書を要求するエンティティによって一括して署名されます。証明書要求は認証局に送信され、認証局は要求をX.509 9 公開鍵証明書に変換します。(認証局が新たに署名された証明書をどのような形式で返却するかは、本文書の範囲外です。PKCS #7 メッセージは一つの選択肢です。)
属性セットを含める目的は2つあります。1つは、特定のエンティティに関するその他の情報、またはエンティティが後で証明書失効を要求する際に使用する「チャレンジパスワード」を提供すること、もう1つは、X.509証明書に含める属性を提供することです。PKCS #9 には、属性のリスト(ただし、網羅的ではありません)が記載されています。
認証局は、電子形式以外の形式での要求を要求したり、電子形式以外の形式での回答を返したりする場合もあります。本文書の範囲外であるこのような形式の説明は、認証局から提供されることが期待されます。
この文書の暫定的な用途はPKCS#7暗号メッセージのサポートですが、他の用途も開発されることが期待されています(例えば4を参照)。
2. 定義と表記法
2.1 定義
本文書では、以下の定義を適用する。
ALGORITHM X.509で定義された情報オブジェクトクラス。アルゴリズム(一意のオブジェクト識別子)とそのパラメータ(任意のASN.1型)から構成されるオブジェクトを記述する。このクラスのオブジェクトの値は、ASN.1型AlgorithmIdentifier{}で表すことができる。ALGORITHMは、X.681の付録Aで規定されている「有用な」情報オブジェクトクラスTYPE-IDENTIFIERとして定義される。
AlgorithmIdentifier{} 本文書では、X.509型AlgorithmIdentifierの有用なパラメータ化バージョンを定義する。この型は、アルゴリズムオブジェクト識別子のペアと、それに対応するパラメータ型を密接に結び付ける。参照時、AlgorithmIdentifier{}の単一のパラメータは、その型のインスタンスに出現し得る値のペアに対する制約を指定する。 AlgorithmIdentifier{} のエンコードされた値は、AlgorithmIdentifier 型の値と等価です。
ASN.1 ASN.1 標準 (X.680、X.681、X.682、X.683) で定義されているAbstract Syntax Notation One (抽象構文記法 1)。
ATTRIBUTE(属性) このクラスは、属性 (一意のオブジェクト識別子) とそれに関連付けられた属性値 (任意の ASN.1 型) の集合から構成されるオブジェクトを記述します。このクラスのオブジェクトの値は、Attribute{} 型で表すことができます。
Attribute{}(属性{}) この文書では、X.501 型 Attribute の便利なパラメータ化バージョンを定義します。この型は、属性型オブジェクト識別子のペアを 1 つ以上の属性値型に密接に結び付けます。ASN.1 オープン型記法では、属性型は ATTRIBUTE.&id として、属性値は ATTRIBUTE.&Type として定義されます。 Attribute{} の単一のパラメータは、参照時に、その型のインスタンスに出現し得る値のペアに対する制約を指定します。Attribute{} のエンコードされた値は、Attribute 型のものと同等です。
BER X.690 で定義されている ASN.1 の基本エンコード規則。
Certificate (証明書) 主体エンティティの識別名をデジタル署名付きの公開鍵に結び付ける型。この型は X.509 で定義されています。この型には、証明書発行者(署名者)の識別名、発行者固有のシリアル番号、発行者の署名アルゴリズム識別子、有効期間、およびオプションの証明書拡張機能のセットも含まれます。
DER X.690 で定義されている ASN.1 の識別エンコード規則。DER は BER のサブセットです。
Name X.500 ディレクトリ内のオブジェクトを一意に識別(区別)する型。このタイプはX.501で定義されています。X.509証明書では、このタイプは証明書の発行者と、証明書の主体(公開鍵が認証されているエンティティ)を識別します。
2.2 表記法
このドキュメントでは特別な表記法は使用していません。
3. 概要
認証要求は、「認証要求情報」、署名アルゴリズム識別子、および認証要求情報に対するデジタル署名の3つの部分で構成されます。認証要求情報は、エンティティの識別名、エンティティの公開鍵、およびエンティティに関するその他の情報を提供する一連の属性で構成されます。
認証要求が作成されるプロセスは、以下の手順で構成されます。
1. 認証を要求するエンティティは、サブジェクト識別名、サブジェクト公開鍵、およびオプションで一連の属性を含むCertificationRequestInfo値を作成します。
2. CertificationRequestInfo値は、サブジェクトエンティティの秘密鍵で署名されます。(セクション4.2を参照)
3. CertificationRequestInfo値、署名アルゴリズム識別子、およびエンティティの署名は、以下に定義されるCertificationRequest値にまとめられます。
認証局は、要求元のエンティティを認証し、その署名を検証することで要求を満たします。要求が有効な場合は、識別名と公開鍵、発行者名、および認証局が選択したシリアル番号、有効期間、署名アルゴリズムからX.509証明書を作成します。認証要求にPKCS #9 属性が含まれている場合、認証局はこれらの属性の値や認証局が認識しているその他の情報を使用して、X.509証明書の拡張を作成することもあります。
認証局が新しい証明書をどのような形式で返却するかは、このドキュメントの範囲外です。一つの可能​​性として、署名者がいないという状況を想定し、コンテンツタイプがsignedDataであるPKCS #7 暗号メッセージがあります。返却メッセージには、新しい証明書から認証局への認証パスが含まれる場合があります。また、認証局が有用と判断した相互証明書などの他の証明書や、証明書失効リスト(CRL)が含まれる場合もあります。別の可能性として、認証局が新しい証明書を中央データベースに挿入する場合もあります。
注1 - エンティティは通常、公開鍵/秘密鍵ペアを生成した後に証明書要求を送信しますが、エンティティの識別名を変更した後にも送信できます。
注2 - 証明書要求に署名することにより、エンティティは他者の公開鍵を用いた証明書を要求することができなくなります。このような攻撃は、エンティティが相手方によって署名されたメッセージの送信者になりすますという、軽微な能力を与える可能性があります。この攻撃は、エンティティが署名対象のメッセージを知らず、かつメッセージの署名部分で署名者を特定できない場合にのみ有効です。もちろん、エンティティは相手方宛てのメッセージを復号することはできません。
注3 - エンティティが認証局に証明書要求を送信する方法については、本文書の範囲外です。紙媒体と電子媒体の両方が利用可能です。
注4 - 本文書は、RFC 1424 で規定されているプラ​​イバシー強化メール(PEM)の証明書要求構文とは互換性がありません。この構文は3つの点で異なります。属性セットが許可されていること。発行者名、シリアル番号、有効期限は含まれず、署名に「無害な」メッセージは必要ありません。この文書は、紙媒体での申請を受け付ける認証局にとって重要な機能である、申請サイズを最小限に抑えるように設計されています。
4. 認証要求構文
このセクションは2つの部分に分かれています。最初の部分では認証要求情報型であるCertificationRequestInfoについて説明し、2番目の部分では最上位型であるCertificationRequestについて説明します。
4.1 CertificationRequestInfo
認証要求情報は、ASN.1型であるCertificationRequestInfoを持つものとします。
code:CertificationRequestInfo
CertificationRequestInfo ::= SEQUENCE {
version INTEGER { v1(0) } (v1,...),
subject Name,
subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
attributes 0 Attributes{{ CRIAttributes }}
}
SubjectPublicKeyInfo { ALGORITHM : IOSet } ::= SEQUENCE {
algorithm AlgorithmIdentifier {{IOSet}},
subjectPublicKey BIT STRING
}
PKInfoAlgorithms ALGORITHM ::= {
... -- add any locally defined algorithms here -- }
Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }}
CRIAttributes ATTRIBUTE ::= {
... -- add any locally defined attributes here -- }
Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {
type ATTRIBUTE.&id({IOSet}),
values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{@type})
}
CertificationRequestInfo 型の構成要素は以下の意味を持ちます。
version は、この文書の将来の改訂版との互換性を保つためのバージョン番号です。この標準のバージョンでは 0 となります。
subject は、証明書の主体(認証対象となる公開鍵を持つエンティティ)の識別名です。
subjectPublicKeyInfo には、認証対象となる公開鍵に関する情報が含まれます。この情報は、エンティティの公開鍵アルゴリズム(および関連するパラメータ)を識別します。公開鍵アルゴリズムの例としては、PKCS #1 の rsaEncryption オブジェクト識別子が挙げられます。この情報には、エンティティの公開鍵のビット文字列表現も含まれます。前述の公開鍵アルゴリズムの場合、このビット文字列には、PKCS #1 型 RSAPublicKey の値の DER エンコードが含まれます。subjectPKInfo に許可される SubjectPublicKeyInfo{} 型の値は、情報オブジェクトセット PKInfoAlgorithms で指定された値に制限されます。PKInfoAlgorithms には、拡張マーカー (...) が含まれます。特定のアルゴリズムオブジェクトの定義は、このドキュメントを参照する仕様に委ねられています。拡張マーカーの後に追加のアルゴリズムオブジェクトが追加された場合、そのような仕様は将来のバージョンと相互運用可能になります。
attributes は、証明書のサブジェクトに関する追加情報を提供する属性の集合です。ここで役立つ可能性のある属性型のいくつかは、PKCS #9 で定義されています。例えば、エンティティが証明書の失効を要求する際に使用するパスワードを指定する challenge-password 属性です。また、X.509 証明書の拡張機能(PKCS #9 の extensionRequest 属性など)に記述される情報も、この属性に使用できます。属性に使用できる Attributes{} 型の値は、情報オブジェクトセット CRIAttributes で指定された値に制限されます。特定の属性オブジェクトの定義は、このドキュメントを参照する仕様に委ねられています。拡張マーカーの後に追加の属性オブジェクトが追加された場合、そのような仕様は将来のバージョンと相互運用可能になります。
4.2 CertificationRequest
認証リクエストはASN.1タイプのCertificationRequestを持つものとします。
code:CertificationRequest
CertificationRequest ::= SEQUENCE {
certificationRequestInfo CertificationRequestInfo,
signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }},
signature BIT STRING
}
AlgorithmIdentifier {ALGORITHM:IOSet } ::= SEQUENCE {
algorithm ALGORITHM.&id({IOSet}),
parameters ALGORITHM.&Type({IOSet}{@algorithm}) OPTIONAL
}
SignatureAlgorithms ALGORITHM ::= {
... -- add any locally defined algorithms here -- }
CertificationRequest 型の構成要素は以下の意味を持ちます。
certificateRequestInfo は「証明書要求情報」です。これは署名される値です。
signatureAlgorithm は、証明書要求情報が署名される署名アルゴリズム(および関連するパラメータ)を識別します。例えば、仕様では、PKCS #1 の md5WithRSAEncryption に対応する ALGORITHM オブジェクトを情報オブジェクトセット SignatureAlgorithms に含めることができます。
code:SignatureAlgorithms
SignatureAlgorithms ALGORITHM ::= {
...,
{ NULL IDENTIFIED BY md5WithRSAEncryption }
}
signature 署名は、証明書要求情報に証明書要求主体の秘密鍵で署名した結果です。
署名プロセスは2つのステップで構成されます。
1. 証明書要求情報コンポーネントの値がDERエンコードされ、オクテット文字列が生成されます。
2. ステップ1の結果が、指定された署名アルゴリズムに基づき証明書要求主体の秘密鍵で署名され、ビット文字列である署名が生成されます。
注 - CertificationRequest の同等の構文は次のように記述できます。
code:CertificationRequest
CertificationRequest ::= SIGNED { EncodedCertificationRequestInfo }
(CONSTRAINED BY { -- Verify or sign encoded
-- CertificationRequestInfo -- })
EncodedCertificationRequestInfo ::=
TYPE-IDENTIFIER.&Type(CertificationRequestInfo)
SIGNED { ToBeSigned } ::= SEQUENCE {
toBeSigned ToBeSigned,
algorithm AlgorithmIdentifier { {SignatureAlgorithms} },
signature BIT STRING
}
5. セキュリティに関する考慮事項
セキュリティ上の問題については、本メモ全体を通して議論されています。
6. 著者の連絡先
Magnus Nystrom
RSA Security
Box 10704
S-121 29 Stockholm
スウェーデン
Eメール: magnus@rsasecurity.com
Burt Kaliski
RSA Security
20 Crosby Drive
Bedford, MA 01730 USA
Eメール: bkaliski@rsasecurity.com
付録
A. ASN.1 モジュール
この付録には、この文書に含まれるすべての ASN.1 型および値の定義が、ASN.1 モジュール PKCS-10 の形式で含まれています。
(略)
B. 知的財産権に関する考慮事項
RSA Securityは、本書に記載されている一般的な構成について特許権を主張しませんが、特定の基礎技術については言及している場合があります。
本書を複製するライセンスは、本書に言及または参照するすべての資料において「RSA Security Inc. 公開鍵暗号標準(PKCS)」と明記することを条件として付与されます。
RSA Securityは、他者による知的財産権の主張について一切の表明を行いません。かかる判断はユーザーの責任となります。
C. 改訂履歴
バージョン 1.0
バージョン 1.0 は、この文書の前のバージョンです(6 では「バージョン 1.5」としても公開されていました)。
バージョン 1.7
このバージョンでは、参照の更新や ASN.1 型定義の変更など、いくつかの編集上の変更が加えられています。以下の重要な変更が行われました。
このバージョンでは、ASN.1 とその符号化規則に関する現在の国際標準である X.680-X.690 を参照しています。X.208 および X.209 への参照はすべて削除されました。
X.690 標準では、SET OF コンポーネントの符号化された値は DER において昇順にソートされることが要求されています。ただし、アプリケーションは属性コンポーネントの順序に依存してはなりません。
PKCS #6 拡張証明書構文標準への参照はすべて削除されました。 X.509バージョン3証明書への拡張機能の追加に伴い、RSA LaboratoriesはPKCS #6 のサポートを終了します。
注 - この文書でバージョン1.7を使用しているのは、6のバージョン1.5や、サポートされていないPKCS #10 のバージョン1.6との混同を避けるためです。
D. 参考文献
(略)
E. 連絡先情報とPKCSについて
公開鍵暗号標準(Public-Key Cryptography Standards)は、RSA Laboratoriesが世界中のセキュアシステム開発者と協力して策定した仕様であり、公開鍵暗号の導入を促進することを目的としています。1991年に、公開鍵技術の早期導入者を含む少数のグループとの会合を経て初めて公開されたPKCS文書は、広く参照され、実装されるようになりました。PKCSシリーズからの貢献は、ANSI X9文書、PKIX、SET、S/MIME、SSLなど、多くの公式標準および事実上の標準の一部となっています。
PKCSのさらなる開発は、メーリングリストでの議論や不定期のワークショップを通じて行われており、改善のための提案は歓迎いたします。詳細については、以下の担当者までお問い合わせください。
PKCS編集者
RSA Laboratories
20 Crosby Drive
Bedford, MA 01730 USA
pkcs-editor@rsasecurity.com
http://www.rsasecurity.com/rsalabs/pkcs