diff options
Diffstat (limited to 'doc/rfc/rfc7468.txt')
-rw-r--r-- | doc/rfc/rfc7468.txt | 1123 |
1 files changed, 1123 insertions, 0 deletions
diff --git a/doc/rfc/rfc7468.txt b/doc/rfc/rfc7468.txt new file mode 100644 index 0000000..d075a79 --- /dev/null +++ b/doc/rfc/rfc7468.txt @@ -0,0 +1,1123 @@ + + + + + + +Internet Engineering Task Force (IETF) S. Josefsson +Request for Comments: 7468 SJD AB +Category: Standards Track S. Leonard +ISSN: 2070-1721 Penango, Inc. + April 2015 + + + Textual Encodings of PKIX, PKCS, and CMS Structures + +Abstract + + This document describes and discusses the textual encodings of the + Public-Key Infrastructure X.509 (PKIX), Public-Key Cryptography + Standards (PKCS), and Cryptographic Message Syntax (CMS). The + textual encodings are well-known, are implemented by several + applications and libraries, and are widely deployed. This document + articulates the de facto rules by which existing implementations + operate and defines them so that future implementations can + interoperate. + +Status of This Memo + + This is an Internet Standards Track document. + + This document is a product of the Internet Engineering Task Force + (IETF). It represents the consensus of the IETF community. It has + received public review and has been approved for publication by the + Internet Engineering Steering Group (IESG). Further information on + Internet Standards is available in Section 2 of RFC 5741. + + Information about the current status of this document, any errata, + and how to provide feedback on it may be obtained at + http://www.rfc-editor.org/info/rfc7468. + +Copyright Notice + + Copyright (c) 2015 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (http://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with respect + to this document. Code Components extracted from this document must + include Simplified BSD License text as described in Section 4.e of + the Trust Legal Provisions and are provided without warranty as + described in the Simplified BSD License. + + + +Josefsson & Leonard Standards Track [Page 1] + +RFC 7468 PKIX Textual Encodings April 2015 + + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 + 2. General Considerations . . . . . . . . . . . . . . . . . . . 3 + 3. ABNF . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 + 4. Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 + 5. Textual Encoding of Certificates . . . . . . . . . . . . . . 8 + 5.1. Encoding . . . . . . . . . . . . . . . . . . . . . . . . 8 + 5.2. Explanatory Text . . . . . . . . . . . . . . . . . . . . 9 + 5.3. File Extension . . . . . . . . . . . . . . . . . . . . . 9 + 6. Textual Encoding of Certificate Revocation Lists . . . . . . 10 + 7. Textual Encoding of PKCS #10 Certification Request Syntax . . 11 + 8. Textual Encoding of PKCS #7 Cryptographic Message Syntax . . 11 + 9. Textual Encoding of Cryptographic Message Syntax . . . . . . 12 + 10. One Asymmetric Key and the Textual Encoding of PKCS #8 + Private Key Info . . . . . . . . . . . . . . . . . . . . . . 12 + 11. Textual Encoding of PKCS #8 Encrypted Private Key Info . . . 13 + 12. Textual Encoding of Attribute Certificates . . . . . . . . . 13 + 13. Textual Encoding of Subject Public Key Info . . . . . . . . . 14 + 14. Security Considerations . . . . . . . . . . . . . . . . . . . 14 + 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 + 15.1. Normative References . . . . . . . . . . . . . . . . . . 14 + 15.2. Informative References . . . . . . . . . . . . . . . . . 15 + Appendix A. Non-conforming Examples . . . . . . . . . . . . . . 17 + Appendix B. DER Expectations . . . . . . . . . . . . . . . . . . 18 + Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 19 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 20 + +1. Introduction + + Several security-related standards used on the Internet define ASN.1 + data formats that are normally encoded using the Basic Encoding Rules + (BER) or Distinguished Encoding Rules (DER) [X.690], which are + binary, octet-oriented encodings. This document is about the textual + encodings of the following formats: + + 1. Certificates, Certificate Revocation Lists (CRLs), and Subject + Public Key Info structures in the Internet X.509 Public Key + Infrastructure Certificate and Certificate Revocation List (CRL) + Profile [RFC5280]. + + 2. PKCS #10: Certification Request Syntax [RFC2986]. + + 3. PKCS #7: Cryptographic Message Syntax [RFC2315]. + + 4. Cryptographic Message Syntax [RFC5652]. + + + + + +Josefsson & Leonard Standards Track [Page 2] + +RFC 7468 PKIX Textual Encodings April 2015 + + + 5. PKCS #8: Private-Key Information Syntax [RFC5208], renamed to One + Asymmetric Key in Asymmetric Key Package [RFC5958], and Encrypted + Private-Key Information Syntax in the same documents. + + 6. Attribute Certificates in An Internet Attribute Certificate + Profile for Authorization [RFC5755]. + + A disadvantage of a binary data format is that it cannot be + interchanged in textual transports, such as email or text documents. + One advantage with text-based encodings is that they are easy to + modify using common text editors; for example, a user may concatenate + several certificates to form a certificate chain with copy-and-paste + operations. + + The tradition within the RFC series can be traced back to Privacy- + Enhanced Mail (PEM) [RFC1421], based on a proposal by Marshall Rose + in Message Encapsulation [RFC934]. Originally called "PEM + encapsulation mechanism", "encapsulated PEM message", or (arguably) + "PEM printable encoding", today the format is sometimes referred to + as "PEM encoding". Variations include OpenPGP ASCII armor [RFC4880] + and OpenSSH key file format [RFC4716]. + + For reasons that basically boil down to non-coordination or + inattention, many PKIX, PKCS, and CMS libraries implement a text- + based encoding that is similar to -- but not identical with -- PEM + encoding. This document specifies the _textual encoding_ format, + articulates the de facto rules that most implementations operate by, + and provides recommendations that will promote interoperability going + forward. This document also provides common nomenclature for syntax + elements, reflecting the evolution of this de facto standard format. + Peter Gutmann's "X.509 Style Guide" [X.509SG] contains a section + "base64 Encoding" that describes the formats and contains suggestions + similar to what is in this document. All figures are real, + functional examples, with key lengths and inner contents chosen to be + as small as practicable. + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and + "OPTIONAL" in this document are to be interpreted as described in RFC + 2119 [RFC2119]. + +2. General Considerations + + Textual encoding begins with a line comprising "-----BEGIN ", a + label, and "-----", and ends with a line comprising "-----END ", a + label, and "-----". Between these lines, or "encapsulation + boundaries", are base64-encoded data according to Section 4 of + [RFC4648]. (PEM [RFC1421] referred to this data as the "encapsulated + + + +Josefsson & Leonard Standards Track [Page 3] + +RFC 7468 PKIX Textual Encodings April 2015 + + + text portion".) Data before the encapsulation boundaries are + permitted, and parsers MUST NOT malfunction when processing such + data. Furthermore, parsers SHOULD ignore whitespace and other non- + base64 characters and MUST handle different newline conventions. + + The type of data encoded is labeled depending on the type label in + the "-----BEGIN " line (pre-encapsulation boundary). For example, + the line may be "-----BEGIN CERTIFICATE-----" to indicate that the + content is a PKIX certificate (see further below). Generators MUST + put the same label on the "-----END " line (post-encapsulation + boundary) as the corresponding "-----BEGIN " line. Labels are + formally case-sensitive, uppercase, and comprised of zero or more + characters; they do not contain consecutive spaces or hyphen-minuses, + nor do they contain spaces or hyphen-minuses at either end. Parsers + MAY disregard the label in the post-encapsulation boundary instead of + signaling an error if there is a label mismatch: some extant + implementations require the labels to match; others do not. + + There is exactly one space character (SP) separating the "BEGIN" or + "END" from the label. There are exactly five hyphen-minus (also + known as dash) characters ("-") on both ends of the encapsulation + boundaries, no more, no less. + + The label type implies that the encoded data follows the specified + syntax. Parsers MUST handle non-conforming data gracefully. + However, not all parsers or generators prior to this document behave + consistently. A conforming parser MAY interpret the contents as + another label type but ought to be aware of the security implications + discussed in the Security Considerations section. The labels + described in this document identify container formats that are not + specific to any particular cryptographic algorithm, a property + consistent with algorithm agility. These formats use the ASN.1 + AlgorithmIdentifier structure as described in Section 4.1.1.2 of + [RFC5280]. + + Unlike legacy PEM encoding [RFC1421], OpenPGP ASCII armor, and the + OpenSSH key file format, textual encoding does *not* define or permit + headers to be encoded alongside the data. Empty space can appear + between the pre-encapsulation boundary and the base64, but generators + SHOULD NOT emit such any such spacing. (The provision for this empty + area is a throwback to PEM, which defined an "encapsulated header + portion".) + + Implementers need to be aware that extant parsers diverge + considerably on the handling of whitespace. In this document, + "whitespace" means any character or series of characters that + represent horizontal or vertical space in typography. In US-ASCII, + whitespace means HT (0x09), VT (0x0B), FF (0x0C), SP (0x20), CR + + + +Josefsson & Leonard Standards Track [Page 4] + +RFC 7468 PKIX Textual Encodings April 2015 + + + (0x0D), and LF (0x0A); "blank" means HT and SP; lines are divided + with CRLF, CR, or LF. The common ABNF production WSP is congruent + with "blank"; a new production W is used for "whitespace". The ABNF + in Section 3 is specific to US-ASCII. As these textual encodings can + be used on many different systems as well as on long-term archival + storage media such as paper or engravings, an implementer ought to + use the spirit rather than the letter of the rules when generating or + parsing these formats in environments that are not strictly limited + to US-ASCII. + + Most extant parsers ignore blanks at the ends of lines; blanks at the + beginnings of lines or in the middle of the base64-encoded data are + far less compatible. These observations are codified in Figure 1. + The most lax parser implementations are not line-oriented at all and + will accept any mixture of whitespace outside of the encapsulation + boundaries (see Figure 2). Such lax parsing may run the risk of + accepting text that was not intended to be accepted in the first + place (e.g., because the text was a snippet or sample). + + Generators MUST wrap the base64-encoded lines so that each line + consists of exactly 64 characters except for the final line, which + will encode the remainder of the data (within the 64-character line + boundary), and they MUST NOT emit extraneous whitespace. Parsers MAY + handle other line sizes. These requirements are consistent with PEM + [RFC1421]. + + Files MAY contain multiple textual encoding instances. This is used, + for example, when a file contains several certificates. Whether the + instances are ordered or unordered depends on the context. + +3. ABNF + + The ABNF [RFC5234] of the textual encoding is: + + textualmsg = preeb *WSP eol + *eolWSP + base64text + posteb *WSP [eol] + + preeb = "-----BEGIN " label "-----" ; unlike [RFC1421] (A)BNF, + ; eol is not required (but + posteb = "-----END " label "-----" ; see [RFC1421], Section 4.4) + + base64char = ALPHA / DIGIT / "+" / "/" + + base64pad = "=" + + base64line = 1*base64char *WSP eol + + + +Josefsson & Leonard Standards Track [Page 5] + +RFC 7468 PKIX Textual Encodings April 2015 + + + base64finl = *base64char (base64pad *WSP eol base64pad / + *2base64pad) *WSP eol + ; ...AB= <EOL> = <EOL> is not good, but is valid + + base64text = *base64line base64finl + ; we could also use <encbinbody> from RFC 1421, which requires + ; 16 groups of 4 chars, which means exactly 64 chars per + ; line, except the final line, but this is more accurate + + labelchar = %x21-2C / %x2E-7E ; any printable character, + ; except hyphen-minus + + label = [ labelchar *( ["-" / SP] labelchar ) ] ; empty ok + + eol = CRLF / CR / LF + + eolWSP = WSP / CR / LF ; compare with LWSP + + Figure 1: ABNF (Standard) + + laxtextualmsg = *W preeb + laxbase64text + posteb *W + + W = WSP / CR / LF / %x0B / %x0C ; whitespace + + laxbase64text = *(W / base64char) [base64pad *W [base64pad *W]] + + Figure 2: ABNF (Lax) + + stricttextualmsg = preeb eol + strictbase64text + posteb eol + + strictbase64finl = *15(4base64char) (4base64char / 3base64char + base64pad / 2base64char 2base64pad) eol + + base64fullline = 64base64char eol + + strictbase64text = *base64fullline strictbase64finl + + Figure 3: ABNF (Strict) + + New implementations SHOULD emit the strict format (Figure 3) + specified above. The choice of parsing strategy depends on the + context of use. + + + + + +Josefsson & Leonard Standards Track [Page 6] + +RFC 7468 PKIX Textual Encodings April 2015 + + +4. Guide + + For convenience, these figures summarize the structures, encodings, + and references in the following sections: + +Sec. Label ASN.1 Type Reference Module +----+----------------------+-----------------------+---------+---------- + 5 CERTIFICATE Certificate [RFC5280] id-pkix1-e + 6 X509 CRL CertificateList [RFC5280] id-pkix1-e + 7 CERTIFICATE REQUEST CertificationRequest [RFC2986] id-pkcs10 + 8 PKCS7 ContentInfo [RFC2315] id-pkcs7* + 9 CMS ContentInfo [RFC5652] id-cms2004 + 10 PRIVATE KEY PrivateKeyInfo ::= [RFC5208] id-pkcs8 + OneAsymmetricKey [RFC5958] id-aKPV1 + 11 ENCRYPTED PRIVATE KEY EncryptedPrivateKeyInfo [RFC5958] id-aKPV1 + 12 ATTRIBUTE CERTIFICATE AttributeCertificate [RFC5755] id-acv2 + 13 PUBLIC KEY SubjectPublicKeyInfo [RFC5280] id-pkix1-e + + Figure 4: Convenience Guide + + ----------------------------------------------------------------------- + id-pkixmod OBJECT IDENTIFIER ::= {iso(1) identified-organization(3) + dod(6) internet(1) security(5) mechanisms(5) pkix(7) mod(0)} + id-pkix1-e OBJECT IDENTIFIER ::= {id-pkixmod pkix1-explicit(18)} + id-acv2 OBJECT IDENTIFIER ::= {id-pkixmod mod-attribute-cert-v2(61)} + id-pkcs OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840) + rsadsi(113549) pkcs(1)} + id-pkcs10 OBJECT IDENTIFIER ::= {id-pkcs 10 modules(1) pkcs-10(1)} + id-pkcs7 OBJECT IDENTIFIER ::= {id-pkcs 7 modules(0) pkcs-7(1)} + id-pkcs8 OBJECT IDENTIFIER ::= {id-pkcs 8 modules(1) pkcs-8(1)} + id-sm-mod OBJECT IDENTIFIER ::= {id-pkcs 9 smime(16) modules(0)} + id-aKPV1 OBJECT IDENTIFIER ::= {id-sm-mod mod-asymmetricKeyPkgV1(50)} + id-cms2004 OBJECT IDENTIFIER ::= {id-sm-mod cms-2004(24)} + + * This OID does not actually appear in PKCS #7 v1.5 [RFC2315]. It + was defined in the ASN.1 module to PKCS #7 v1.6 [P7v1.6], and has + been carried forward through PKCS #12 [RFC7292]. + + Figure 5: ASN.1 Module Object Identifier Value Assignments + + + + + + + + + + + + +Josefsson & Leonard Standards Track [Page 7] + +RFC 7468 PKIX Textual Encodings April 2015 + + +5. Textual Encoding of Certificates + +5.1. Encoding + + Public-key certificates are encoded using the "CERTIFICATE" label. + The encoded data MUST be a BER (DER strongly preferred; see + Appendix B) encoded ASN.1 Certificate structure as described in + Section 4 of [RFC5280]. + +-----BEGIN CERTIFICATE----- +MIICLDCCAdKgAwIBAgIBADAKBggqhkjOPQQDAjB9MQswCQYDVQQGEwJCRTEPMA0G +A1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2VydGlmaWNhdGUgYXV0aG9y +aXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdudVRMUyBjZXJ0aWZpY2F0 +ZSBhdXRob3JpdHkwHhcNMTEwNTIzMjAzODIxWhcNMTIxMjIyMDc0MTUxWjB9MQsw +CQYDVQQGEwJCRTEPMA0GA1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2Vy +dGlmaWNhdGUgYXV0aG9yaXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdu +dVRMUyBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkwWTATBgcqhkjOPQIBBggqhkjOPQMB +BwNCAARS2I0jiuNn14Y2sSALCX3IybqiIJUvxUpj+oNfzngvj/Niyv2394BWnW4X +uQ4RTEiywK87WRcWMGgJB5kX/t2no0MwQTAPBgNVHRMBAf8EBTADAQH/MA8GA1Ud +DwEB/wQFAwMHBgAwHQYDVR0OBBYEFPC0gf6YEr+1KLlkQAPLzB9mTigDMAoGCCqG +SM49BAMCA0gAMEUCIDGuwD1KPyG+hRf88MeyMQcqOFZD0TbVleF+UsAGQ4enAiEA +l4wOuDwKQa+upc8GftXE2C//4mKANBC6It01gUaTIpo= +-----END CERTIFICATE----- + + Figure 6: Certificate Example + + Historically, the label "X509 CERTIFICATE" and also less commonly + "X.509 CERTIFICATE" have been used. Generators conforming to this + document MUST generate "CERTIFICATE" labels and MUST NOT generate + "X509 CERTIFICATE" or "X.509 CERTIFICATE" labels. Parsers SHOULD NOT + treat "X509 CERTIFICATE" or "X.509 CERTIFICATE" as equivalent to + "CERTIFICATE", but a valid exception may be for backwards + compatibility (potentially together with a warning). + + + + + + + + + + + + + + + + + + +Josefsson & Leonard Standards Track [Page 8] + +RFC 7468 PKIX Textual Encodings April 2015 + + +5.2. Explanatory Text + + Many tools are known to emit explanatory text before the BEGIN and + after the END lines for PKIX certificates, more than any other type. + If emitted, such text SHOULD be related to the certificate, such as + providing a textual representation of key data elements in the + certificate. + +Subject: CN=Atlantis +Issuer: CN=Atlantis +Validity: from 7/9/2012 3:10:38 AM UTC to 7/9/2013 3:10:37 AM UTC +-----BEGIN CERTIFICATE----- +MIIBmTCCAUegAwIBAgIBKjAJBgUrDgMCHQUAMBMxETAPBgNVBAMTCEF0bGFudGlz +MB4XDTEyMDcwOTAzMTAzOFoXDTEzMDcwOTAzMTAzN1owEzERMA8GA1UEAxMIQXRs +YW50aXMwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAu+BXo+miabDIHHx+yquqzqNh +Ryn/XtkJIIHVcYtHvIX+S1x5ErgMoHehycpoxbErZmVR4GCq1S2diNmRFZCRtQID +AQABo4GJMIGGMAwGA1UdEwEB/wQCMAAwIAYDVR0EAQH/BBYwFDAOMAwGCisGAQQB +gjcCARUDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDAzA1BgNVHQEE +LjAsgBA0jOnSSuIHYmnVryHAdywMoRUwEzERMA8GA1UEAxMIQXRsYW50aXOCASow +CQYFKw4DAh0FAANBAKi6HRBaNEL5R0n56nvfclQNaXiDT174uf+lojzA4lhVInc0 +ILwpnZ1izL4MlI9eCSHhVQBHEp2uQdXJB+d5Byg= +-----END CERTIFICATE----- + + Figure 7: Certificate Example with Explanatory Text + +5.3. File Extension + + Although textual encodings of PKIX structures can occur anywhere, + many tools are known to offer an option to output this encoding when + serializing PKIX structures. To promote interoperability and to + separate DER encodings from textual encodings, the extension ".crt" + SHOULD be used for the textual encoding of a certificate. + Implementations should be aware that in spite of this recommendation, + many tools still default to encode certificates in this textual + encoding with the extension ".cer". + + This section does not disturb the official application/pkix-cert + registration [RFC2585] in any way (which states that "each '.cer' + file contains exactly one certificate, encoded in DER format"), but + merely articulates a widespread, de facto alternative. + + + + + + + + + + + +Josefsson & Leonard Standards Track [Page 9] + +RFC 7468 PKIX Textual Encodings April 2015 + + +6. Textual Encoding of Certificate Revocation Lists + + Certificate Revocation Lists (CRLs) are encoded using the "X509 CRL" + label. The encoded data MUST be a BER (DER strongly preferred; see + Appendix B) encoded ASN.1 CertificateList structure as described in + Section 5 of [RFC5280]. + +-----BEGIN X509 CRL----- +MIIB9DCCAV8CAQEwCwYJKoZIhvcNAQEFMIIBCDEXMBUGA1UEChMOVmVyaVNpZ24s +IEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxRjBEBgNVBAsT +PXd3dy52ZXJpc2lnbi5jb20vcmVwb3NpdG9yeS9SUEEgSW5jb3JwLiBieSBSZWYu +LExJQUIuTFREKGMpOTgxHjAcBgNVBAsTFVBlcnNvbmEgTm90IFZhbGlkYXRlZDEm +MCQGA1UECxMdRGlnaXRhbCBJRCBDbGFzcyAxIC0gTmV0c2NhcGUxGDAWBgNVBAMU +D1NpbW9uIEpvc2Vmc3NvbjEiMCAGCSqGSIb3DQEJARYTc2ltb25Aam9zZWZzc29u +Lm9yZxcNMDYxMjI3MDgwMjM0WhcNMDcwMjA3MDgwMjM1WjAjMCECEC4QNwPfRoWd +elUNpllhhTgXDTA2MTIyNzA4MDIzNFowCwYJKoZIhvcNAQEFA4GBAD0zX+J2hkcc +Nbrq1Dn5IKL8nXLgPGcHv1I/le1MNo9t1ohGQxB5HnFUkRPAY82fR6Epor4aHgVy +b+5y+neKN9Kn2mPF4iiun+a4o26CjJ0pArojCL1p8T0yyi9Xxvyc/ezaZ98HiIyP +c3DGMNR+oUmSjKZ0jIhAYmeLxaPHfQwR +-----END X509 CRL----- + + Figure 8: CRL Example + + Historically, the label "CRL" has rarely been used. Today, it is not + common and many popular tools do not understand the label. + Therefore, this document standardizes "X509 CRL" in order to promote + interoperability and backwards-compatibility. Generators conforming + to this document MUST generate "X509 CRL" labels and MUST NOT + generate "CRL" labels. Parsers SHOULD NOT treat "CRL" as equivalent + to "X509 CRL". + + + + + + + + + + + + + + + + + + + + + +Josefsson & Leonard Standards Track [Page 10] + +RFC 7468 PKIX Textual Encodings April 2015 + + +7. Textual Encoding of PKCS #10 Certification Request Syntax + + PKCS #10 Certification Requests are encoded using the + "CERTIFICATE REQUEST" label. The encoded data MUST be a BER (DER + strongly preferred; see Appendix B) encoded ASN.1 + CertificationRequest structure as described in [RFC2986]. + +-----BEGIN CERTIFICATE REQUEST----- +MIIBWDCCAQcCAQAwTjELMAkGA1UEBhMCU0UxJzAlBgNVBAoTHlNpbW9uIEpvc2Vm +c3NvbiBEYXRha29uc3VsdCBBQjEWMBQGA1UEAxMNam9zZWZzc29uLm9yZzBOMBAG +ByqGSM49AgEGBSuBBAAhAzoABLLPSkuXY0l66MbxVJ3Mot5FCFuqQfn6dTs+9/CM +EOlSwVej77tj56kj9R/j9Q+LfysX8FO9I5p3oGIwYAYJKoZIhvcNAQkOMVMwUTAY +BgNVHREEETAPgg1qb3NlZnNzb24ub3JnMAwGA1UdEwEB/wQCMAAwDwYDVR0PAQH/ +BAUDAwegADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDATAKBggqhkjOPQQDAgM/ADA8 +AhxBvfhxPFfbBbsE1NoFmCUczOFApEuQVUw3ZP69AhwWXk3dgSUsKnuwL5g/ftAY +dEQc8B8jAcnuOrfU +-----END CERTIFICATE REQUEST----- + + Figure 9: PKCS #10 Example + + The label "NEW CERTIFICATE REQUEST" is also in wide use. Generators + conforming to this document MUST generate "CERTIFICATE REQUEST" + labels. Parsers MAY treat "NEW CERTIFICATE REQUEST" as equivalent to + "CERTIFICATE REQUEST". + +8. Textual Encoding of PKCS #7 Cryptographic Message Syntax + + PKCS #7 Cryptographic Message Syntax structures are encoded using the + "PKCS7" label. The encoded data MUST be a BER-encoded ASN.1 + ContentInfo structure as described in [RFC2315]. + +-----BEGIN PKCS7----- +MIHjBgsqhkiG9w0BCRABF6CB0zCB0AIBADFho18CAQCgGwYJKoZIhvcNAQUMMA4E +CLfrI6dr0gUWAgITiDAjBgsqhkiG9w0BCRADCTAUBggqhkiG9w0DBwQIZpECRWtz +u5kEGDCjerXY8odQ7EEEromZJvAurk/j81IrozBSBgkqhkiG9w0BBwEwMwYLKoZI +hvcNAQkQAw8wJDAUBggqhkiG9w0DBwQI0tCBcU09nxEwDAYIKwYBBQUIAQIFAIAQ +OsYGYUFdAH0RNc1p4VbKEAQUM2Xo8PMHBoYdqEcsbTodlCFAZH4= +-----END PKCS7----- + + Figure 10: PKCS #7 Example + + The label "CERTIFICATE CHAIN" has been in use to denote a degenerate + PKCS #7 structure that contains only a list of certificates (see + Section 9 of [RFC2315]). Several modern tools do not support this + label. Generators MUST NOT generate the "CERTIFICATE CHAIN" label. + Parsers SHOULD NOT treat "CERTIFICATE CHAIN" as equivalent to + "PKCS7". + + + + +Josefsson & Leonard Standards Track [Page 11] + +RFC 7468 PKIX Textual Encodings April 2015 + + + PKCS #7 is an old specification that has long been superseded by CMS + [RFC5652]. Implementations SHOULD NOT generate PKCS #7 when CMS is + an alternative. + +9. Textual Encoding of Cryptographic Message Syntax + + Cryptographic Message Syntax structures are encoded using the "CMS" + label. The encoded data MUST be a BER-encoded ASN.1 ContentInfo + structure as described in [RFC5652]. + +-----BEGIN CMS----- +MIGDBgsqhkiG9w0BCRABCaB0MHICAQAwDQYLKoZIhvcNAQkQAwgwXgYJKoZIhvcN +AQcBoFEET3icc87PK0nNK9ENqSxItVIoSa0o0S/ISczMs1ZIzkgsKk4tsQ0N1nUM +dvb05OXi5XLPLEtViMwvLVLwSE0sKlFIVHAqSk3MBkkBAJv0Fx0= +-----END CMS----- + + Figure 11: CMS Example + + CMS is the IETF successor to PKCS #7. Section 1.1.1 of [RFC5652] + describes the changes since PKCS #7 v1.5. Implementations SHOULD + generate CMS when it is an alternative, promoting interoperability + and forwards-compatibility. + +10. One Asymmetric Key and the Textual Encoding of PKCS #8 Private Key + Info + + Unencrypted PKCS #8 Private Key Information Syntax structures + (PrivateKeyInfo), renamed to Asymmetric Key Packages + (OneAsymmetricKey), are encoded using the "PRIVATE KEY" label. The + encoded data MUST be a BER (DER preferred; see Appendix B) encoded + ASN.1 PrivateKeyInfo structure as described in PKCS #8 [RFC5208], or + a OneAsymmetricKey structure as described in [RFC5958]. The two are + semantically identical and can be distinguished by version number. + +-----BEGIN PRIVATE KEY----- +MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgVcB/UNPxalR9zDYAjQIf +jojUDiQuGnSJrFEEzZPT/92hRANCAASc7UJtgnF/abqWM60T3XNJEzBv5ez9TdwK +H0M6xpM2q+53wmsN/eYLdgtjgBd3DBmHtPilCkiFICXyaA8z9LkJ +-----END PRIVATE KEY----- + + Figure 12: PKCS #8 PrivateKeyInfo (OneAsymmetricKey) Example + + + + + + + + + + +Josefsson & Leonard Standards Track [Page 12] + +RFC 7468 PKIX Textual Encodings April 2015 + + +11. Textual Encoding of PKCS #8 Encrypted Private Key Info + + Encrypted PKCS #8 Private Key Information Syntax structures + (EncryptedPrivateKeyInfo), called the same in [RFC5958], are encoded + using the "ENCRYPTED PRIVATE KEY" label. The encoded data MUST be a + BER (DER preferred; see Appendix B) encoded ASN.1 + EncryptedPrivateKeyInfo structure as described in PKCS #8 [RFC5208] + and [RFC5958]. + +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIHNMEAGCSqGSIb3DQEFDTAzMBsGCSqGSIb3DQEFDDAOBAghhICA6T/51QICCAAw +FAYIKoZIhvcNAwcECBCxDgvI59i9BIGIY3CAqlMNBgaSI5QiiWVNJ3IpfLnEiEsW +Z0JIoHyRmKK/+cr9QPLnzxImm0TR9s4JrG3CilzTWvb0jIvbG3hu0zyFPraoMkap +8eRzWsIvC5SVel+CSjoS2mVS87cyjlD+txrmrXOVYDE+eTgMLbrLmsWh3QkCTRtF +QC7k0NNzUHTV9yGDwfqMbw== +-----END ENCRYPTED PRIVATE KEY----- + + Figure 13: PKCS #8 EncryptedPrivateKeyInfo Example + +12. Textual Encoding of Attribute Certificates + + Attribute certificates are encoded using the "ATTRIBUTE CERTIFICATE" + label. The encoded data MUST be a BER (DER strongly preferred; see + Appendix B) encoded ASN.1 AttributeCertificate structure as described + in [RFC5755]. + +-----BEGIN ATTRIBUTE CERTIFICATE----- +MIICKzCCAZQCAQEwgZeggZQwgYmkgYYwgYMxCzAJBgNVBAYTAlVTMREwDwYDVQQI +DAhOZXcgWW9yazEUMBIGA1UEBwwLU3RvbnkgQnJvb2sxDzANBgNVBAoMBkNTRTU5 +MjE6MDgGA1UEAwwxU2NvdHQgU3RhbGxlci9lbWFpbEFkZHJlc3M9c3N0YWxsZXJA +aWMuc3VueXNiLmVkdQIGARWrgUUSoIGMMIGJpIGGMIGDMQswCQYDVQQGEwJVUzER +MA8GA1UECAwITmV3IFlvcmsxFDASBgNVBAcMC1N0b255IEJyb29rMQ8wDQYDVQQK +DAZDU0U1OTIxOjA4BgNVBAMMMVNjb3R0IFN0YWxsZXIvZW1haWxBZGRyZXNzPXNz +dGFsbGVyQGljLnN1bnlzYi5lZHUwDQYJKoZIhvcNAQEFBQACBgEVq4FFSjAiGA8z +OTA3MDIwMTA1MDAwMFoYDzM5MTEwMTMxMDUwMDAwWjArMCkGA1UYSDEiMCCGHmh0 +dHA6Ly9pZGVyYXNobi5vcmcvaW5kZXguaHRtbDANBgkqhkiG9w0BAQUFAAOBgQAV +M9axFPXXozEFcer06bj9MCBBCQLtAM7ZXcZjcxyva7xCBDmtZXPYUluHf5OcWPJz +5XPus/xS9wBgtlM3fldIKNyNO8RsMp6Ocx+PGlICc7zpZiGmCYLl64lAEGPO/bsw +Smluak1aZIttePeTAHeJJs8izNJ5aR3Wcd3A5gLztQ== +-----END ATTRIBUTE CERTIFICATE----- + + Figure 14: Attribute Certificate Example + + + + + + + + + +Josefsson & Leonard Standards Track [Page 13] + +RFC 7468 PKIX Textual Encodings April 2015 + + +13. Textual Encoding of Subject Public Key Info + + Public keys are encoded using the "PUBLIC KEY" label. The encoded + data MUST be a BER (DER preferred; see Appendix B) encoded ASN.1 + SubjectPublicKeyInfo structure as described in Section 4.1.2.7 of + [RFC5280]. + +-----BEGIN PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEn1LlwLN/KBYQRVH6HfIMTzfEqJOVztLe +kLchp2hi78cCaMY81FBlYs8J9l7krc+M4aBeCGYFjba+hiXttJWPL7ydlE+5UG4U +Nkn3Eos8EiZByi9DVsyfy9eejh+8AXgp +-----END PUBLIC KEY----- + + Figure 15: Subject Public Key Info Example + +14. Security Considerations + + Data in this format often originates from untrusted sources, thus + parsers must be prepared to handle unexpected data without causing + security vulnerabilities. + + Implementers building implementations that rely on canonical + representation or the ability to fingerprint a particular data object + need to understand that this document does not define canonical + encodings. The first ambiguity is introduced by permitting the text- + encoded representation instead of the binary BER or DER encodings, + but further ambiguities arise when multiple labels are treated as + similar. Variations of whitespace and non-base64 alphabetic + characters can create further ambiguities. Data encoding ambiguities + also create opportunities for side channels. If canonical encodings + are desired, the encoded structure must be decoded and processed into + a canonical form (namely, DER encoding). + +15. References + +15.1. Normative References + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", BCP 14, RFC 2119, March 1997, + <http://www.rfc-editor.org/info/rfc2119>. + + [RFC2315] Kaliski, B., "PKCS #7: Cryptographic Message Syntax + Version 1.5", RFC 2315, March 1998, + <http://www.rfc-editor.org/info/rfc2315>. + + [RFC2986] Nystrom, M. and B. Kaliski, "PKCS #10: Certification + Request Syntax Specification Version 1.7", RFC 2986, + November 2000, <http://www.rfc-editor.org/info/rfc2986>. + + + +Josefsson & Leonard Standards Track [Page 14] + +RFC 7468 PKIX Textual Encodings April 2015 + + + [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data + Encodings", RFC 4648, October 2006, + <http://www.rfc-editor.org/info/rfc4648>. + + [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., + Housley, R., and W. Polk, "Internet X.509 Public Key + Infrastructure Certificate and Certificate Revocation List + (CRL) Profile", RFC 5280, May 2008, + <http://www.rfc-editor.org/info/rfc5280>. + + [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax + Specifications: ABNF", STD 68, RFC 5234, January 2008, + <http://www.rfc-editor.org/info/rfc5234>. + + [RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, + RFC 5652, September 2009, + <http://www.rfc-editor.org/info/rfc5652>. + + [RFC5755] Farrell, S., Housley, R., and S. Turner, "An Internet + Attribute Certificate Profile for Authorization", RFC + 5755, January 2010, + <http://www.rfc-editor.org/info/rfc5755>. + + [RFC5958] Turner, S., "Asymmetric Key Packages", RFC 5958, August + 2010, <http://www.rfc-editor.org/info/rfc5958>. + + [X.690] International Telecommunications Union, "Information + Technology - ASN.1 encoding rules: Specification of Basic + Encoding Rules (BER), Canonical Encoding Rules (CER) and + Distinguished Encoding Rules (DER)", ITU-T Recommendation + X.690, ISO/IEC 8825-1:2008, November 2008. + +15.2. Informative References + + [RFC934] Rose, M. and E. Stefferud, "Proposed standard for message + encapsulation", RFC 934, January 1985, + <http://www.rfc-editor.org/info/rfc934>. + + [RFC1421] Linn, J., "Privacy Enhancement for Internet Electronic + Mail: Part I: Message Encryption and Authentication + Procedures", RFC 1421, February 1993, + <http://www.rfc-editor.org/info/rfc1421>. + + [RFC2585] Housley, R. and P. Hoffman, "Internet X.509 Public Key + Infrastructure Operational Protocols: FTP and HTTP", RFC + 2585, May 1999, <http://www.rfc-editor.org/info/rfc2585>. + + + + + +Josefsson & Leonard Standards Track [Page 15] + +RFC 7468 PKIX Textual Encodings April 2015 + + + [RFC4716] Galbraith, J. and R. Thayer, "The Secure Shell (SSH) + Public Key File Format", RFC 4716, November 2006, + <http://www.rfc-editor.org/info/rfc4716>. + + [RFC4880] Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R. + Thayer, "OpenPGP Message Format", RFC 4880, November 2007, + <http://www.rfc-editor.org/info/rfc4880>. + + [RFC5208] Kaliski, B., "Public-Key Cryptography Standards (PKCS) #8: + Private-Key Information Syntax Specification Version 1.2", + RFC 5208, May 2008, + <http://www.rfc-editor.org/info/rfc5208>. + + [RFC7292] Moriarty, K., Ed., Nystrom, M., Parkinson, S., Rusch, A., + and M. Scott, "PKCS #12: Personal Information Exchange + Syntax v1.1", RFC 7292, July 2014, + <http://www.rfc-editor.org/info/rfc7292>. + + [P7v1.6] Kaliski, B. and K. Kingdon, "Extensions and Revisions to + PKCS #7 (Version 1.6 Bulletin)", May 1997, + <http://www.emc.com/emc-plus/rsa-labs/ + standards-initiatives/pkcs-7-cryptographic-message- + syntax-standar.htm>. + + [X.509SG] Gutmann, P., "X.509 Style Guide", October 2000, + <http://www.cs.auckland.ac.nz/~pgut001/pubs/ + x509guide.txt>. + + + + + + + + + + + + + + + + + + + + + + + + +Josefsson & Leonard Standards Track [Page 16] + +RFC 7468 PKIX Textual Encodings April 2015 + + +Appendix A. Non-conforming Examples + + This appendix contains examples for the non-recommended label + variants described earlier in this document. As discussed earlier, + supporting these is not required and is sometimes discouraged. + Still, they can be useful for interoperability testing and for easy + reference. + +-----BEGIN X509 CERTIFICATE----- +MIIBHDCBxaADAgECAgIcxzAJBgcqhkjOPQQBMBAxDjAMBgNVBAMUBVBLSVghMB4X +DTE0MDkxNDA2MTU1MFoXDTI0MDkxNDA2MTU1MFowEDEOMAwGA1UEAxQFUEtJWCEw +WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATwoQSr863QrR0PoRIYQ96H7WykDePH +Wa0eVAE24bth43wCNc+U5aZ761dhGhSSJkVWRgVH5+prLIr+nzfIq+X4oxAwDjAM +BgNVHRMBAf8EAjAAMAkGByqGSM49BAEDRwAwRAIfMdKS5F63lMnWVhi7uaKJzKCs +NnY/OKgBex6MIEAv2AIhAI2GdvfL+mGvhyPZE+JxRxWChmggb5/9eHdUcmW/jkOH +-----END X509 CERTIFICATE----- + + Figure 16: Non-standard 'X509' Certificate Example + +-----BEGIN X.509 CERTIFICATE----- +MIIBHDCBxaADAgECAgIcxzAJBgcqhkjOPQQBMBAxDjAMBgNVBAMUBVBLSVghMB4X +DTE0MDkxNDA2MTU1MFoXDTI0MDkxNDA2MTU1MFowEDEOMAwGA1UEAxQFUEtJWCEw +WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATwoQSr863QrR0PoRIYQ96H7WykDePH +Wa0eVAE24bth43wCNc+U5aZ761dhGhSSJkVWRgVH5+prLIr+nzfIq+X4oxAwDjAM +BgNVHRMBAf8EAjAAMAkGByqGSM49BAEDRwAwRAIfMdKS5F63lMnWVhi7uaKJzKCs +NnY/OKgBex6MIEAv2AIhAI2GdvfL+mGvhyPZE+JxRxWChmggb5/9eHdUcmW/jkOH +-----END X.509 CERTIFICATE----- + + Figure 17: Non-standard 'X.509' Certificate Example + +-----BEGIN NEW CERTIFICATE REQUEST----- +MIIBWDCCAQcCAQAwTjELMAkGA1UEBhMCU0UxJzAlBgNVBAoTHlNpbW9uIEpvc2Vm +c3NvbiBEYXRha29uc3VsdCBBQjEWMBQGA1UEAxMNam9zZWZzc29uLm9yZzBOMBAG +ByqGSM49AgEGBSuBBAAhAzoABLLPSkuXY0l66MbxVJ3Mot5FCFuqQfn6dTs+9/CM +EOlSwVej77tj56kj9R/j9Q+LfysX8FO9I5p3oGIwYAYJKoZIhvcNAQkOMVMwUTAY +BgNVHREEETAPgg1qb3NlZnNzb24ub3JnMAwGA1UdEwEB/wQCMAAwDwYDVR0PAQH/ +BAUDAwegADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDATAKBggqhkjOPQQDAgM/ADA8 +AhxBvfhxPFfbBbsE1NoFmCUczOFApEuQVUw3ZP69AhwWXk3dgSUsKnuwL5g/ftAY +dEQc8B8jAcnuOrfU +-----END NEW CERTIFICATE REQUEST----- + + Figure 18: Non-standard 'NEW' PKCS #10 Example + + + + + + + + + +Josefsson & Leonard Standards Track [Page 17] + +RFC 7468 PKIX Textual Encodings April 2015 + + +-----BEGIN CERTIFICATE CHAIN----- +MIHjBgsqhkiG9w0BCRABF6CB0zCB0AIBADFho18CAQCgGwYJKoZIhvcNAQUMMA4E +CLfrI6dr0gUWAgITiDAjBgsqhkiG9w0BCRADCTAUBggqhkiG9w0DBwQIZpECRWtz +u5kEGDCjerXY8odQ7EEEromZJvAurk/j81IrozBSBgkqhkiG9w0BBwEwMwYLKoZI +hvcNAQkQAw8wJDAUBggqhkiG9w0DBwQI0tCBcU09nxEwDAYIKwYBBQUIAQIFAIAQ +OsYGYUFdAH0RNc1p4VbKEAQUM2Xo8PMHBoYdqEcsbTodlCFAZH4= +-----END CERTIFICATE CHAIN----- + + Figure 19: Non-standard 'CERTIFICATE CHAIN' Example + +Appendix B. DER Expectations + + This appendix is informative. Consult the respective standards for + the normative rules. + + DER is a restricted profile of BER [X.690]; thus, all DER encodings + of data values are BER encodings, but just one of the BER encodings + is the DER encoding for a data value. Canonical encoding matters + when performing cryptographic operations; additionally, canonical + encoding has certain efficiency advantages for parsers. There are + three principal reasons to encode with DER: + + 1. A digital signature is (supposed to be) computed over the DER + encoding of the semantic content, so providing anything other + than the DER encoding is senseless. (In practice, an implementer + might choose to have an implementation parse and digest the data + as is, but this practice amounts to guesswork.) + + 2. In practice, cryptographic hashes are computed over the DER + encoding for identification. + + 3. In practice, the content is small. DER always encodes data + values in definite-length form (where the length is stated at the + beginning of the encoding); thus, a parser can anticipate memory + or resource usage up front. + + + + + + + + + + + + + + + + +Josefsson & Leonard Standards Track [Page 18] + +RFC 7468 PKIX Textual Encodings April 2015 + + + Figure 20 matches the structures in this document with the particular + reasons for DER encoding: + + Sec. Label Reasons + ----+----------------------+------- + 5 CERTIFICATE 1 2 ~3 + 6 X509 CRL 1 + 7 CERTIFICATE REQUEST 1 ~3 + 8 PKCS7 * + 9 CMS * + 10 PRIVATE KEY 3 + 11 ENCRYPTED PRIVATE KEY 3 + 12 ATTRIBUTE CERTIFICATE 1 ~3 + 13 PUBLIC KEY 2 3 + + Figure 20: Guide for DER Encoding + + * Cryptographic Message Syntax is designed for content of any length; + indefinite-length encoding enables one-pass processing (streaming) + when generating the encoding. Only certain parts -- namely, signed + and authenticated attributes -- need to be DER encoded. + + ~ Although not always "small", these encoded structures should not be + particularly "large" (e.g., more than 16 kilobytes). The parser + ought to be informed of large things up front in any event; this is + yet another reason to DER encode these things in the first place. + + Figure 20: Guide for DER Encoding + +Acknowledgements + + Peter Gutmann suggested to document labels for Attribute Certificates + and PKCS #7 messages, and to add examples for the non-standard + variants. Dr. Stephen Henson suggested distinguishing when BER + versus DER is appropriate or necessary. + + + + + + + + + + + + + + + + +Josefsson & Leonard Standards Track [Page 19] + +RFC 7468 PKIX Textual Encodings April 2015 + + +Authors' Addresses + + Simon Josefsson + SJD AB + Johan Olof Wallins Vaeg 13 + Solna 171 64 + Sweden + + EMail: simon@josefsson.org + URI: http://josefsson.org/ + + + Sean Leonard + Penango, Inc. + 5900 Wilshire Boulevard + 21st Floor + Los Angeles, CA 90036 + United States + + EMail: dev+ietf@seantek.com + URI: http://www.penango.com/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Josefsson & Leonard Standards Track [Page 20] + |