8460 lines
344 KiB
Plaintext
8460 lines
344 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group D. Cooper
|
||
Request for Comments: 5280 NIST
|
||
Obsoletes: 3280, 4325, 4630 S. Santesson
|
||
Category: Standards Track Microsoft
|
||
S. Farrell
|
||
Trinity College Dublin
|
||
S. Boeyen
|
||
Entrust
|
||
R. Housley
|
||
Vigil Security
|
||
W. Polk
|
||
NIST
|
||
May 2008
|
||
|
||
|
||
Internet X.509 Public Key Infrastructure Certificate
|
||
and Certificate Revocation List (CRL) Profile
|
||
|
||
Status of This Memo
|
||
|
||
This document specifies an Internet standards track protocol for the
|
||
Internet community, and requests discussion and suggestions for
|
||
improvements. Please refer to the current edition of the "Internet
|
||
Official Protocol Standards" (STD 1) for the standardization state
|
||
and status of this protocol. Distribution of this memo is unlimited.
|
||
|
||
Abstract
|
||
|
||
This memo profiles the X.509 v3 certificate and X.509 v2 certificate
|
||
revocation list (CRL) for use in the Internet. An overview of this
|
||
approach and model is provided as an introduction. The X.509 v3
|
||
certificate format is described in detail, with additional
|
||
information regarding the format and semantics of Internet name
|
||
forms. Standard certificate extensions are described and two
|
||
Internet-specific extensions are defined. A set of required
|
||
certificate extensions is specified. The X.509 v2 CRL format is
|
||
described in detail along with standard and Internet-specific
|
||
extensions. An algorithm for X.509 certification path validation is
|
||
described. An ASN.1 module and examples are provided in the
|
||
appendices.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 1]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction ....................................................4
|
||
2. Requirements and Assumptions ....................................6
|
||
2.1. Communication and Topology .................................7
|
||
2.2. Acceptability Criteria .....................................7
|
||
2.3. User Expectations ..........................................7
|
||
2.4. Administrator Expectations .................................8
|
||
3. Overview of Approach ............................................8
|
||
3.1. X.509 Version 3 Certificate ................................9
|
||
3.2. Certification Paths and Trust .............................10
|
||
3.3. Revocation ................................................13
|
||
3.4. Operational Protocols .....................................14
|
||
3.5. Management Protocols ......................................14
|
||
4. Certificate and Certificate Extensions Profile .................16
|
||
4.1. Basic Certificate Fields ..................................16
|
||
4.1.1. Certificate Fields .................................17
|
||
4.1.1.1. tbsCertificate ............................18
|
||
4.1.1.2. signatureAlgorithm ........................18
|
||
4.1.1.3. signatureValue ............................18
|
||
4.1.2. TBSCertificate .....................................18
|
||
4.1.2.1. Version ...................................19
|
||
4.1.2.2. Serial Number .............................19
|
||
4.1.2.3. Signature .................................19
|
||
4.1.2.4. Issuer ....................................20
|
||
4.1.2.5. Validity ..................................22
|
||
4.1.2.5.1. UTCTime ........................23
|
||
4.1.2.5.2. GeneralizedTime ................23
|
||
4.1.2.6. Subject ...................................23
|
||
4.1.2.7. Subject Public Key Info ...................25
|
||
4.1.2.8. Unique Identifiers ........................25
|
||
4.1.2.9. Extensions ................................26
|
||
4.2. Certificate Extensions ....................................26
|
||
4.2.1. Standard Extensions ................................27
|
||
4.2.1.1. Authority Key Identifier ..................27
|
||
4.2.1.2. Subject Key Identifier ....................28
|
||
4.2.1.3. Key Usage .................................29
|
||
4.2.1.4. Certificate Policies ......................32
|
||
4.2.1.5. Policy Mappings ...........................35
|
||
4.2.1.6. Subject Alternative Name ..................35
|
||
4.2.1.7. Issuer Alternative Name ...................38
|
||
4.2.1.8. Subject Directory Attributes ..............39
|
||
4.2.1.9. Basic Constraints .........................39
|
||
4.2.1.10. Name Constraints .........................40
|
||
4.2.1.11. Policy Constraints .......................43
|
||
4.2.1.12. Extended Key Usage .......................44
|
||
4.2.1.13. CRL Distribution Points ..................45
|
||
4.2.1.14. Inhibit anyPolicy ........................48
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 2]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
4.2.1.15. Freshest CRL (a.k.a. Delta CRL
|
||
Distribution Point) ......................48
|
||
4.2.2. Private Internet Extensions ........................49
|
||
4.2.2.1. Authority Information Access ..............49
|
||
4.2.2.2. Subject Information Access ................51
|
||
5. CRL and CRL Extensions Profile .................................54
|
||
5.1. CRL Fields ................................................55
|
||
5.1.1. CertificateList Fields .............................56
|
||
5.1.1.1. tbsCertList ...............................56
|
||
5.1.1.2. signatureAlgorithm ........................57
|
||
5.1.1.3. signatureValue ............................57
|
||
5.1.2. Certificate List "To Be Signed" ....................58
|
||
5.1.2.1. Version ...................................58
|
||
5.1.2.2. Signature .................................58
|
||
5.1.2.3. Issuer Name ...............................58
|
||
5.1.2.4. This Update ...............................58
|
||
5.1.2.5. Next Update ...............................59
|
||
5.1.2.6. Revoked Certificates ......................59
|
||
5.1.2.7. Extensions ................................60
|
||
5.2. CRL Extensions ............................................60
|
||
5.2.1. Authority Key Identifier ...........................60
|
||
5.2.2. Issuer Alternative Name ............................60
|
||
5.2.3. CRL Number .........................................61
|
||
5.2.4. Delta CRL Indicator ................................62
|
||
5.2.5. Issuing Distribution Point .........................65
|
||
5.2.6. Freshest CRL (a.k.a. Delta CRL Distribution
|
||
Point) .............................................67
|
||
5.2.7. Authority Information Access .......................67
|
||
5.3. CRL Entry Extensions ......................................69
|
||
5.3.1. Reason Code ........................................69
|
||
5.3.2. Invalidity Date ....................................70
|
||
5.3.3. Certificate Issuer .................................70
|
||
6. Certification Path Validation ..................................71
|
||
6.1. Basic Path Validation .....................................72
|
||
6.1.1. Inputs .............................................75
|
||
6.1.2. Initialization .....................................77
|
||
6.1.3. Basic Certificate Processing .......................80
|
||
6.1.4. Preparation for Certificate i+1 ....................84
|
||
6.1.5. Wrap-Up Procedure ..................................87
|
||
6.1.6. Outputs ............................................89
|
||
6.2. Using the Path Validation Algorithm .......................89
|
||
6.3. CRL Validation ............................................90
|
||
6.3.1. Revocation Inputs ..................................91
|
||
6.3.2. Initialization and Revocation State Variables ......91
|
||
6.3.3. CRL Processing .....................................92
|
||
7. Processing Rules for Internationalized Names ...................95
|
||
7.1. Internationalized Names in Distinguished Names ............96
|
||
7.2. Internationalized Domain Names in GeneralName .............97
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 3]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
7.3. Internationalized Domain Names in Distinguished Names .....98
|
||
7.4. Internationalized Resource Identifiers ....................98
|
||
7.5. Internationalized Electronic Mail Addresses ..............100
|
||
8. Security Considerations .......................................100
|
||
9. IANA Considerations ...........................................105
|
||
10. Acknowledgments ..............................................105
|
||
11. References ...................................................105
|
||
11.1. Normative References ....................................105
|
||
11.2. Informative References ..................................107
|
||
Appendix A. Pseudo-ASN.1 Structures and OIDs ....................110
|
||
A.1. Explicitly Tagged Module, 1988 Syntax ....................110
|
||
A.2. Implicitly Tagged Module, 1988 Syntax ....................125
|
||
Appendix B. ASN.1 Notes ..........................................133
|
||
Appendix C. Examples .............................................136
|
||
C.1. RSA Self-Signed Certificate ..............................137
|
||
C.2. End Entity Certificate Using RSA .........................140
|
||
C.3. End Entity Certificate Using DSA .........................143
|
||
C.4. Certificate Revocation List ..............................147
|
||
|
||
1. Introduction
|
||
|
||
This specification is one part of a family of standards for the X.509
|
||
Public Key Infrastructure (PKI) for the Internet.
|
||
|
||
This specification profiles the format and semantics of certificates
|
||
and certificate revocation lists (CRLs) for the Internet PKI.
|
||
Procedures are described for processing of certification paths in the
|
||
Internet environment. Finally, ASN.1 modules are provided in the
|
||
appendices for all data structures defined or referenced.
|
||
|
||
Section 2 describes Internet PKI requirements and the assumptions
|
||
that affect the scope of this document. Section 3 presents an
|
||
architectural model and describes its relationship to previous IETF
|
||
and ISO/IEC/ITU-T standards. In particular, this document's
|
||
relationship with the IETF PEM specifications and the ISO/IEC/ITU-T
|
||
X.509 documents is described.
|
||
|
||
Section 4 profiles the X.509 version 3 certificate, and Section 5
|
||
profiles the X.509 version 2 CRL. The profiles include the
|
||
identification of ISO/IEC/ITU-T and ANSI extensions that may be
|
||
useful in the Internet PKI. The profiles are presented in the 1988
|
||
Abstract Syntax Notation One (ASN.1) rather than the 1997 ASN.1
|
||
syntax used in the most recent ISO/IEC/ITU-T standards.
|
||
|
||
Section 6 includes certification path validation procedures. These
|
||
procedures are based upon the ISO/IEC/ITU-T definition.
|
||
Implementations are REQUIRED to derive the same results but are not
|
||
required to use the specified procedures.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 4]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Procedures for identification and encoding of public key materials
|
||
and digital signatures are defined in [RFC3279], [RFC4055], and
|
||
[RFC4491]. Implementations of this specification are not required to
|
||
use any particular cryptographic algorithms. However, conforming
|
||
implementations that use the algorithms identified in [RFC3279],
|
||
[RFC4055], and [RFC4491] MUST identify and encode the public key
|
||
materials and digital signatures as described in those
|
||
specifications.
|
||
|
||
Finally, three appendices are provided to aid implementers. Appendix
|
||
A contains all ASN.1 structures defined or referenced within this
|
||
specification. As above, the material is presented in the 1988
|
||
ASN.1. Appendix B contains notes on less familiar features of the
|
||
ASN.1 notation used within this specification. Appendix C contains
|
||
examples of conforming certificates and a conforming CRL.
|
||
|
||
This specification obsoletes [RFC3280]. Differences from RFC 3280
|
||
are summarized below:
|
||
|
||
* Enhanced support for internationalized names is specified in
|
||
Section 7, with rules for encoding and comparing
|
||
Internationalized Domain Names, Internationalized Resource
|
||
Identifiers (IRIs), and distinguished names. These rules are
|
||
aligned with comparison rules established in current RFCs,
|
||
including [RFC3490], [RFC3987], and [RFC4518].
|
||
|
||
* Sections 4.1.2.4 and 4.1.2.6 incorporate the conditions for
|
||
continued use of legacy text encoding schemes that were
|
||
specified in [RFC4630]. Where in use by an established PKI,
|
||
transition to UTF8String could cause denial of service based on
|
||
name chaining failures or incorrect processing of name
|
||
constraints.
|
||
|
||
* Section 4.2.1.4 in RFC 3280, which specified the
|
||
privateKeyUsagePeriod certificate extension but deprecated its
|
||
use, was removed. Use of this ISO standard extension is neither
|
||
deprecated nor recommended for use in the Internet PKI.
|
||
|
||
* Section 4.2.1.5 recommends marking the policy mappings extension
|
||
as critical. RFC 3280 required that the policy mappings
|
||
extension be marked as non-critical.
|
||
|
||
* Section 4.2.1.11 requires marking the policy constraints
|
||
extension as critical. RFC 3280 permitted the policy
|
||
constraints extension to be marked as critical or non-critical.
|
||
|
||
* The Authority Information Access (AIA) CRL extension, as
|
||
specified in [RFC4325], was added as Section 5.2.7.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 5]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
* Sections 5.2 and 5.3 clarify the rules for handling unrecognized
|
||
CRL extensions and CRL entry extensions, respectively.
|
||
|
||
* Section 5.3.2 in RFC 3280, which specified the
|
||
holdInstructionCode CRL entry extension, was removed.
|
||
|
||
* The path validation algorithm specified in Section 6 no longer
|
||
tracks the criticality of the certificate policies extensions in
|
||
a chain of certificates. In RFC 3280, this information was
|
||
returned to a relying party.
|
||
|
||
* The Security Considerations section addresses the risk of
|
||
circular dependencies arising from the use of https or similar
|
||
schemes in the CRL distribution points, authority information
|
||
access, or subject information access extensions.
|
||
|
||
* The Security Considerations section addresses risks associated
|
||
with name ambiguity.
|
||
|
||
* The Security Considerations section references RFC 4210 for
|
||
procedures to signal changes in CA operations.
|
||
|
||
The ASN.1 modules in Appendix A are unchanged from RFC 3280, except
|
||
that ub-emailaddress-length was changed from 128 to 255 in order to
|
||
align with PKCS #9 [RFC2985].
|
||
|
||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
||
document are to be interpreted as described in [RFC2119].
|
||
|
||
2. Requirements and Assumptions
|
||
|
||
The goal of this specification is to develop a profile to facilitate
|
||
the use of X.509 certificates within Internet applications for those
|
||
communities wishing to make use of X.509 technology. Such
|
||
applications may include WWW, electronic mail, user authentication,
|
||
and IPsec. In order to relieve some of the obstacles to using X.509
|
||
certificates, this document defines a profile to promote the
|
||
development of certificate management systems, development of
|
||
application tools, and interoperability determined by policy.
|
||
|
||
Some communities will need to supplement, or possibly replace, this
|
||
profile in order to meet the requirements of specialized application
|
||
domains or environments with additional authorization, assurance, or
|
||
operational requirements. However, for basic applications, common
|
||
representations of frequently used attributes are defined so that
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 6]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
application developers can obtain necessary information without
|
||
regard to the issuer of a particular certificate or certificate
|
||
revocation list (CRL).
|
||
|
||
A certificate user should review the certificate policy generated by
|
||
the certification authority (CA) before relying on the authentication
|
||
or non-repudiation services associated with the public key in a
|
||
particular certificate. To this end, this standard does not
|
||
prescribe legally binding rules or duties.
|
||
|
||
As supplemental authorization and attribute management tools emerge,
|
||
such as attribute certificates, it may be appropriate to limit the
|
||
authenticated attributes that are included in a certificate. These
|
||
other management tools may provide more appropriate methods of
|
||
conveying many authenticated attributes.
|
||
|
||
2.1. Communication and Topology
|
||
|
||
The users of certificates will operate in a wide range of
|
||
environments with respect to their communication topology, especially
|
||
users of secure electronic mail. This profile supports users without
|
||
high bandwidth, real-time IP connectivity, or high connection
|
||
availability. In addition, the profile allows for the presence of
|
||
firewall or other filtered communication.
|
||
|
||
This profile does not assume the deployment of an X.500 directory
|
||
system [X.500] or a Lightweight Directory Access Protocol (LDAP)
|
||
directory system [RFC4510]. The profile does not prohibit the use of
|
||
an X.500 directory or an LDAP directory; however, any means of
|
||
distributing certificates and certificate revocation lists (CRLs) may
|
||
be used.
|
||
|
||
2.2. Acceptability Criteria
|
||
|
||
The goal of the Internet Public Key Infrastructure (PKI) is to meet
|
||
the needs of deterministic, automated identification, authentication,
|
||
access control, and authorization functions. Support for these
|
||
services determines the attributes contained in the certificate as
|
||
well as the ancillary control information in the certificate such as
|
||
policy data and certification path constraints.
|
||
|
||
2.3. User Expectations
|
||
|
||
Users of the Internet PKI are people and processes who use client
|
||
software and are the subjects named in certificates. These uses
|
||
include readers and writers of electronic mail, the clients for WWW
|
||
browsers, WWW servers, and the key manager for IPsec within a router.
|
||
This profile recognizes the limitations of the platforms these users
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 7]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
employ and the limitations in sophistication and attentiveness of the
|
||
users themselves. This manifests itself in minimal user
|
||
configuration responsibility (e.g., trusted CA keys, rules), explicit
|
||
platform usage constraints within the certificate, certification path
|
||
constraints that shield the user from many malicious actions, and
|
||
applications that sensibly automate validation functions.
|
||
|
||
2.4. Administrator Expectations
|
||
|
||
As with user expectations, the Internet PKI profile is structured to
|
||
support the individuals who generally operate CAs. Providing
|
||
administrators with unbounded choices increases the chances that a
|
||
subtle CA administrator mistake will result in broad compromise.
|
||
Also, unbounded choices greatly complicate the software that process
|
||
and validate the certificates created by the CA.
|
||
|
||
3. Overview of Approach
|
||
|
||
Following is a simplified view of the architectural model assumed by
|
||
the Public-Key Infrastructure using X.509 (PKIX) specifications.
|
||
|
||
The components in this model are:
|
||
|
||
end entity: user of PKI certificates and/or end user system that is
|
||
the subject of a certificate;
|
||
|
||
CA: certification authority;
|
||
|
||
RA: registration authority, i.e., an optional system to which
|
||
a CA delegates certain management functions;
|
||
|
||
CRL issuer: a system that generates and signs CRLs; and
|
||
|
||
repository: a system or collection of distributed systems that stores
|
||
certificates and CRLs and serves as a means of
|
||
distributing these certificates and CRLs to end entities.
|
||
|
||
CAs are responsible for indicating the revocation status of the
|
||
certificates that they issue. Revocation status information may be
|
||
provided using the Online Certificate Status Protocol (OCSP)
|
||
[RFC2560], certificate revocation lists (CRLs), or some other
|
||
mechanism. In general, when revocation status information is
|
||
provided using CRLs, the CA is also the CRL issuer. However, a CA
|
||
may delegate the responsibility for issuing CRLs to a different
|
||
entity.
|
||
|
||
Note that an Attribute Authority (AA) might also choose to delegate
|
||
the publication of CRLs to a CRL issuer.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 8]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
+---+
|
||
| C | +------------+
|
||
| e | <-------------------->| End entity |
|
||
| r | Operational +------------+
|
||
| t | transactions ^
|
||
| i | and management | Management
|
||
| f | transactions | transactions PKI
|
||
| i | | users
|
||
| c | v
|
||
| a | ======================= +--+------------+ ==============
|
||
| t | ^ ^
|
||
| e | | | PKI
|
||
| | v | management
|
||
| & | +------+ | entities
|
||
| | <---------------------| RA |<----+ |
|
||
| C | Publish certificate +------+ | |
|
||
| R | | |
|
||
| L | | |
|
||
| | v v
|
||
| R | +------------+
|
||
| e | <------------------------------| CA |
|
||
| p | Publish certificate +------------+
|
||
| o | Publish CRL ^ ^
|
||
| s | | | Management
|
||
| i | +------------+ | | transactions
|
||
| t | <--------------| CRL Issuer |<----+ |
|
||
| o | Publish CRL +------------+ v
|
||
| r | +------+
|
||
| y | | CA |
|
||
+---+ +------+
|
||
|
||
Figure 1. PKI Entities
|
||
|
||
3.1. X.509 Version 3 Certificate
|
||
|
||
Users of a public key require confidence that the associated private
|
||
key is owned by the correct remote subject (person or system) with
|
||
which an encryption or digital signature mechanism will be used.
|
||
This confidence is obtained through the use of public key
|
||
certificates, which are data structures that bind public key values
|
||
to subjects. The binding is asserted by having a trusted CA
|
||
digitally sign each certificate. The CA may base this assertion upon
|
||
technical means (a.k.a., proof of possession through a challenge-
|
||
response protocol), presentation of the private key, or on an
|
||
assertion by the subject. A certificate has a limited valid
|
||
lifetime, which is indicated in its signed contents. Because a
|
||
certificate's signature and timeliness can be independently checked
|
||
by a certificate-using client, certificates can be distributed via
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 9]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
untrusted communications and server systems, and can be cached in
|
||
unsecured storage in certificate-using systems.
|
||
|
||
ITU-T X.509 (formerly CCITT X.509) or ISO/IEC 9594-8, which was first
|
||
published in 1988 as part of the X.500 directory recommendations,
|
||
defines a standard certificate format [X.509]. The certificate
|
||
format in the 1988 standard is called the version 1 (v1) format.
|
||
When X.500 was revised in 1993, two more fields were added, resulting
|
||
in the version 2 (v2) format.
|
||
|
||
The Internet Privacy Enhanced Mail (PEM) RFCs, published in 1993,
|
||
include specifications for a public key infrastructure based on X.509
|
||
v1 certificates [RFC1422]. The experience gained in attempts to
|
||
deploy RFC 1422 made it clear that the v1 and v2 certificate formats
|
||
were deficient in several respects. Most importantly, more fields
|
||
were needed to carry information that PEM design and implementation
|
||
experience had proven necessary. In response to these new
|
||
requirements, the ISO/IEC, ITU-T, and ANSI X9 developed the X.509
|
||
version 3 (v3) certificate format. The v3 format extends the v2
|
||
format by adding provision for additional extension fields.
|
||
Particular extension field types may be specified in standards or may
|
||
be defined and registered by any organization or community. In June
|
||
1996, standardization of the basic v3 format was completed [X.509].
|
||
|
||
ISO/IEC, ITU-T, and ANSI X9 have also developed standard extensions
|
||
for use in the v3 extensions field [X.509][X9.55]. These extensions
|
||
can convey such data as additional subject identification
|
||
information, key attribute information, policy information, and
|
||
certification path constraints.
|
||
|
||
However, the ISO/IEC, ITU-T, and ANSI X9 standard extensions are very
|
||
broad in their applicability. In order to develop interoperable
|
||
implementations of X.509 v3 systems for Internet use, it is necessary
|
||
to specify a profile for use of the X.509 v3 extensions tailored for
|
||
the Internet. It is one goal of this document to specify a profile
|
||
for Internet WWW, electronic mail, and IPsec applications.
|
||
Environments with additional requirements may build on this profile
|
||
or may replace it.
|
||
|
||
3.2. Certification Paths and Trust
|
||
|
||
A user of a security service requiring knowledge of a public key
|
||
generally needs to obtain and validate a certificate containing the
|
||
required public key. If the public key user does not already hold an
|
||
assured copy of the public key of the CA that signed the certificate,
|
||
the CA's name, and related information (such as the validity period
|
||
or name constraints), then it might need an additional certificate to
|
||
obtain that public key. In general, a chain of multiple certificates
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 10]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
may be needed, comprising a certificate of the public key owner (the
|
||
end entity) signed by one CA, and zero or more additional
|
||
certificates of CAs signed by other CAs. Such chains, called
|
||
certification paths, are required because a public key user is only
|
||
initialized with a limited number of assured CA public keys.
|
||
|
||
There are different ways in which CAs might be configured in order
|
||
for public key users to be able to find certification paths. For
|
||
PEM, RFC 1422 defined a rigid hierarchical structure of CAs. There
|
||
are three types of PEM certification authority:
|
||
|
||
(a) Internet Policy Registration Authority (IPRA): This
|
||
authority, operated under the auspices of the Internet
|
||
Society, acts as the root of the PEM certification hierarchy
|
||
at level 1. It issues certificates only for the next level
|
||
of authorities, PCAs. All certification paths start with the
|
||
IPRA.
|
||
|
||
(b) Policy Certification Authorities (PCAs): PCAs are at level 2
|
||
of the hierarchy, each PCA being certified by the IPRA. A
|
||
PCA shall establish and publish a statement of its policy
|
||
with respect to certifying users or subordinate certification
|
||
authorities. Distinct PCAs aim to satisfy different user
|
||
needs. For example, one PCA (an organizational PCA) might
|
||
support the general electronic mail needs of commercial
|
||
organizations, and another PCA (a high-assurance PCA) might
|
||
have a more stringent policy designed for satisfying legally
|
||
binding digital signature requirements.
|
||
|
||
(c) Certification Authorities (CAs): CAs are at level 3 of the
|
||
hierarchy and can also be at lower levels. Those at level 3
|
||
are certified by PCAs. CAs represent, for example,
|
||
particular organizations, particular organizational units
|
||
(e.g., departments, groups, sections), or particular
|
||
geographical areas.
|
||
|
||
RFC 1422 furthermore has a name subordination rule, which requires
|
||
that a CA can only issue certificates for entities whose names are
|
||
subordinate (in the X.500 naming tree) to the name of the CA itself.
|
||
The trust associated with a PEM certification path is implied by the
|
||
PCA name. The name subordination rule ensures that CAs below the PCA
|
||
are sensibly constrained as to the set of subordinate entities they
|
||
can certify (e.g., a CA for an organization can only certify entities
|
||
in that organization's name tree). Certificate user systems are able
|
||
to mechanically check that the name subordination rule has been
|
||
followed.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 11]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
RFC 1422 uses the X.509 v1 certificate format. The limitations of
|
||
X.509 v1 required imposition of several structural restrictions to
|
||
clearly associate policy information or restrict the utility of
|
||
certificates. These restrictions included:
|
||
|
||
(a) a pure top-down hierarchy, with all certification paths
|
||
starting from IPRA;
|
||
|
||
(b) a naming subordination rule restricting the names of a CA's
|
||
subjects; and
|
||
|
||
(c) use of the PCA concept, which requires knowledge of
|
||
individual PCAs to be built into certificate chain
|
||
verification logic. Knowledge of individual PCAs was
|
||
required to determine if a chain could be accepted.
|
||
|
||
With X.509 v3, most of the requirements addressed by RFC 1422 can be
|
||
addressed using certificate extensions, without a need to restrict
|
||
the CA structures used. In particular, the certificate extensions
|
||
relating to certificate policies obviate the need for PCAs and the
|
||
constraint extensions obviate the need for the name subordination
|
||
rule. As a result, this document supports a more flexible
|
||
architecture, including:
|
||
|
||
(a) Certification paths start with a public key of a CA in a
|
||
user's own domain, or with the public key of the top of a
|
||
hierarchy. Starting with the public key of a CA in a user's
|
||
own domain has certain advantages. In some environments, the
|
||
local domain is the most trusted.
|
||
|
||
(b) Name constraints may be imposed through explicit inclusion of
|
||
a name constraints extension in a certificate, but are not
|
||
required.
|
||
|
||
(c) Policy extensions and policy mappings replace the PCA
|
||
concept, which permits a greater degree of automation. The
|
||
application can determine if the certification path is
|
||
acceptable based on the contents of the certificates instead
|
||
of a priori knowledge of PCAs. This permits automation of
|
||
certification path processing.
|
||
|
||
X.509 v3 also includes an extension that identifies the subject of a
|
||
certificate as being either a CA or an end entity, reducing the
|
||
reliance on out-of-band information demanded in PEM.
|
||
|
||
This specification covers two classes of certificates: CA
|
||
certificates and end entity certificates. CA certificates may be
|
||
further divided into three classes: cross-certificates, self-issued
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 12]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
certificates, and self-signed certificates. Cross-certificates are
|
||
CA certificates in which the issuer and subject are different
|
||
entities. Cross-certificates describe a trust relationship between
|
||
the two CAs. Self-issued certificates are CA certificates in which
|
||
the issuer and subject are the same entity. Self-issued certificates
|
||
are generated to support changes in policy or operations. Self-
|
||
signed certificates are self-issued certificates where the digital
|
||
signature may be verified by the public key bound into the
|
||
certificate. Self-signed certificates are used to convey a public
|
||
key for use to begin certification paths. End entity certificates
|
||
are issued to subjects that are not authorized to issue certificates.
|
||
|
||
3.3. Revocation
|
||
|
||
When a certificate is issued, it is expected to be in use for its
|
||
entire validity period. However, various circumstances may cause a
|
||
certificate to become invalid prior to the expiration of the validity
|
||
period. Such circumstances include change of name, change of
|
||
association between subject and CA (e.g., an employee terminates
|
||
employment with an organization), and compromise or suspected
|
||
compromise of the corresponding private key. Under such
|
||
circumstances, the CA needs to revoke the certificate.
|
||
|
||
X.509 defines one method of certificate revocation. This method
|
||
involves each CA periodically issuing a signed data structure called
|
||
a certificate revocation list (CRL). A CRL is a time-stamped list
|
||
identifying revoked certificates that is signed by a CA or CRL issuer
|
||
and made freely available in a public repository. Each revoked
|
||
certificate is identified in a CRL by its certificate serial number.
|
||
When a certificate-using system uses a certificate (e.g., for
|
||
verifying a remote user's digital signature), that system not only
|
||
checks the certificate signature and validity but also acquires a
|
||
suitably recent CRL and checks that the certificate serial number is
|
||
not on that CRL. The meaning of "suitably recent" may vary with
|
||
local policy, but it usually means the most recently issued CRL. A
|
||
new CRL is issued on a regular periodic basis (e.g., hourly, daily,
|
||
or weekly). An entry is added to the CRL as part of the next update
|
||
following notification of revocation. An entry MUST NOT be removed
|
||
from the CRL until it appears on one regularly scheduled CRL issued
|
||
beyond the revoked certificate's validity period.
|
||
|
||
An advantage of this revocation method is that CRLs may be
|
||
distributed by exactly the same means as certificates themselves,
|
||
namely, via untrusted servers and untrusted communications.
|
||
|
||
One limitation of the CRL revocation method, using untrusted
|
||
communications and servers, is that the time granularity of
|
||
revocation is limited to the CRL issue period. For example, if a
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 13]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
revocation is reported now, that revocation will not be reliably
|
||
notified to certificate-using systems until all currently issued CRLs
|
||
are scheduled to be updated -- this may be up to one hour, one day,
|
||
or one week depending on the frequency that CRLs are issued.
|
||
|
||
As with the X.509 v3 certificate format, in order to facilitate
|
||
interoperable implementations from multiple vendors, the X.509 v2 CRL
|
||
format needs to be profiled for Internet use. It is one goal of this
|
||
document to specify that profile. However, this profile does not
|
||
require the issuance of CRLs. Message formats and protocols
|
||
supporting on-line revocation notification are defined in other PKIX
|
||
specifications. On-line methods of revocation notification may be
|
||
applicable in some environments as an alternative to the X.509 CRL.
|
||
On-line revocation checking may significantly reduce the latency
|
||
between a revocation report and the distribution of the information
|
||
to relying parties. Once the CA accepts a revocation report as
|
||
authentic and valid, any query to the on-line service will correctly
|
||
reflect the certificate validation impacts of the revocation.
|
||
However, these methods impose new security requirements: the
|
||
certificate validator needs to trust the on-line validation service
|
||
while the repository does not need to be trusted.
|
||
|
||
3.4. Operational Protocols
|
||
|
||
Operational protocols are required to deliver certificates and CRLs
|
||
(or status information) to certificate-using client systems.
|
||
Provisions are needed for a variety of different means of certificate
|
||
and CRL delivery, including distribution procedures based on LDAP,
|
||
HTTP, FTP, and X.500. Operational protocols supporting these
|
||
functions are defined in other PKIX specifications. These
|
||
specifications may include definitions of message formats and
|
||
procedures for supporting all of the above operational environments,
|
||
including definitions of or references to appropriate MIME content
|
||
types.
|
||
|
||
3.5. Management Protocols
|
||
|
||
Management protocols are required to support on-line interactions
|
||
between PKI user and management entities. For example, a management
|
||
protocol might be used between a CA and a client system with which a
|
||
key pair is associated, or between two CAs that cross-certify each
|
||
other. The set of functions that potentially need to be supported by
|
||
management protocols include:
|
||
|
||
(a) registration: This is the process whereby a user first makes
|
||
itself known to a CA (directly, or through an RA), prior to
|
||
that CA issuing a certificate or certificates for that user.
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 14]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(b) initialization: Before a client system can operate securely,
|
||
it is necessary to install key materials that have the
|
||
appropriate relationship with keys stored elsewhere in the
|
||
infrastructure. For example, the client needs to be securely
|
||
initialized with the public key and other assured information
|
||
of the trusted CA(s), to be used in validating certificate
|
||
paths.
|
||
|
||
Furthermore, a client typically needs to be initialized with
|
||
its own key pair(s).
|
||
|
||
(c) certification: This is the process in which a CA issues a
|
||
certificate for a user's public key, and returns that
|
||
certificate to the user's client system and/or posts that
|
||
certificate in a repository.
|
||
|
||
(d) key pair recovery: As an option, user client key materials
|
||
(e.g., a user's private key used for encryption purposes) may
|
||
be backed up by a CA or a key backup system. If a user needs
|
||
to recover these backed-up key materials (e.g., as a result
|
||
of a forgotten password or a lost key chain file), an on-line
|
||
protocol exchange may be needed to support such recovery.
|
||
|
||
(e) key pair update: All key pairs need to be updated regularly,
|
||
i.e., replaced with a new key pair, and new certificates
|
||
issued.
|
||
|
||
(f) revocation request: An authorized person advises a CA of an
|
||
abnormal situation requiring certificate revocation.
|
||
|
||
(g) cross-certification: Two CAs exchange information used in
|
||
establishing a cross-certificate. A cross-certificate is a
|
||
certificate issued by one CA to another CA that contains a CA
|
||
signature key used for issuing certificates.
|
||
|
||
Note that on-line protocols are not the only way of implementing the
|
||
above functions. For all functions, there are off-line methods of
|
||
achieving the same result, and this specification does not mandate
|
||
use of on-line protocols. For example, when hardware tokens are
|
||
used, many of the functions may be achieved as part of the physical
|
||
token delivery. Furthermore, some of the above functions may be
|
||
combined into one protocol exchange. In particular, two or more of
|
||
the registration, initialization, and certification functions can be
|
||
combined into one protocol exchange.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 15]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
The PKIX series of specifications defines a set of standard message
|
||
formats supporting the above functions. The protocols for conveying
|
||
these messages in different environments (e.g., email, file transfer,
|
||
and WWW) are described in those specifications.
|
||
|
||
4. Certificate and Certificate Extensions Profile
|
||
|
||
This section presents a profile for public key certificates that will
|
||
foster interoperability and a reusable PKI. This section is based
|
||
upon the X.509 v3 certificate format and the standard certificate
|
||
extensions defined in [X.509]. The ISO/IEC and ITU-T documents use
|
||
the 1997 version of ASN.1; while this document uses the 1988 ASN.1
|
||
syntax, the encoded certificate and standard extensions are
|
||
equivalent. This section also defines private extensions required to
|
||
support a PKI for the Internet community.
|
||
|
||
Certificates may be used in a wide range of applications and
|
||
environments covering a broad spectrum of interoperability goals and
|
||
a broader spectrum of operational and assurance requirements. The
|
||
goal of this document is to establish a common baseline for generic
|
||
applications requiring broad interoperability and limited special
|
||
purpose requirements. In particular, the emphasis will be on
|
||
supporting the use of X.509 v3 certificates for informal Internet
|
||
electronic mail, IPsec, and WWW applications.
|
||
|
||
4.1. Basic Certificate Fields
|
||
|
||
The X.509 v3 certificate basic syntax is as follows. For signature
|
||
calculation, the data that is to be signed is encoded using the ASN.1
|
||
distinguished encoding rules (DER) [X.690]. ASN.1 DER encoding is a
|
||
tag, length, value encoding system for each element.
|
||
|
||
Certificate ::= SEQUENCE {
|
||
tbsCertificate TBSCertificate,
|
||
signatureAlgorithm AlgorithmIdentifier,
|
||
signatureValue BIT STRING }
|
||
|
||
TBSCertificate ::= SEQUENCE {
|
||
version [0] EXPLICIT Version DEFAULT v1,
|
||
serialNumber CertificateSerialNumber,
|
||
signature AlgorithmIdentifier,
|
||
issuer Name,
|
||
validity Validity,
|
||
subject Name,
|
||
subjectPublicKeyInfo SubjectPublicKeyInfo,
|
||
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
|
||
-- If present, version MUST be v2 or v3
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 16]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
|
||
-- If present, version MUST be v2 or v3
|
||
extensions [3] EXPLICIT Extensions OPTIONAL
|
||
-- If present, version MUST be v3
|
||
}
|
||
|
||
Version ::= INTEGER { v1(0), v2(1), v3(2) }
|
||
|
||
CertificateSerialNumber ::= INTEGER
|
||
|
||
Validity ::= SEQUENCE {
|
||
notBefore Time,
|
||
notAfter Time }
|
||
|
||
Time ::= CHOICE {
|
||
utcTime UTCTime,
|
||
generalTime GeneralizedTime }
|
||
|
||
UniqueIdentifier ::= BIT STRING
|
||
|
||
SubjectPublicKeyInfo ::= SEQUENCE {
|
||
algorithm AlgorithmIdentifier,
|
||
subjectPublicKey BIT STRING }
|
||
|
||
Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
|
||
|
||
Extension ::= SEQUENCE {
|
||
extnID OBJECT IDENTIFIER,
|
||
critical BOOLEAN DEFAULT FALSE,
|
||
extnValue OCTET STRING
|
||
-- contains the DER encoding of an ASN.1 value
|
||
-- corresponding to the extension type identified
|
||
-- by extnID
|
||
}
|
||
|
||
The following items describe the X.509 v3 certificate for use in the
|
||
Internet.
|
||
|
||
4.1.1. Certificate Fields
|
||
|
||
The Certificate is a SEQUENCE of three required fields. The fields
|
||
are described in detail in the following subsections.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 17]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
4.1.1.1. tbsCertificate
|
||
|
||
The field contains the names of the subject and issuer, a public key
|
||
associated with the subject, a validity period, and other associated
|
||
information. The fields are described in detail in Section 4.1.2;
|
||
the tbsCertificate usually includes extensions, which are described
|
||
in Section 4.2.
|
||
|
||
4.1.1.2. signatureAlgorithm
|
||
|
||
The signatureAlgorithm field contains the identifier for the
|
||
cryptographic algorithm used by the CA to sign this certificate.
|
||
[RFC3279], [RFC4055], and [RFC4491] list supported signature
|
||
algorithms, but other signature algorithms MAY also be supported.
|
||
|
||
An algorithm identifier is defined by the following ASN.1 structure:
|
||
|
||
AlgorithmIdentifier ::= SEQUENCE {
|
||
algorithm OBJECT IDENTIFIER,
|
||
parameters ANY DEFINED BY algorithm OPTIONAL }
|
||
|
||
The algorithm identifier is used to identify a cryptographic
|
||
algorithm. The OBJECT IDENTIFIER component identifies the algorithm
|
||
(such as DSA with SHA-1). The contents of the optional parameters
|
||
field will vary according to the algorithm identified.
|
||
|
||
This field MUST contain the same algorithm identifier as the
|
||
signature field in the sequence tbsCertificate (Section 4.1.2.3).
|
||
|
||
4.1.1.3. signatureValue
|
||
|
||
The signatureValue field contains a digital signature computed upon
|
||
the ASN.1 DER encoded tbsCertificate. The ASN.1 DER encoded
|
||
tbsCertificate is used as the input to the signature function. This
|
||
signature value is encoded as a BIT STRING and included in the
|
||
signature field. The details of this process are specified for each
|
||
of the algorithms listed in [RFC3279], [RFC4055], and [RFC4491].
|
||
|
||
By generating this signature, a CA certifies the validity of the
|
||
information in the tbsCertificate field. In particular, the CA
|
||
certifies the binding between the public key material and the subject
|
||
of the certificate.
|
||
|
||
4.1.2. TBSCertificate
|
||
|
||
The sequence TBSCertificate contains information associated with the
|
||
subject of the certificate and the CA that issued it. Every
|
||
TBSCertificate contains the names of the subject and issuer, a public
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 18]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
key associated with the subject, a validity period, a version number,
|
||
and a serial number; some MAY contain optional unique identifier
|
||
fields. The remainder of this section describes the syntax and
|
||
semantics of these fields. A TBSCertificate usually includes
|
||
extensions. Extensions for the Internet PKI are described in Section
|
||
4.2.
|
||
|
||
4.1.2.1. Version
|
||
|
||
This field describes the version of the encoded certificate. When
|
||
extensions are used, as expected in this profile, version MUST be 3
|
||
(value is 2). If no extensions are present, but a UniqueIdentifier
|
||
is present, the version SHOULD be 2 (value is 1); however, the
|
||
version MAY be 3. If only basic fields are present, the version
|
||
SHOULD be 1 (the value is omitted from the certificate as the default
|
||
value); however, the version MAY be 2 or 3.
|
||
|
||
Implementations SHOULD be prepared to accept any version certificate.
|
||
At a minimum, conforming implementations MUST recognize version 3
|
||
certificates.
|
||
|
||
Generation of version 2 certificates is not expected by
|
||
implementations based on this profile.
|
||
|
||
4.1.2.2. Serial Number
|
||
|
||
The serial number MUST be a positive integer assigned by the CA to
|
||
each certificate. It MUST be unique for each certificate issued by a
|
||
given CA (i.e., the issuer name and serial number identify a unique
|
||
certificate). CAs MUST force the serialNumber to be a non-negative
|
||
integer.
|
||
|
||
Given the uniqueness requirements above, serial numbers can be
|
||
expected to contain long integers. Certificate users MUST be able to
|
||
handle serialNumber values up to 20 octets. Conforming CAs MUST NOT
|
||
use serialNumber values longer than 20 octets.
|
||
|
||
Note: Non-conforming CAs may issue certificates with serial numbers
|
||
that are negative or zero. Certificate users SHOULD be prepared to
|
||
gracefully handle such certificates.
|
||
|
||
4.1.2.3. Signature
|
||
|
||
This field contains the algorithm identifier for the algorithm used
|
||
by the CA to sign the certificate.
|
||
|
||
This field MUST contain the same algorithm identifier as the
|
||
signatureAlgorithm field in the sequence Certificate (Section
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 19]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
4.1.1.2). The contents of the optional parameters field will vary
|
||
according to the algorithm identified. [RFC3279], [RFC4055], and
|
||
[RFC4491] list supported signature algorithms, but other signature
|
||
algorithms MAY also be supported.
|
||
|
||
4.1.2.4. Issuer
|
||
|
||
The issuer field identifies the entity that has signed and issued the
|
||
certificate. The issuer field MUST contain a non-empty distinguished
|
||
name (DN). The issuer field is defined as the X.501 type Name
|
||
[X.501]. Name is defined by the following ASN.1 structures:
|
||
|
||
Name ::= CHOICE { -- only one possibility for now --
|
||
rdnSequence RDNSequence }
|
||
|
||
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
|
||
|
||
RelativeDistinguishedName ::=
|
||
SET SIZE (1..MAX) OF AttributeTypeAndValue
|
||
|
||
AttributeTypeAndValue ::= SEQUENCE {
|
||
type AttributeType,
|
||
value AttributeValue }
|
||
|
||
AttributeType ::= OBJECT IDENTIFIER
|
||
|
||
AttributeValue ::= ANY -- DEFINED BY AttributeType
|
||
|
||
DirectoryString ::= CHOICE {
|
||
teletexString TeletexString (SIZE (1..MAX)),
|
||
printableString PrintableString (SIZE (1..MAX)),
|
||
universalString UniversalString (SIZE (1..MAX)),
|
||
utf8String UTF8String (SIZE (1..MAX)),
|
||
bmpString BMPString (SIZE (1..MAX)) }
|
||
|
||
The Name describes a hierarchical name composed of attributes, such
|
||
as country name, and corresponding values, such as US. The type of
|
||
the component AttributeValue is determined by the AttributeType; in
|
||
general it will be a DirectoryString.
|
||
|
||
The DirectoryString type is defined as a choice of PrintableString,
|
||
TeletexString, BMPString, UTF8String, and UniversalString. CAs
|
||
conforming to this profile MUST use either the PrintableString or
|
||
UTF8String encoding of DirectoryString, with two exceptions. When
|
||
CAs have previously issued certificates with issuer fields with
|
||
attributes encoded using TeletexString, BMPString, or
|
||
UniversalString, then the CA MAY continue to use these encodings of
|
||
the DirectoryString to preserve backward compatibility. Also, new
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 20]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
CAs that are added to a domain where existing CAs issue certificates
|
||
with issuer fields with attributes encoded using TeletexString,
|
||
BMPString, or UniversalString MAY encode attributes that they share
|
||
with the existing CAs using the same encodings as the existing CAs
|
||
use.
|
||
|
||
As noted above, distinguished names are composed of attributes. This
|
||
specification does not restrict the set of attribute types that may
|
||
appear in names. However, conforming implementations MUST be
|
||
prepared to receive certificates with issuer names containing the set
|
||
of attribute types defined below. This specification RECOMMENDS
|
||
support for additional attribute types.
|
||
|
||
Standard sets of attributes have been defined in the X.500 series of
|
||
specifications [X.520]. Implementations of this specification MUST
|
||
be prepared to receive the following standard attribute types in
|
||
issuer and subject (Section 4.1.2.6) names:
|
||
|
||
* country,
|
||
* organization,
|
||
* organizational unit,
|
||
* distinguished name qualifier,
|
||
* state or province name,
|
||
* common name (e.g., "Susan Housley"), and
|
||
* serial number.
|
||
|
||
In addition, implementations of this specification SHOULD be prepared
|
||
to receive the following standard attribute types in issuer and
|
||
subject names:
|
||
|
||
* locality,
|
||
* title,
|
||
* surname,
|
||
* given name,
|
||
* initials,
|
||
* pseudonym, and
|
||
* generation qualifier (e.g., "Jr.", "3rd", or "IV").
|
||
|
||
The syntax and associated object identifiers (OIDs) for these
|
||
attribute types are provided in the ASN.1 modules in Appendix A.
|
||
|
||
In addition, implementations of this specification MUST be prepared
|
||
to receive the domainComponent attribute, as defined in [RFC4519].
|
||
The Domain Name System (DNS) provides a hierarchical resource
|
||
labeling system. This attribute provides a convenient mechanism for
|
||
organizations that wish to use DNs that parallel their DNS names.
|
||
This is not a replacement for the dNSName component of the
|
||
alternative name extensions. Implementations are not required to
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 21]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
convert such names into DNS names. The syntax and associated OID for
|
||
this attribute type are provided in the ASN.1 modules in Appendix A.
|
||
Rules for encoding internationalized domain names for use with the
|
||
domainComponent attribute type are specified in Section 7.3.
|
||
|
||
Certificate users MUST be prepared to process the issuer
|
||
distinguished name and subject distinguished name (Section 4.1.2.6)
|
||
fields to perform name chaining for certification path validation
|
||
(Section 6). Name chaining is performed by matching the issuer
|
||
distinguished name in one certificate with the subject name in a CA
|
||
certificate. Rules for comparing distinguished names are specified
|
||
in Section 7.1. If the names in the issuer and subject field in a
|
||
certificate match according to the rules specified in Section 7.1,
|
||
then the certificate is self-issued.
|
||
|
||
4.1.2.5. Validity
|
||
|
||
The certificate validity period is the time interval during which the
|
||
CA warrants that it will maintain information about the status of the
|
||
certificate. The field is represented as a SEQUENCE of two dates:
|
||
the date on which the certificate validity period begins (notBefore)
|
||
and the date on which the certificate validity period ends
|
||
(notAfter). Both notBefore and notAfter may be encoded as UTCTime or
|
||
GeneralizedTime.
|
||
|
||
CAs conforming to this profile MUST always encode certificate
|
||
validity dates through the year 2049 as UTCTime; certificate validity
|
||
dates in 2050 or later MUST be encoded as GeneralizedTime.
|
||
Conforming applications MUST be able to process validity dates that
|
||
are encoded in either UTCTime or GeneralizedTime.
|
||
|
||
The validity period for a certificate is the period of time from
|
||
notBefore through notAfter, inclusive.
|
||
|
||
In some situations, devices are given certificates for which no good
|
||
expiration date can be assigned. For example, a device could be
|
||
issued a certificate that binds its model and serial number to its
|
||
public key; such a certificate is intended to be used for the entire
|
||
lifetime of the device.
|
||
|
||
To indicate that a certificate has no well-defined expiration date,
|
||
the notAfter SHOULD be assigned the GeneralizedTime value of
|
||
99991231235959Z.
|
||
|
||
When the issuer will not be able to maintain status information until
|
||
the notAfter date (including when the notAfter date is
|
||
99991231235959Z), the issuer MUST ensure that no valid certification
|
||
path exists for the certificate after maintenance of status
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 22]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
information is terminated. This may be accomplished by expiration or
|
||
revocation of all CA certificates containing the public key used to
|
||
verify the signature on the certificate and discontinuing use of the
|
||
public key used to verify the signature on the certificate as a trust
|
||
anchor.
|
||
|
||
4.1.2.5.1. UTCTime
|
||
|
||
The universal time type, UTCTime, is a standard ASN.1 type intended
|
||
for representation of dates and time. UTCTime specifies the year
|
||
through the two low-order digits and time is specified to the
|
||
precision of one minute or one second. UTCTime includes either Z
|
||
(for Zulu, or Greenwich Mean Time) or a time differential.
|
||
|
||
For the purposes of this profile, UTCTime values MUST be expressed in
|
||
Greenwich Mean Time (Zulu) and MUST include seconds (i.e., times are
|
||
YYMMDDHHMMSSZ), even where the number of seconds is zero. Conforming
|
||
systems MUST interpret the year field (YY) as follows:
|
||
|
||
Where YY is greater than or equal to 50, the year SHALL be
|
||
interpreted as 19YY; and
|
||
|
||
Where YY is less than 50, the year SHALL be interpreted as 20YY.
|
||
|
||
4.1.2.5.2. GeneralizedTime
|
||
|
||
The generalized time type, GeneralizedTime, is a standard ASN.1 type
|
||
for variable precision representation of time. Optionally, the
|
||
GeneralizedTime field can include a representation of the time
|
||
differential between local and Greenwich Mean Time.
|
||
|
||
For the purposes of this profile, GeneralizedTime values MUST be
|
||
expressed in Greenwich Mean Time (Zulu) and MUST include seconds
|
||
(i.e., times are YYYYMMDDHHMMSSZ), even where the number of seconds
|
||
is zero. GeneralizedTime values MUST NOT include fractional seconds.
|
||
|
||
4.1.2.6. Subject
|
||
|
||
The subject field identifies the entity associated with the public
|
||
key stored in the subject public key field. The subject name MAY be
|
||
carried in the subject field and/or the subjectAltName extension. If
|
||
the subject is a CA (e.g., the basic constraints extension, as
|
||
discussed in Section 4.2.1.9, is present and the value of cA is
|
||
TRUE), then the subject field MUST be populated with a non-empty
|
||
distinguished name matching the contents of the issuer field (Section
|
||
4.1.2.4) in all certificates issued by the subject CA. If the
|
||
subject is a CRL issuer (e.g., the key usage extension, as discussed
|
||
in Section 4.2.1.3, is present and the value of cRLSign is TRUE),
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 23]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
then the subject field MUST be populated with a non-empty
|
||
distinguished name matching the contents of the issuer field (Section
|
||
5.1.2.3) in all CRLs issued by the subject CRL issuer. If subject
|
||
naming information is present only in the subjectAltName extension
|
||
(e.g., a key bound only to an email address or URI), then the subject
|
||
name MUST be an empty sequence and the subjectAltName extension MUST
|
||
be critical.
|
||
|
||
Where it is non-empty, the subject field MUST contain an X.500
|
||
distinguished name (DN). The DN MUST be unique for each subject
|
||
entity certified by the one CA as defined by the issuer field. A CA
|
||
MAY issue more than one certificate with the same DN to the same
|
||
subject entity.
|
||
|
||
The subject field is defined as the X.501 type Name. Implementation
|
||
requirements for this field are those defined for the issuer field
|
||
(Section 4.1.2.4). Implementations of this specification MUST be
|
||
prepared to receive subject names containing the attribute types
|
||
required for the issuer field. Implementations of this specification
|
||
SHOULD be prepared to receive subject names containing the
|
||
recommended attribute types for the issuer field. The syntax and
|
||
associated object identifiers (OIDs) for these attribute types are
|
||
provided in the ASN.1 modules in Appendix A. Implementations of this
|
||
specification MAY use the comparison rules in Section 7.1 to process
|
||
unfamiliar attribute types (i.e., for name chaining) whose attribute
|
||
values use one of the encoding options from DirectoryString. Binary
|
||
comparison should be used when unfamiliar attribute types include
|
||
attribute values with encoding options other than those found in
|
||
DirectoryString. This allows implementations to process certificates
|
||
with unfamiliar attributes in the subject name.
|
||
|
||
When encoding attribute values of type DirectoryString, conforming
|
||
CAs MUST use PrintableString or UTF8String encoding, with the
|
||
following exceptions:
|
||
|
||
(a) When the subject of the certificate is a CA, the subject
|
||
field MUST be encoded in the same way as it is encoded in the
|
||
issuer field (Section 4.1.2.4) in all certificates issued by
|
||
the subject CA. Thus, if the subject CA encodes attributes
|
||
in the issuer fields of certificates that it issues using the
|
||
TeletexString, BMPString, or UniversalString encodings, then
|
||
the subject field of certificates issued to that CA MUST use
|
||
the same encoding.
|
||
|
||
(b) When the subject of the certificate is a CRL issuer, the
|
||
subject field MUST be encoded in the same way as it is
|
||
encoded in the issuer field (Section 5.1.2.3) in all CRLs
|
||
issued by the subject CRL issuer.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 24]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(c) TeletexString, BMPString, and UniversalString are included
|
||
for backward compatibility, and SHOULD NOT be used for
|
||
certificates for new subjects. However, these types MAY be
|
||
used in certificates where the name was previously
|
||
established, including cases in which a new certificate is
|
||
being issued to an existing subject or a certificate is being
|
||
issued to a new subject where the attributes being encoded
|
||
have been previously established in certificates issued to
|
||
other subjects. Certificate users SHOULD be prepared to
|
||
receive certificates with these types.
|
||
|
||
Legacy implementations exist where an electronic mail address is
|
||
embedded in the subject distinguished name as an emailAddress
|
||
attribute [RFC2985]. The attribute value for emailAddress is of type
|
||
IA5String to permit inclusion of the character '@', which is not part
|
||
of the PrintableString character set. emailAddress attribute values
|
||
are not case-sensitive (e.g., "subscriber@example.com" is the same as
|
||
"SUBSCRIBER@EXAMPLE.COM").
|
||
|
||
Conforming implementations generating new certificates with
|
||
electronic mail addresses MUST use the rfc822Name in the subject
|
||
alternative name extension (Section 4.2.1.6) to describe such
|
||
identities. Simultaneous inclusion of the emailAddress attribute in
|
||
the subject distinguished name to support legacy implementations is
|
||
deprecated but permitted.
|
||
|
||
4.1.2.7. Subject Public Key Info
|
||
|
||
This field is used to carry the public key and identify the algorithm
|
||
with which the key is used (e.g., RSA, DSA, or Diffie-Hellman). The
|
||
algorithm is identified using the AlgorithmIdentifier structure
|
||
specified in Section 4.1.1.2. The object identifiers for the
|
||
supported algorithms and the methods for encoding the public key
|
||
materials (public key and parameters) are specified in [RFC3279],
|
||
[RFC4055], and [RFC4491].
|
||
|
||
4.1.2.8. Unique Identifiers
|
||
|
||
These fields MUST only appear if the version is 2 or 3 (Section
|
||
4.1.2.1). These fields MUST NOT appear if the version is 1. The
|
||
subject and issuer unique identifiers are present in the certificate
|
||
to handle the possibility of reuse of subject and/or issuer names
|
||
over time. This profile RECOMMENDS that names not be reused for
|
||
different entities and that Internet certificates not make use of
|
||
unique identifiers. CAs conforming to this profile MUST NOT generate
|
||
certificates with unique identifiers. Applications conforming to
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 25]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
this profile SHOULD be capable of parsing certificates that include
|
||
unique identifiers, but there are no processing requirements
|
||
associated with the unique identifiers.
|
||
|
||
4.1.2.9. Extensions
|
||
|
||
This field MUST only appear if the version is 3 (Section 4.1.2.1).
|
||
If present, this field is a SEQUENCE of one or more certificate
|
||
extensions. The format and content of certificate extensions in the
|
||
Internet PKI are defined in Section 4.2.
|
||
|
||
4.2. Certificate Extensions
|
||
|
||
The extensions defined for X.509 v3 certificates provide methods for
|
||
associating additional attributes with users or public keys and for
|
||
managing relationships between CAs. The X.509 v3 certificate format
|
||
also allows communities to define private extensions to carry
|
||
information unique to those communities. Each extension in a
|
||
certificate is designated as either critical or non-critical. A
|
||
certificate-using system MUST reject the certificate if it encounters
|
||
a critical extension it does not recognize or a critical extension
|
||
that contains information that it cannot process. A non-critical
|
||
extension MAY be ignored if it is not recognized, but MUST be
|
||
processed if it is recognized. The following sections present
|
||
recommended extensions used within Internet certificates and standard
|
||
locations for information. Communities may elect to use additional
|
||
extensions; however, caution ought to be exercised in adopting any
|
||
critical extensions in certificates that might prevent use in a
|
||
general context.
|
||
|
||
Each extension includes an OID and an ASN.1 structure. When an
|
||
extension appears in a certificate, the OID appears as the field
|
||
extnID and the corresponding ASN.1 DER encoded structure is the value
|
||
of the octet string extnValue. A certificate MUST NOT include more
|
||
than one instance of a particular extension. For example, a
|
||
certificate may contain only one authority key identifier extension
|
||
(Section 4.2.1.1). An extension includes the boolean critical, with
|
||
a default value of FALSE. The text for each extension specifies the
|
||
acceptable values for the critical field for CAs conforming to this
|
||
profile.
|
||
|
||
Conforming CAs MUST support key identifiers (Sections 4.2.1.1 and
|
||
4.2.1.2), basic constraints (Section 4.2.1.9), key usage (Section
|
||
4.2.1.3), and certificate policies (Section 4.2.1.4) extensions. If
|
||
the CA issues certificates with an empty sequence for the subject
|
||
field, the CA MUST support the subject alternative name extension
|
||
(Section 4.2.1.6). Support for the remaining extensions is OPTIONAL.
|
||
Conforming CAs MAY support extensions that are not identified within
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 26]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
this specification; certificate issuers are cautioned that marking
|
||
such extensions as critical may inhibit interoperability.
|
||
|
||
At a minimum, applications conforming to this profile MUST recognize
|
||
the following extensions: key usage (Section 4.2.1.3), certificate
|
||
policies (Section 4.2.1.4), subject alternative name (Section
|
||
4.2.1.6), basic constraints (Section 4.2.1.9), name constraints
|
||
(Section 4.2.1.10), policy constraints (Section 4.2.1.11), extended
|
||
key usage (Section 4.2.1.12), and inhibit anyPolicy (Section
|
||
4.2.1.14).
|
||
|
||
In addition, applications conforming to this profile SHOULD recognize
|
||
the authority and subject key identifier (Sections 4.2.1.1 and
|
||
4.2.1.2) and policy mappings (Section 4.2.1.5) extensions.
|
||
|
||
4.2.1. Standard Extensions
|
||
|
||
This section identifies standard certificate extensions defined in
|
||
[X.509] for use in the Internet PKI. Each extension is associated
|
||
with an OID defined in [X.509]. These OIDs are members of the id-ce
|
||
arc, which is defined by the following:
|
||
|
||
id-ce OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 29 }
|
||
|
||
4.2.1.1. Authority Key Identifier
|
||
|
||
The authority key identifier extension provides a means of
|
||
identifying the public key corresponding to the private key used to
|
||
sign a certificate. This extension is used where an issuer has
|
||
multiple signing keys (either due to multiple concurrent key pairs or
|
||
due to changeover). The identification MAY be based on either the
|
||
key identifier (the subject key identifier in the issuer's
|
||
certificate) or the issuer name and serial number.
|
||
|
||
The keyIdentifier field of the authorityKeyIdentifier extension MUST
|
||
be included in all certificates generated by conforming CAs to
|
||
facilitate certification path construction. There is one exception;
|
||
where a CA distributes its public key in the form of a "self-signed"
|
||
certificate, the authority key identifier MAY be omitted. The
|
||
signature on a self-signed certificate is generated with the private
|
||
key associated with the certificate's subject public key. (This
|
||
proves that the issuer possesses both the public and private keys.)
|
||
In this case, the subject and authority key identifiers would be
|
||
identical, but only the subject key identifier is needed for
|
||
certification path building.
|
||
|
||
The value of the keyIdentifier field SHOULD be derived from the
|
||
public key used to verify the certificate's signature or a method
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 27]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
that generates unique values. Two common methods for generating key
|
||
identifiers from the public key are described in Section 4.2.1.2.
|
||
Where a key identifier has not been previously established, this
|
||
specification RECOMMENDS use of one of these methods for generating
|
||
keyIdentifiers or use of a similar method that uses a different hash
|
||
algorithm. Where a key identifier has been previously established,
|
||
the CA SHOULD use the previously established identifier.
|
||
|
||
This profile RECOMMENDS support for the key identifier method by all
|
||
certificate users.
|
||
|
||
Conforming CAs MUST mark this extension as non-critical.
|
||
|
||
id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 }
|
||
|
||
AuthorityKeyIdentifier ::= SEQUENCE {
|
||
keyIdentifier [0] KeyIdentifier OPTIONAL,
|
||
authorityCertIssuer [1] GeneralNames OPTIONAL,
|
||
authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
|
||
|
||
KeyIdentifier ::= OCTET STRING
|
||
|
||
4.2.1.2. Subject Key Identifier
|
||
|
||
The subject key identifier extension provides a means of identifying
|
||
certificates that contain a particular public key.
|
||
|
||
To facilitate certification path construction, this extension MUST
|
||
appear in all conforming CA certificates, that is, all certificates
|
||
including the basic constraints extension (Section 4.2.1.9) where the
|
||
value of cA is TRUE. In conforming CA certificates, the value of the
|
||
subject key identifier MUST be the value placed in the key identifier
|
||
field of the authority key identifier extension (Section 4.2.1.1) of
|
||
certificates issued by the subject of this certificate. Applications
|
||
are not required to verify that key identifiers match when performing
|
||
certification path validation.
|
||
|
||
For CA certificates, subject key identifiers SHOULD be derived from
|
||
the public key or a method that generates unique values. Two common
|
||
methods for generating key identifiers from the public key are:
|
||
|
||
(1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
|
||
value of the BIT STRING subjectPublicKey (excluding the tag,
|
||
length, and number of unused bits).
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 28]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(2) The keyIdentifier is composed of a four-bit type field with
|
||
the value 0100 followed by the least significant 60 bits of
|
||
the SHA-1 hash of the value of the BIT STRING
|
||
subjectPublicKey (excluding the tag, length, and number of
|
||
unused bits).
|
||
|
||
Other methods of generating unique numbers are also acceptable.
|
||
|
||
For end entity certificates, the subject key identifier extension
|
||
provides a means for identifying certificates containing the
|
||
particular public key used in an application. Where an end entity
|
||
has obtained multiple certificates, especially from multiple CAs, the
|
||
subject key identifier provides a means to quickly identify the set
|
||
of certificates containing a particular public key. To assist
|
||
applications in identifying the appropriate end entity certificate,
|
||
this extension SHOULD be included in all end entity certificates.
|
||
|
||
For end entity certificates, subject key identifiers SHOULD be
|
||
derived from the public key. Two common methods for generating key
|
||
identifiers from the public key are identified above.
|
||
|
||
Where a key identifier has not been previously established, this
|
||
specification RECOMMENDS use of one of these methods for generating
|
||
keyIdentifiers or use of a similar method that uses a different hash
|
||
algorithm. Where a key identifier has been previously established,
|
||
the CA SHOULD use the previously established identifier.
|
||
|
||
Conforming CAs MUST mark this extension as non-critical.
|
||
|
||
id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 }
|
||
|
||
SubjectKeyIdentifier ::= KeyIdentifier
|
||
|
||
4.2.1.3. Key Usage
|
||
|
||
The key usage extension defines the purpose (e.g., encipherment,
|
||
signature, certificate signing) of the key contained in the
|
||
certificate. The usage restriction might be employed when a key that
|
||
could be used for more than one operation is to be restricted. For
|
||
example, when an RSA key should be used only to verify signatures on
|
||
objects other than public key certificates and CRLs, the
|
||
digitalSignature and/or nonRepudiation bits would be asserted.
|
||
Likewise, when an RSA key should be used only for key management, the
|
||
keyEncipherment bit would be asserted.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 29]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Conforming CAs MUST include this extension in certificates that
|
||
contain public keys that are used to validate digital signatures on
|
||
other public key certificates or CRLs. When present, conforming CAs
|
||
SHOULD mark this extension as critical.
|
||
|
||
id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }
|
||
|
||
KeyUsage ::= BIT STRING {
|
||
digitalSignature (0),
|
||
nonRepudiation (1), -- recent editions of X.509 have
|
||
-- renamed this bit to contentCommitment
|
||
keyEncipherment (2),
|
||
dataEncipherment (3),
|
||
keyAgreement (4),
|
||
keyCertSign (5),
|
||
cRLSign (6),
|
||
encipherOnly (7),
|
||
decipherOnly (8) }
|
||
|
||
Bits in the KeyUsage type are used as follows:
|
||
|
||
The digitalSignature bit is asserted when the subject public key
|
||
is used for verifying digital signatures, other than signatures on
|
||
certificates (bit 5) and CRLs (bit 6), such as those used in an
|
||
entity authentication service, a data origin authentication
|
||
service, and/or an integrity service.
|
||
|
||
The nonRepudiation bit is asserted when the subject public key is
|
||
used to verify digital signatures, other than signatures on
|
||
certificates (bit 5) and CRLs (bit 6), used to provide a non-
|
||
repudiation service that protects against the signing entity
|
||
falsely denying some action. In the case of later conflict, a
|
||
reliable third party may determine the authenticity of the signed
|
||
data. (Note that recent editions of X.509 have renamed the
|
||
nonRepudiation bit to contentCommitment.)
|
||
|
||
The keyEncipherment bit is asserted when the subject public key is
|
||
used for enciphering private or secret keys, i.e., for key
|
||
transport. For example, this bit shall be set when an RSA public
|
||
key is to be used for encrypting a symmetric content-decryption
|
||
key or an asymmetric private key.
|
||
|
||
The dataEncipherment bit is asserted when the subject public key
|
||
is used for directly enciphering raw user data without the use of
|
||
an intermediate symmetric cipher. Note that the use of this bit
|
||
is extremely uncommon; almost all applications use key transport
|
||
or key agreement to establish a symmetric key.
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 30]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
The keyAgreement bit is asserted when the subject public key is
|
||
used for key agreement. For example, when a Diffie-Hellman key is
|
||
to be used for key management, then this bit is set.
|
||
|
||
The keyCertSign bit is asserted when the subject public key is
|
||
used for verifying signatures on public key certificates. If the
|
||
keyCertSign bit is asserted, then the cA bit in the basic
|
||
constraints extension (Section 4.2.1.9) MUST also be asserted.
|
||
|
||
The cRLSign bit is asserted when the subject public key is used
|
||
for verifying signatures on certificate revocation lists (e.g.,
|
||
CRLs, delta CRLs, or ARLs).
|
||
|
||
The meaning of the encipherOnly bit is undefined in the absence of
|
||
the keyAgreement bit. When the encipherOnly bit is asserted and
|
||
the keyAgreement bit is also set, the subject public key may be
|
||
used only for enciphering data while performing key agreement.
|
||
|
||
The meaning of the decipherOnly bit is undefined in the absence of
|
||
the keyAgreement bit. When the decipherOnly bit is asserted and
|
||
the keyAgreement bit is also set, the subject public key may be
|
||
used only for deciphering data while performing key agreement.
|
||
|
||
If the keyUsage extension is present, then the subject public key
|
||
MUST NOT be used to verify signatures on certificates or CRLs unless
|
||
the corresponding keyCertSign or cRLSign bit is set. If the subject
|
||
public key is only to be used for verifying signatures on
|
||
certificates and/or CRLs, then the digitalSignature and
|
||
nonRepudiation bits SHOULD NOT be set. However, the digitalSignature
|
||
and/or nonRepudiation bits MAY be set in addition to the keyCertSign
|
||
and/or cRLSign bits if the subject public key is to be used to verify
|
||
signatures on certificates and/or CRLs as well as other objects.
|
||
|
||
Combining the nonRepudiation bit in the keyUsage certificate
|
||
extension with other keyUsage bits may have security implications
|
||
depending on the context in which the certificate is to be used.
|
||
Further distinctions between the digitalSignature and nonRepudiation
|
||
bits may be provided in specific certificate policies.
|
||
|
||
This profile does not restrict the combinations of bits that may be
|
||
set in an instantiation of the keyUsage extension. However,
|
||
appropriate values for keyUsage extensions for particular algorithms
|
||
are specified in [RFC3279], [RFC4055], and [RFC4491]. When the
|
||
keyUsage extension appears in a certificate, at least one of the bits
|
||
MUST be set to 1.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 31]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
4.2.1.4. Certificate Policies
|
||
|
||
The certificate policies extension contains a sequence of one or more
|
||
policy information terms, each of which consists of an object
|
||
identifier (OID) and optional qualifiers. Optional qualifiers, which
|
||
MAY be present, are not expected to change the definition of the
|
||
policy. A certificate policy OID MUST NOT appear more than once in a
|
||
certificate policies extension.
|
||
|
||
In an end entity certificate, these policy information terms indicate
|
||
the policy under which the certificate has been issued and the
|
||
purposes for which the certificate may be used. In a CA certificate,
|
||
these policy information terms limit the set of policies for
|
||
certification paths that include this certificate. When a CA does
|
||
not wish to limit the set of policies for certification paths that
|
||
include this certificate, it MAY assert the special policy anyPolicy,
|
||
with a value of { 2 5 29 32 0 }.
|
||
|
||
Applications with specific policy requirements are expected to have a
|
||
list of those policies that they will accept and to compare the
|
||
policy OIDs in the certificate to that list. If this extension is
|
||
critical, the path validation software MUST be able to interpret this
|
||
extension (including the optional qualifier), or MUST reject the
|
||
certificate.
|
||
|
||
To promote interoperability, this profile RECOMMENDS that policy
|
||
information terms consist of only an OID. Where an OID alone is
|
||
insufficient, this profile strongly recommends that the use of
|
||
qualifiers be limited to those identified in this section. When
|
||
qualifiers are used with the special policy anyPolicy, they MUST be
|
||
limited to the qualifiers identified in this section. Only those
|
||
qualifiers returned as a result of path validation are considered.
|
||
|
||
This specification defines two policy qualifier types for use by
|
||
certificate policy writers and certificate issuers. The qualifier
|
||
types are the CPS Pointer and User Notice qualifiers.
|
||
|
||
The CPS Pointer qualifier contains a pointer to a Certification
|
||
Practice Statement (CPS) published by the CA. The pointer is in the
|
||
form of a URI. Processing requirements for this qualifier are a
|
||
local matter. No action is mandated by this specification regardless
|
||
of the criticality value asserted for the extension.
|
||
|
||
User notice is intended for display to a relying party when a
|
||
certificate is used. Only user notices returned as a result of path
|
||
validation are intended for display to the user. If a notice is
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 32]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
duplicated, only one copy need be displayed. To prevent such
|
||
duplication, this qualifier SHOULD only be present in end entity
|
||
certificates and CA certificates issued to other organizations.
|
||
|
||
The user notice has two optional fields: the noticeRef field and the
|
||
explicitText field. Conforming CAs SHOULD NOT use the noticeRef
|
||
option.
|
||
|
||
The noticeRef field, if used, names an organization and
|
||
identifies, by number, a particular textual statement prepared by
|
||
that organization. For example, it might identify the
|
||
organization "CertsRUs" and notice number 1. In a typical
|
||
implementation, the application software will have a notice file
|
||
containing the current set of notices for CertsRUs; the
|
||
application will extract the notice text from the file and display
|
||
it. Messages MAY be multilingual, allowing the software to select
|
||
the particular language message for its own environment.
|
||
|
||
An explicitText field includes the textual statement directly in
|
||
the certificate. The explicitText field is a string with a
|
||
maximum size of 200 characters. Conforming CAs SHOULD use the
|
||
UTF8String encoding for explicitText, but MAY use IA5String.
|
||
Conforming CAs MUST NOT encode explicitText as VisibleString or
|
||
BMPString. The explicitText string SHOULD NOT include any control
|
||
characters (e.g., U+0000 to U+001F and U+007F to U+009F). When
|
||
the UTF8String encoding is used, all character sequences SHOULD be
|
||
normalized according to Unicode normalization form C (NFC) [NFC].
|
||
|
||
If both the noticeRef and explicitText options are included in the
|
||
one qualifier and if the application software can locate the notice
|
||
text indicated by the noticeRef option, then that text SHOULD be
|
||
displayed; otherwise, the explicitText string SHOULD be displayed.
|
||
|
||
Note: While the explicitText has a maximum size of 200 characters,
|
||
some non-conforming CAs exceed this limit. Therefore, certificate
|
||
users SHOULD gracefully handle explicitText with more than 200
|
||
characters.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 33]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 }
|
||
|
||
anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificatePolicies 0 }
|
||
|
||
certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
|
||
|
||
PolicyInformation ::= SEQUENCE {
|
||
policyIdentifier CertPolicyId,
|
||
policyQualifiers SEQUENCE SIZE (1..MAX) OF
|
||
PolicyQualifierInfo OPTIONAL }
|
||
|
||
CertPolicyId ::= OBJECT IDENTIFIER
|
||
|
||
PolicyQualifierInfo ::= SEQUENCE {
|
||
policyQualifierId PolicyQualifierId,
|
||
qualifier ANY DEFINED BY policyQualifierId }
|
||
|
||
-- policyQualifierIds for Internet policy qualifiers
|
||
|
||
id-qt OBJECT IDENTIFIER ::= { id-pkix 2 }
|
||
id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 }
|
||
id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 }
|
||
|
||
PolicyQualifierId ::= OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
|
||
|
||
Qualifier ::= CHOICE {
|
||
cPSuri CPSuri,
|
||
userNotice UserNotice }
|
||
|
||
CPSuri ::= IA5String
|
||
|
||
UserNotice ::= SEQUENCE {
|
||
noticeRef NoticeReference OPTIONAL,
|
||
explicitText DisplayText OPTIONAL }
|
||
|
||
NoticeReference ::= SEQUENCE {
|
||
organization DisplayText,
|
||
noticeNumbers SEQUENCE OF INTEGER }
|
||
|
||
DisplayText ::= CHOICE {
|
||
ia5String IA5String (SIZE (1..200)),
|
||
visibleString VisibleString (SIZE (1..200)),
|
||
bmpString BMPString (SIZE (1..200)),
|
||
utf8String UTF8String (SIZE (1..200)) }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 34]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
4.2.1.5. Policy Mappings
|
||
|
||
This extension is used in CA certificates. It lists one or more
|
||
pairs of OIDs; each pair includes an issuerDomainPolicy and a
|
||
subjectDomainPolicy. The pairing indicates the issuing CA considers
|
||
its issuerDomainPolicy equivalent to the subject CA's
|
||
subjectDomainPolicy.
|
||
|
||
The issuing CA's users might accept an issuerDomainPolicy for certain
|
||
applications. The policy mapping defines the list of policies
|
||
associated with the subject CA that may be accepted as comparable to
|
||
the issuerDomainPolicy.
|
||
|
||
Each issuerDomainPolicy named in the policy mappings extension SHOULD
|
||
also be asserted in a certificate policies extension in the same
|
||
certificate. Policies MUST NOT be mapped either to or from the
|
||
special value anyPolicy (Section 4.2.1.4).
|
||
|
||
In general, certificate policies that appear in the
|
||
issuerDomainPolicy field of the policy mappings extension are not
|
||
considered acceptable policies for inclusion in subsequent
|
||
certificates in the certification path. In some circumstances, a CA
|
||
may wish to map from one policy (p1) to another (p2), but still wants
|
||
the issuerDomainPolicy (p1) to be considered acceptable for inclusion
|
||
in subsequent certificates. This may occur, for example, if the CA
|
||
is in the process of transitioning from the use of policy p1 to the
|
||
use of policy p2 and has valid certificates that were issued under
|
||
each of the policies. A CA may indicate this by including two policy
|
||
mappings in the CA certificates that it issues. Each policy mapping
|
||
would have an issuerDomainPolicy of p1; one policy mapping would have
|
||
a subjectDomainPolicy of p1 and the other would have a
|
||
subjectDomainPolicy of p2.
|
||
|
||
This extension MAY be supported by CAs and/or applications.
|
||
Conforming CAs SHOULD mark this extension as critical.
|
||
|
||
id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 }
|
||
|
||
PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
|
||
issuerDomainPolicy CertPolicyId,
|
||
subjectDomainPolicy CertPolicyId }
|
||
|
||
4.2.1.6. Subject Alternative Name
|
||
|
||
The subject alternative name extension allows identities to be bound
|
||
to the subject of the certificate. These identities may be included
|
||
in addition to or in place of the identity in the subject field of
|
||
the certificate. Defined options include an Internet electronic mail
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 35]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
address, a DNS name, an IP address, and a Uniform Resource Identifier
|
||
(URI). Other options exist, including completely local definitions.
|
||
Multiple name forms, and multiple instances of each name form, MAY be
|
||
included. Whenever such identities are to be bound into a
|
||
certificate, the subject alternative name (or issuer alternative
|
||
name) extension MUST be used; however, a DNS name MAY also be
|
||
represented in the subject field using the domainComponent attribute
|
||
as described in Section 4.1.2.4. Note that where such names are
|
||
represented in the subject field implementations are not required to
|
||
convert them into DNS names.
|
||
|
||
Because the subject alternative name is considered to be definitively
|
||
bound to the public key, all parts of the subject alternative name
|
||
MUST be verified by the CA.
|
||
|
||
Further, if the only subject identity included in the certificate is
|
||
an alternative name form (e.g., an electronic mail address), then the
|
||
subject distinguished name MUST be empty (an empty sequence), and the
|
||
subjectAltName extension MUST be present. If the subject field
|
||
contains an empty sequence, then the issuing CA MUST include a
|
||
subjectAltName extension that is marked as critical. When including
|
||
the subjectAltName extension in a certificate that has a non-empty
|
||
subject distinguished name, conforming CAs SHOULD mark the
|
||
subjectAltName extension as non-critical.
|
||
|
||
When the subjectAltName extension contains an Internet mail address,
|
||
the address MUST be stored in the rfc822Name. The format of an
|
||
rfc822Name is a "Mailbox" as defined in Section 4.1.2 of [RFC2821].
|
||
A Mailbox has the form "Local-part@Domain". Note that a Mailbox has
|
||
no phrase (such as a common name) before it, has no comment (text
|
||
surrounded in parentheses) after it, and is not surrounded by "<" and
|
||
">". Rules for encoding Internet mail addresses that include
|
||
internationalized domain names are specified in Section 7.5.
|
||
|
||
When the subjectAltName extension contains an iPAddress, the address
|
||
MUST be stored in the octet string in "network byte order", as
|
||
specified in [RFC791]. The least significant bit (LSB) of each octet
|
||
is the LSB of the corresponding byte in the network address. For IP
|
||
version 4, as specified in [RFC791], the octet string MUST contain
|
||
exactly four octets. For IP version 6, as specified in
|
||
[RFC2460], the octet string MUST contain exactly sixteen octets.
|
||
|
||
When the subjectAltName extension contains a domain name system
|
||
label, the domain name MUST be stored in the dNSName (an IA5String).
|
||
The name MUST be in the "preferred name syntax", as specified by
|
||
Section 3.5 of [RFC1034] and as modified by Section 2.1 of
|
||
[RFC1123]. Note that while uppercase and lowercase letters are
|
||
allowed in domain names, no significance is attached to the case. In
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 36]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
addition, while the string " " is a legal domain name, subjectAltName
|
||
extensions with a dNSName of " " MUST NOT be used. Finally, the use
|
||
of the DNS representation for Internet mail addresses
|
||
(subscriber.example.com instead of subscriber@example.com) MUST NOT
|
||
be used; such identities are to be encoded as rfc822Name. Rules for
|
||
encoding internationalized domain names are specified in Section 7.2.
|
||
|
||
When the subjectAltName extension contains a URI, the name MUST be
|
||
stored in the uniformResourceIdentifier (an IA5String). The name
|
||
MUST NOT be a relative URI, and it MUST follow the URI syntax and
|
||
encoding rules specified in [RFC3986]. The name MUST include both a
|
||
scheme (e.g., "http" or "ftp") and a scheme-specific-part. URIs that
|
||
include an authority ([RFC3986], Section 3.2) MUST include a fully
|
||
qualified domain name or IP address as the host. Rules for encoding
|
||
Internationalized Resource Identifiers (IRIs) are specified in
|
||
Section 7.4.
|
||
|
||
As specified in [RFC3986], the scheme name is not case-sensitive
|
||
(e.g., "http" is equivalent to "HTTP"). The host part, if present,
|
||
is also not case-sensitive, but other components of the scheme-
|
||
specific-part may be case-sensitive. Rules for comparing URIs are
|
||
specified in Section 7.4.
|
||
|
||
When the subjectAltName extension contains a DN in the directoryName,
|
||
the encoding rules are the same as those specified for the issuer
|
||
field in Section 4.1.2.4. The DN MUST be unique for each subject
|
||
entity certified by the one CA as defined by the issuer field. A CA
|
||
MAY issue more than one certificate with the same DN to the same
|
||
subject entity.
|
||
|
||
The subjectAltName MAY carry additional name types through the use of
|
||
the otherName field. The format and semantics of the name are
|
||
indicated through the OBJECT IDENTIFIER in the type-id field. The
|
||
name itself is conveyed as value field in otherName. For example,
|
||
Kerberos [RFC4120] format names can be encoded into the otherName,
|
||
using a Kerberos 5 principal name OID and a SEQUENCE of the Realm and
|
||
the PrincipalName.
|
||
|
||
Subject alternative names MAY be constrained in the same manner as
|
||
subject distinguished names using the name constraints extension as
|
||
described in Section 4.2.1.10.
|
||
|
||
If the subjectAltName extension is present, the sequence MUST contain
|
||
at least one entry. Unlike the subject field, conforming CAs MUST
|
||
NOT issue certificates with subjectAltNames containing empty
|
||
GeneralName fields. For example, an rfc822Name is represented as an
|
||
IA5String. While an empty string is a valid IA5String, such an
|
||
rfc822Name is not permitted by this profile. The behavior of clients
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 37]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
that encounter such a certificate when processing a certification
|
||
path is not defined by this profile.
|
||
|
||
Finally, the semantics of subject alternative names that include
|
||
wildcard characters (e.g., as a placeholder for a set of names) are
|
||
not addressed by this specification. Applications with specific
|
||
requirements MAY use such names, but they must define the semantics.
|
||
|
||
id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 }
|
||
|
||
SubjectAltName ::= GeneralNames
|
||
|
||
GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
|
||
|
||
GeneralName ::= CHOICE {
|
||
otherName [0] OtherName,
|
||
rfc822Name [1] IA5String,
|
||
dNSName [2] IA5String,
|
||
x400Address [3] ORAddress,
|
||
directoryName [4] Name,
|
||
ediPartyName [5] EDIPartyName,
|
||
uniformResourceIdentifier [6] IA5String,
|
||
iPAddress [7] OCTET STRING,
|
||
registeredID [8] OBJECT IDENTIFIER }
|
||
|
||
OtherName ::= SEQUENCE {
|
||
type-id OBJECT IDENTIFIER,
|
||
value [0] EXPLICIT ANY DEFINED BY type-id }
|
||
|
||
EDIPartyName ::= SEQUENCE {
|
||
nameAssigner [0] DirectoryString OPTIONAL,
|
||
partyName [1] DirectoryString }
|
||
|
||
4.2.1.7. Issuer Alternative Name
|
||
|
||
As with Section 4.2.1.6, this extension is used to associate Internet
|
||
style identities with the certificate issuer. Issuer alternative
|
||
name MUST be encoded as in 4.2.1.6. Issuer alternative names are not
|
||
processed as part of the certification path validation algorithm in
|
||
Section 6. (That is, issuer alternative names are not used in name
|
||
chaining and name constraints are not enforced.)
|
||
|
||
Where present, conforming CAs SHOULD mark this extension as non-
|
||
critical.
|
||
|
||
id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 }
|
||
|
||
IssuerAltName ::= GeneralNames
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 38]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
4.2.1.8. Subject Directory Attributes
|
||
|
||
The subject directory attributes extension is used to convey
|
||
identification attributes (e.g., nationality) of the subject. The
|
||
extension is defined as a sequence of one or more attributes.
|
||
Conforming CAs MUST mark this extension as non-critical.
|
||
|
||
id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 }
|
||
|
||
SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
|
||
|
||
4.2.1.9. Basic Constraints
|
||
|
||
The basic constraints extension identifies whether the subject of the
|
||
certificate is a CA and the maximum depth of valid certification
|
||
paths that include this certificate.
|
||
|
||
The cA boolean indicates whether the certified public key may be used
|
||
to verify certificate signatures. If the cA boolean is not asserted,
|
||
then the keyCertSign bit in the key usage extension MUST NOT be
|
||
asserted. If the basic constraints extension is not present in a
|
||
version 3 certificate, or the extension is present but the cA boolean
|
||
is not asserted, then the certified public key MUST NOT be used to
|
||
verify certificate signatures.
|
||
|
||
The pathLenConstraint field is meaningful only if the cA boolean is
|
||
asserted and the key usage extension, if present, asserts the
|
||
keyCertSign bit (Section 4.2.1.3). In this case, it gives the
|
||
maximum number of non-self-issued intermediate certificates that may
|
||
follow this certificate in a valid certification path. (Note: The
|
||
last certificate in the certification path is not an intermediate
|
||
certificate, and is not included in this limit. Usually, the last
|
||
certificate is an end entity certificate, but it can be a CA
|
||
certificate.) A pathLenConstraint of zero indicates that no non-
|
||
self-issued intermediate CA certificates may follow in a valid
|
||
certification path. Where it appears, the pathLenConstraint field
|
||
MUST be greater than or equal to zero. Where pathLenConstraint does
|
||
not appear, no limit is imposed.
|
||
|
||
Conforming CAs MUST include this extension in all CA certificates
|
||
that contain public keys used to validate digital signatures on
|
||
certificates and MUST mark the extension as critical in such
|
||
certificates. This extension MAY appear as a critical or non-
|
||
critical extension in CA certificates that contain public keys used
|
||
exclusively for purposes other than validating digital signatures on
|
||
certificates. Such CA certificates include ones that contain public
|
||
keys used exclusively for validating digital signatures on CRLs and
|
||
ones that contain key management public keys used with certificate
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 39]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
enrollment protocols. This extension MAY appear as a critical or
|
||
non-critical extension in end entity certificates.
|
||
|
||
CAs MUST NOT include the pathLenConstraint field unless the cA
|
||
boolean is asserted and the key usage extension asserts the
|
||
keyCertSign bit.
|
||
|
||
id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }
|
||
|
||
BasicConstraints ::= SEQUENCE {
|
||
cA BOOLEAN DEFAULT FALSE,
|
||
pathLenConstraint INTEGER (0..MAX) OPTIONAL }
|
||
|
||
4.2.1.10. Name Constraints
|
||
|
||
The name constraints extension, which MUST be used only in a CA
|
||
certificate, indicates a name space within which all subject names in
|
||
subsequent certificates in a certification path MUST be located.
|
||
Restrictions apply to the subject distinguished name and apply to
|
||
subject alternative names. Restrictions apply only when the
|
||
specified name form is present. If no name of the type is in the
|
||
certificate, the certificate is acceptable.
|
||
|
||
Name constraints are not applied to self-issued certificates (unless
|
||
the certificate is the final certificate in the path). (This could
|
||
prevent CAs that use name constraints from employing self-issued
|
||
certificates to implement key rollover.)
|
||
|
||
Restrictions are defined in terms of permitted or excluded name
|
||
subtrees. Any name matching a restriction in the excludedSubtrees
|
||
field is invalid regardless of information appearing in the
|
||
permittedSubtrees. Conforming CAs MUST mark this extension as
|
||
critical and SHOULD NOT impose name constraints on the x400Address,
|
||
ediPartyName, or registeredID name forms. Conforming CAs MUST NOT
|
||
issue certificates where name constraints is an empty sequence. That
|
||
is, either the permittedSubtrees field or the excludedSubtrees MUST
|
||
be present.
|
||
|
||
Applications conforming to this profile MUST be able to process name
|
||
constraints that are imposed on the directoryName name form and
|
||
SHOULD be able to process name constraints that are imposed on the
|
||
rfc822Name, uniformResourceIdentifier, dNSName, and iPAddress name
|
||
forms. If a name constraints extension that is marked as critical
|
||
imposes constraints on a particular name form, and an instance of
|
||
that name form appears in the subject field or subjectAltName
|
||
extension of a subsequent certificate, then the application MUST
|
||
either process the constraint or reject the certificate.
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 40]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Within this profile, the minimum and maximum fields are not used with
|
||
any name forms, thus, the minimum MUST be zero, and maximum MUST be
|
||
absent. However, if an application encounters a critical name
|
||
constraints extension that specifies other values for minimum or
|
||
maximum for a name form that appears in a subsequent certificate, the
|
||
application MUST either process these fields or reject the
|
||
certificate.
|
||
|
||
For URIs, the constraint applies to the host part of the name. The
|
||
constraint MUST be specified as a fully qualified domain name and MAY
|
||
specify a host or a domain. Examples would be "host.example.com" and
|
||
".example.com". When the constraint begins with a period, it MAY be
|
||
expanded with one or more labels. That is, the constraint
|
||
".example.com" is satisfied by both host.example.com and
|
||
my.host.example.com. However, the constraint ".example.com" is not
|
||
satisfied by "example.com". When the constraint does not begin with
|
||
a period, it specifies a host. If a constraint is applied to the
|
||
uniformResourceIdentifier name form and a subsequent certificate
|
||
includes a subjectAltName extension with a uniformResourceIdentifier
|
||
that does not include an authority component with a host name
|
||
specified as a fully qualified domain name (e.g., if the URI either
|
||
does not include an authority component or includes an authority
|
||
component in which the host name is specified as an IP address), then
|
||
the application MUST reject the certificate.
|
||
|
||
A name constraint for Internet mail addresses MAY specify a
|
||
particular mailbox, all addresses at a particular host, or all
|
||
mailboxes in a domain. To indicate a particular mailbox, the
|
||
constraint is the complete mail address. For example,
|
||
"root@example.com" indicates the root mailbox on the host
|
||
"example.com". To indicate all Internet mail addresses on a
|
||
particular host, the constraint is specified as the host name. For
|
||
example, the constraint "example.com" is satisfied by any mail
|
||
address at the host "example.com". To specify any address within a
|
||
domain, the constraint is specified with a leading period (as with
|
||
URIs). For example, ".example.com" indicates all the Internet mail
|
||
addresses in the domain "example.com", but not Internet mail
|
||
addresses on the host "example.com".
|
||
|
||
DNS name restrictions are expressed as host.example.com. Any DNS
|
||
name that can be constructed by simply adding zero or more labels to
|
||
the left-hand side of the name satisfies the name constraint. For
|
||
example, www.host.example.com would satisfy the constraint but
|
||
host1.example.com would not.
|
||
|
||
Legacy implementations exist where an electronic mail address is
|
||
embedded in the subject distinguished name in an attribute of type
|
||
emailAddress (Section 4.1.2.6). When constraints are imposed on the
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 41]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
rfc822Name name form, but the certificate does not include a subject
|
||
alternative name, the rfc822Name constraint MUST be applied to the
|
||
attribute of type emailAddress in the subject distinguished name.
|
||
The ASN.1 syntax for emailAddress and the corresponding OID are
|
||
supplied in Appendix A.
|
||
|
||
Restrictions of the form directoryName MUST be applied to the subject
|
||
field in the certificate (when the certificate includes a non-empty
|
||
subject field) and to any names of type directoryName in the
|
||
subjectAltName extension. Restrictions of the form x400Address MUST
|
||
be applied to any names of type x400Address in the subjectAltName
|
||
extension.
|
||
|
||
When applying restrictions of the form directoryName, an
|
||
implementation MUST compare DN attributes. At a minimum,
|
||
implementations MUST perform the DN comparison rules specified in
|
||
Section 7.1. CAs issuing certificates with a restriction of the form
|
||
directoryName SHOULD NOT rely on implementation of the full ISO DN
|
||
name comparison algorithm. This implies name restrictions MUST be
|
||
stated identically to the encoding used in the subject field or
|
||
subjectAltName extension.
|
||
|
||
The syntax of iPAddress MUST be as described in Section 4.2.1.6 with
|
||
the following additions specifically for name constraints. For IPv4
|
||
addresses, the iPAddress field of GeneralName MUST contain eight (8)
|
||
octets, encoded in the style of RFC 4632 (CIDR) to represent an
|
||
address range [RFC4632]. For IPv6 addresses, the iPAddress field
|
||
MUST contain 32 octets similarly encoded. For example, a name
|
||
constraint for "class C" subnet 192.0.2.0 is represented as the
|
||
octets C0 00 02 00 FF FF FF 00, representing the CIDR notation
|
||
192.0.2.0/24 (mask 255.255.255.0).
|
||
|
||
Additional rules for encoding and processing name constraints are
|
||
specified in Section 7.
|
||
|
||
The syntax and semantics for name constraints for otherName,
|
||
ediPartyName, and registeredID are not defined by this specification,
|
||
however, syntax and semantics for name constraints for other name
|
||
forms may be specified in other documents.
|
||
|
||
id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 }
|
||
|
||
NameConstraints ::= SEQUENCE {
|
||
permittedSubtrees [0] GeneralSubtrees OPTIONAL,
|
||
excludedSubtrees [1] GeneralSubtrees OPTIONAL }
|
||
|
||
GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 42]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
GeneralSubtree ::= SEQUENCE {
|
||
base GeneralName,
|
||
minimum [0] BaseDistance DEFAULT 0,
|
||
maximum [1] BaseDistance OPTIONAL }
|
||
|
||
BaseDistance ::= INTEGER (0..MAX)
|
||
|
||
4.2.1.11. Policy Constraints
|
||
|
||
The policy constraints extension can be used in certificates issued
|
||
to CAs. The policy constraints extension constrains path validation
|
||
in two ways. It can be used to prohibit policy mapping or require
|
||
that each certificate in a path contain an acceptable policy
|
||
identifier.
|
||
|
||
If the inhibitPolicyMapping field is present, the value indicates the
|
||
number of additional certificates that may appear in the path before
|
||
policy mapping is no longer permitted. For example, a value of one
|
||
indicates that policy mapping may be processed in certificates issued
|
||
by the subject of this certificate, but not in additional
|
||
certificates in the path.
|
||
|
||
If the requireExplicitPolicy field is present, the value of
|
||
requireExplicitPolicy indicates the number of additional certificates
|
||
that may appear in the path before an explicit policy is required for
|
||
the entire path. When an explicit policy is required, it is
|
||
necessary for all certificates in the path to contain an acceptable
|
||
policy identifier in the certificate policies extension. An
|
||
acceptable policy identifier is the identifier of a policy required
|
||
by the user of the certification path or the identifier of a policy
|
||
that has been declared equivalent through policy mapping.
|
||
|
||
Conforming applications MUST be able to process the
|
||
requireExplicitPolicy field and SHOULD be able to process the
|
||
inhibitPolicyMapping field. Applications that support the
|
||
inhibitPolicyMapping field MUST also implement support for the
|
||
policyMappings extension. If the policyConstraints extension is
|
||
marked as critical and the inhibitPolicyMapping field is present,
|
||
applications that do not implement support for the
|
||
inhibitPolicyMapping field MUST reject the certificate.
|
||
|
||
Conforming CAs MUST NOT issue certificates where policy constraints
|
||
is an empty sequence. That is, either the inhibitPolicyMapping field
|
||
or the requireExplicitPolicy field MUST be present. The behavior of
|
||
clients that encounter an empty policy constraints field is not
|
||
addressed in this profile.
|
||
|
||
Conforming CAs MUST mark this extension as critical.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 43]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 }
|
||
|
||
PolicyConstraints ::= SEQUENCE {
|
||
requireExplicitPolicy [0] SkipCerts OPTIONAL,
|
||
inhibitPolicyMapping [1] SkipCerts OPTIONAL }
|
||
|
||
SkipCerts ::= INTEGER (0..MAX)
|
||
|
||
4.2.1.12. Extended Key Usage
|
||
|
||
This extension indicates one or more purposes for which the certified
|
||
public key may be used, in addition to or in place of the basic
|
||
purposes indicated in the key usage extension. In general, this
|
||
extension will appear only in end entity certificates. This
|
||
extension is defined as follows:
|
||
|
||
id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 }
|
||
|
||
ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
|
||
|
||
KeyPurposeId ::= OBJECT IDENTIFIER
|
||
|
||
Key purposes may be defined by any organization with a need. Object
|
||
identifiers used to identify key purposes MUST be assigned in
|
||
accordance with IANA or ITU-T Recommendation X.660 [X.660].
|
||
|
||
This extension MAY, at the option of the certificate issuer, be
|
||
either critical or non-critical.
|
||
|
||
If the extension is present, then the certificate MUST only be used
|
||
for one of the purposes indicated. If multiple purposes are
|
||
indicated the application need not recognize all purposes indicated,
|
||
as long as the intended purpose is present. Certificate using
|
||
applications MAY require that the extended key usage extension be
|
||
present and that a particular purpose be indicated in order for the
|
||
certificate to be acceptable to that application.
|
||
|
||
If a CA includes extended key usages to satisfy such applications,
|
||
but does not wish to restrict usages of the key, the CA can include
|
||
the special KeyPurposeId anyExtendedKeyUsage in addition to the
|
||
particular key purposes required by the applications. Conforming CAs
|
||
SHOULD NOT mark this extension as critical if the anyExtendedKeyUsage
|
||
KeyPurposeId is present. Applications that require the presence of a
|
||
particular purpose MAY reject certificates that include the
|
||
anyExtendedKeyUsage OID but not the particular OID expected for the
|
||
application.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 44]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
If a certificate contains both a key usage extension and an extended
|
||
key usage extension, then both extensions MUST be processed
|
||
independently and the certificate MUST only be used for a purpose
|
||
consistent with both extensions. If there is no purpose consistent
|
||
with both extensions, then the certificate MUST NOT be used for any
|
||
purpose.
|
||
|
||
The following key usage purposes are defined:
|
||
|
||
anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 }
|
||
|
||
id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
|
||
|
||
id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 }
|
||
-- TLS WWW server authentication
|
||
-- Key usage bits that may be consistent: digitalSignature,
|
||
-- keyEncipherment or keyAgreement
|
||
|
||
id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 }
|
||
-- TLS WWW client authentication
|
||
-- Key usage bits that may be consistent: digitalSignature
|
||
-- and/or keyAgreement
|
||
|
||
id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 }
|
||
-- Signing of downloadable executable code
|
||
-- Key usage bits that may be consistent: digitalSignature
|
||
|
||
id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 }
|
||
-- Email protection
|
||
-- Key usage bits that may be consistent: digitalSignature,
|
||
-- nonRepudiation, and/or (keyEncipherment or keyAgreement)
|
||
|
||
id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 }
|
||
-- Binding the hash of an object to a time
|
||
-- Key usage bits that may be consistent: digitalSignature
|
||
-- and/or nonRepudiation
|
||
|
||
id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 }
|
||
-- Signing OCSP responses
|
||
-- Key usage bits that may be consistent: digitalSignature
|
||
-- and/or nonRepudiation
|
||
|
||
4.2.1.13. CRL Distribution Points
|
||
|
||
The CRL distribution points extension identifies how CRL information
|
||
is obtained. The extension SHOULD be non-critical, but this profile
|
||
RECOMMENDS support for this extension by CAs and applications.
|
||
Further discussion of CRL management is contained in Section 5.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 45]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
The cRLDistributionPoints extension is a SEQUENCE of
|
||
DistributionPoint. A DistributionPoint consists of three fields,
|
||
each of which is optional: distributionPoint, reasons, and cRLIssuer.
|
||
While each of these fields is optional, a DistributionPoint MUST NOT
|
||
consist of only the reasons field; either distributionPoint or
|
||
cRLIssuer MUST be present. If the certificate issuer is not the CRL
|
||
issuer, then the cRLIssuer field MUST be present and contain the Name
|
||
of the CRL issuer. If the certificate issuer is also the CRL issuer,
|
||
then conforming CAs MUST omit the cRLIssuer field and MUST include
|
||
the distributionPoint field.
|
||
|
||
When the distributionPoint field is present, it contains either a
|
||
SEQUENCE of general names or a single value, nameRelativeToCRLIssuer.
|
||
If the DistributionPointName contains multiple values, each name
|
||
describes a different mechanism to obtain the same CRL. For example,
|
||
the same CRL could be available for retrieval through both LDAP and
|
||
HTTP.
|
||
|
||
If the distributionPoint field contains a directoryName, the entry
|
||
for that directoryName contains the current CRL for the associated
|
||
reasons and the CRL is issued by the associated cRLIssuer. The CRL
|
||
may be stored in either the certificateRevocationList or
|
||
authorityRevocationList attribute. The CRL is to be obtained by the
|
||
application from whatever directory server is locally configured.
|
||
The protocol the application uses to access the directory (e.g., DAP
|
||
or LDAP) is a local matter.
|
||
|
||
If the DistributionPointName contains a general name of type URI, the
|
||
following semantics MUST be assumed: the URI is a pointer to the
|
||
current CRL for the associated reasons and will be issued by the
|
||
associated cRLIssuer. When the HTTP or FTP URI scheme is used, the
|
||
URI MUST point to a single DER encoded CRL as specified in
|
||
[RFC2585]. HTTP server implementations accessed via the URI SHOULD
|
||
specify the media type application/pkix-crl in the content-type
|
||
header field of the response. When the LDAP URI scheme [RFC4516] is
|
||
used, the URI MUST include a <dn> field containing the distinguished
|
||
name of the entry holding the CRL, MUST include a single <attrdesc>
|
||
that contains an appropriate attribute description for the attribute
|
||
that holds the CRL [RFC4523], and SHOULD include a <host>
|
||
(e.g., <ldap://ldap.example.com/cn=example%20CA,dc=example,dc=com?
|
||
certificateRevocationList;binary>). Omitting the <host> (e.g.,
|
||
<ldap:///cn=CA,dc=example,dc=com?authorityRevocationList;binary>) has
|
||
the effect of relying on whatever a priori knowledge the client might
|
||
have to contact an appropriate server. When present,
|
||
DistributionPointName SHOULD include at least one LDAP or HTTP URI.
|
||
|
||
If the DistributionPointName contains the single value
|
||
nameRelativeToCRLIssuer, the value provides a distinguished name
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 46]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
fragment. The fragment is appended to the X.500 distinguished name
|
||
of the CRL issuer to obtain the distribution point name. If the
|
||
cRLIssuer field in the DistributionPoint is present, then the name
|
||
fragment is appended to the distinguished name that it contains;
|
||
otherwise, the name fragment is appended to the certificate issuer
|
||
distinguished name. Conforming CAs SHOULD NOT use
|
||
nameRelativeToCRLIssuer to specify distribution point names. The
|
||
DistributionPointName MUST NOT use the nameRelativeToCRLIssuer
|
||
alternative when cRLIssuer contains more than one distinguished name.
|
||
|
||
If the DistributionPoint omits the reasons field, the CRL MUST
|
||
include revocation information for all reasons. This profile
|
||
RECOMMENDS against segmenting CRLs by reason code. When a conforming
|
||
CA includes a cRLDistributionPoints extension in a certificate, it
|
||
MUST include at least one DistributionPoint that points to a CRL that
|
||
covers the certificate for all reasons.
|
||
|
||
The cRLIssuer identifies the entity that signs and issues the CRL.
|
||
If present, the cRLIssuer MUST only contain the distinguished name
|
||
(DN) from the issuer field of the CRL to which the DistributionPoint
|
||
is pointing. The encoding of the name in the cRLIssuer field MUST be
|
||
exactly the same as the encoding in issuer field of the CRL. If the
|
||
cRLIssuer field is included and the DN in that field does not
|
||
correspond to an X.500 or LDAP directory entry where CRL is located,
|
||
then conforming CAs MUST include the distributionPoint field.
|
||
|
||
id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= { id-ce 31 }
|
||
|
||
CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
|
||
|
||
DistributionPoint ::= SEQUENCE {
|
||
distributionPoint [0] DistributionPointName OPTIONAL,
|
||
reasons [1] ReasonFlags OPTIONAL,
|
||
cRLIssuer [2] GeneralNames OPTIONAL }
|
||
|
||
DistributionPointName ::= CHOICE {
|
||
fullName [0] GeneralNames,
|
||
nameRelativeToCRLIssuer [1] RelativeDistinguishedName }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 47]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
ReasonFlags ::= BIT STRING {
|
||
unused (0),
|
||
keyCompromise (1),
|
||
cACompromise (2),
|
||
affiliationChanged (3),
|
||
superseded (4),
|
||
cessationOfOperation (5),
|
||
certificateHold (6),
|
||
privilegeWithdrawn (7),
|
||
aACompromise (8) }
|
||
|
||
4.2.1.14. Inhibit anyPolicy
|
||
|
||
The inhibit anyPolicy extension can be used in certificates issued to
|
||
CAs. The inhibit anyPolicy extension indicates that the special
|
||
anyPolicy OID, with the value { 2 5 29 32 0 }, is not considered an
|
||
explicit match for other certificate policies except when it appears
|
||
in an intermediate self-issued CA certificate. The value indicates
|
||
the number of additional non-self-issued certificates that may appear
|
||
in the path before anyPolicy is no longer permitted. For example, a
|
||
value of one indicates that anyPolicy may be processed in
|
||
certificates issued by the subject of this certificate, but not in
|
||
additional certificates in the path.
|
||
|
||
Conforming CAs MUST mark this extension as critical.
|
||
|
||
id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::= { id-ce 54 }
|
||
|
||
InhibitAnyPolicy ::= SkipCerts
|
||
|
||
SkipCerts ::= INTEGER (0..MAX)
|
||
|
||
4.2.1.15. Freshest CRL (a.k.a. Delta CRL Distribution Point)
|
||
|
||
The freshest CRL extension identifies how delta CRL information is
|
||
obtained. The extension MUST be marked as non-critical by conforming
|
||
CAs. Further discussion of CRL management is contained in Section 5.
|
||
|
||
The same syntax is used for this extension and the
|
||
cRLDistributionPoints extension, and is described in Section
|
||
4.2.1.13. The same conventions apply to both extensions.
|
||
|
||
id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 }
|
||
|
||
FreshestCRL ::= CRLDistributionPoints
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 48]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
4.2.2. Private Internet Extensions
|
||
|
||
This section defines two extensions for use in the Internet Public
|
||
Key Infrastructure. These extensions may be used to direct
|
||
applications to on-line information about the issuer or the subject.
|
||
Each extension contains a sequence of access methods and access
|
||
locations. The access method is an object identifier that indicates
|
||
the type of information that is available. The access location is a
|
||
GeneralName that implicitly specifies the location and format of the
|
||
information and the method for obtaining the information.
|
||
|
||
Object identifiers are defined for the private extensions. The
|
||
object identifiers associated with the private extensions are defined
|
||
under the arc id-pe within the arc id-pkix. Any future extensions
|
||
defined for the Internet PKI are also expected to be defined under
|
||
the arc id-pe.
|
||
|
||
id-pkix OBJECT IDENTIFIER ::=
|
||
{ iso(1) identified-organization(3) dod(6) internet(1)
|
||
security(5) mechanisms(5) pkix(7) }
|
||
|
||
id-pe OBJECT IDENTIFIER ::= { id-pkix 1 }
|
||
|
||
4.2.2.1. Authority Information Access
|
||
|
||
The authority information access extension indicates how to access
|
||
information and services for the issuer of the certificate in which
|
||
the extension appears. Information and services may include on-line
|
||
validation services and CA policy data. (The location of CRLs is not
|
||
specified in this extension; that information is provided by the
|
||
cRLDistributionPoints extension.) This extension may be included in
|
||
end entity or CA certificates. Conforming CAs MUST mark this
|
||
extension as non-critical.
|
||
|
||
id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
|
||
|
||
AuthorityInfoAccessSyntax ::=
|
||
SEQUENCE SIZE (1..MAX) OF AccessDescription
|
||
|
||
AccessDescription ::= SEQUENCE {
|
||
accessMethod OBJECT IDENTIFIER,
|
||
accessLocation GeneralName }
|
||
|
||
id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
|
||
|
||
id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
|
||
|
||
id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 49]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Each entry in the sequence AuthorityInfoAccessSyntax describes the
|
||
format and location of additional information provided by the issuer
|
||
of the certificate in which this extension appears. The type and
|
||
format of the information are specified by the accessMethod field;
|
||
the accessLocation field specifies the location of the information.
|
||
The retrieval mechanism may be implied by the accessMethod or
|
||
specified by accessLocation.
|
||
|
||
This profile defines two accessMethod OIDs: id-ad-caIssuers and
|
||
id-ad-ocsp.
|
||
|
||
In a public key certificate, the id-ad-caIssuers OID is used when the
|
||
additional information lists certificates that were issued to the CA
|
||
that issued the certificate containing this extension. The
|
||
referenced CA issuers description is intended to aid certificate
|
||
users in the selection of a certification path that terminates at a
|
||
point trusted by the certificate user.
|
||
|
||
When id-ad-caIssuers appears as accessMethod, the accessLocation
|
||
field describes the referenced description server and the access
|
||
protocol to obtain the referenced description. The accessLocation
|
||
field is defined as a GeneralName, which can take several forms.
|
||
|
||
When the accessLocation is a directoryName, the information is to be
|
||
obtained by the application from whatever directory server is locally
|
||
configured. The entry for the directoryName contains CA certificates
|
||
in the crossCertificatePair and/or cACertificate attributes as
|
||
specified in [RFC4523]. The protocol that application uses to access
|
||
the directory (e.g., DAP or LDAP) is a local matter.
|
||
|
||
Where the information is available via LDAP, the accessLocation
|
||
SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC4516] MUST
|
||
include a <dn> field containing the distinguished name of the entry
|
||
holding the certificates, MUST include an <attributes> field that
|
||
lists appropriate attribute descriptions for the attributes that hold
|
||
the DER encoded certificates or cross-certificate pairs [RFC4523],
|
||
and SHOULD include a <host> (e.g., <ldap://ldap.example.com/cn=CA,
|
||
dc=example,dc=com?cACertificate;binary,crossCertificatePair;binary>).
|
||
Omitting the <host> (e.g., <ldap:///cn=exampleCA,dc=example,dc=com?
|
||
cACertificate;binary>) has the effect of relying on whatever a priori
|
||
knowledge the client might have to contact an appropriate server.
|
||
|
||
Where the information is available via HTTP or FTP, accessLocation
|
||
MUST be a uniformResourceIdentifier and the URI MUST point to either
|
||
a single DER encoded certificate as specified in [RFC2585] or a
|
||
collection of certificates in a BER or DER encoded "certs-only" CMS
|
||
message as specified in [RFC2797].
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 50]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Conforming applications that support HTTP or FTP for accessing
|
||
certificates MUST be able to accept individual DER encoded
|
||
certificates and SHOULD be able to accept "certs-only" CMS messages.
|
||
|
||
HTTP server implementations accessed via the URI SHOULD specify the
|
||
media type application/pkix-cert [RFC2585] in the content-type header
|
||
field of the response for a single DER encoded certificate and SHOULD
|
||
specify the media type application/pkcs7-mime [RFC2797] in the
|
||
content-type header field of the response for "certs-only" CMS
|
||
messages. For FTP, the name of a file that contains a single DER
|
||
encoded certificate SHOULD have a suffix of ".cer" [RFC2585] and the
|
||
name of a file that contains a "certs-only" CMS message SHOULD have a
|
||
suffix of ".p7c" [RFC2797]. Consuming clients may use the media type
|
||
or file extension as a hint to the content, but should not depend
|
||
solely on the presence of the correct media type or file extension in
|
||
the server response.
|
||
|
||
The semantics of other id-ad-caIssuers accessLocation name forms are
|
||
not defined.
|
||
|
||
An authorityInfoAccess extension may include multiple instances of
|
||
the id-ad-caIssuers accessMethod. The different instances may
|
||
specify different methods for accessing the same information or may
|
||
point to different information. When the id-ad-caIssuers
|
||
accessMethod is used, at least one instance SHOULD specify an
|
||
accessLocation that is an HTTP [RFC2616] or LDAP [RFC4516] URI.
|
||
|
||
The id-ad-ocsp OID is used when revocation information for the
|
||
certificate containing this extension is available using the Online
|
||
Certificate Status Protocol (OCSP) [RFC2560].
|
||
|
||
When id-ad-ocsp appears as accessMethod, the accessLocation field is
|
||
the location of the OCSP responder, using the conventions defined in
|
||
[RFC2560].
|
||
|
||
Additional access descriptors may be defined in other PKIX
|
||
specifications.
|
||
|
||
4.2.2.2. Subject Information Access
|
||
|
||
The subject information access extension indicates how to access
|
||
information and services for the subject of the certificate in which
|
||
the extension appears. When the subject is a CA, information and
|
||
services may include certificate validation services and CA policy
|
||
data. When the subject is an end entity, the information describes
|
||
the type of services offered and how to access them. In this case,
|
||
the contents of this extension are defined in the protocol
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 51]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
specifications for the supported services. This extension may be
|
||
included in end entity or CA certificates. Conforming CAs MUST mark
|
||
this extension as non-critical.
|
||
|
||
id-pe-subjectInfoAccess OBJECT IDENTIFIER ::= { id-pe 11 }
|
||
|
||
SubjectInfoAccessSyntax ::=
|
||
SEQUENCE SIZE (1..MAX) OF AccessDescription
|
||
|
||
AccessDescription ::= SEQUENCE {
|
||
accessMethod OBJECT IDENTIFIER,
|
||
accessLocation GeneralName }
|
||
|
||
Each entry in the sequence SubjectInfoAccessSyntax describes the
|
||
format and location of additional information provided by the subject
|
||
of the certificate in which this extension appears. The type and
|
||
format of the information are specified by the accessMethod field;
|
||
the accessLocation field specifies the location of the information.
|
||
The retrieval mechanism may be implied by the accessMethod or
|
||
specified by accessLocation.
|
||
|
||
This profile defines one access method to be used when the subject is
|
||
a CA and one access method to be used when the subject is an end
|
||
entity. Additional access methods may be defined in the future in
|
||
the protocol specifications for other services.
|
||
|
||
The id-ad-caRepository OID is used when the subject is a CA that
|
||
publishes certificates it issues in a repository. The accessLocation
|
||
field is defined as a GeneralName, which can take several forms.
|
||
|
||
When the accessLocation is a directoryName, the information is to be
|
||
obtained by the application from whatever directory server is locally
|
||
configured. When the extension is used to point to CA certificates,
|
||
the entry for the directoryName contains CA certificates in the
|
||
crossCertificatePair and/or cACertificate attributes as specified in
|
||
[RFC4523]. The protocol the application uses to access the directory
|
||
(e.g., DAP or LDAP) is a local matter.
|
||
|
||
Where the information is available via LDAP, the accessLocation
|
||
SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC4516] MUST
|
||
include a <dn> field containing the distinguished name of the entry
|
||
holding the certificates, MUST include an <attributes> field that
|
||
lists appropriate attribute descriptions for the attributes that hold
|
||
the DER encoded certificates or cross-certificate pairs [RFC4523],
|
||
and SHOULD include a <host> (e.g., <ldap://ldap.example.com/cn=CA,
|
||
dc=example,dc=com?cACertificate;binary,crossCertificatePair;binary>).
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 52]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Omitting the <host> (e.g., <ldap:///cn=exampleCA,dc=example,dc=com?
|
||
cACertificate;binary>) has the effect of relying on whatever a priori
|
||
knowledge the client might have to contact an appropriate server.
|
||
|
||
Where the information is available via HTTP or FTP, accessLocation
|
||
MUST be a uniformResourceIdentifier and the URI MUST point to either
|
||
a single DER encoded certificate as specified in [RFC2585] or a
|
||
collection of certificates in a BER or DER encoded "certs-only" CMS
|
||
message as specified in [RFC2797].
|
||
|
||
Conforming applications that support HTTP or FTP for accessing
|
||
certificates MUST be able to accept individual DER encoded
|
||
certificates and SHOULD be able to accept "certs-only" CMS messages.
|
||
|
||
HTTP server implementations accessed via the URI SHOULD specify the
|
||
media type application/pkix-cert [RFC2585] in the content-type header
|
||
field of the response for a single DER encoded certificate and SHOULD
|
||
specify the media type application/pkcs7-mime [RFC2797] in the
|
||
content-type header field of the response for "certs-only" CMS
|
||
messages. For FTP, the name of a file that contains a single DER
|
||
encoded certificate SHOULD have a suffix of ".cer" [RFC2585] and the
|
||
name of a file that contains a "certs-only" CMS message SHOULD have a
|
||
suffix of ".p7c" [RFC2797]. Consuming clients may use the media type
|
||
or file extension as a hint to the content, but should not depend
|
||
solely on the presence of the correct media type or file extension in
|
||
the server response.
|
||
|
||
The semantics of other id-ad-caRepository accessLocation name forms
|
||
are not defined.
|
||
|
||
A subjectInfoAccess extension may include multiple instances of the
|
||
id-ad-caRepository accessMethod. The different instances may specify
|
||
different methods for accessing the same information or may point to
|
||
different information. When the id-ad-caRepository accessMethod is
|
||
used, at least one instance SHOULD specify an accessLocation that is
|
||
an HTTP [RFC2616] or LDAP [RFC4516] URI.
|
||
|
||
The id-ad-timeStamping OID is used when the subject offers
|
||
timestamping services using the Time Stamp Protocol defined in
|
||
[RFC3161]. Where the timestamping services are available via HTTP or
|
||
FTP, accessLocation MUST be a uniformResourceIdentifier. Where the
|
||
timestamping services are available via electronic mail,
|
||
accessLocation MUST be an rfc822Name. Where timestamping services
|
||
are available using TCP/IP, the dNSName or iPAddress name forms may
|
||
be used. The semantics of other name forms of accessLocation (when
|
||
accessMethod is id-ad-timeStamping) are not defined by this
|
||
specification.
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 53]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Additional access descriptors may be defined in other PKIX
|
||
specifications.
|
||
|
||
id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
|
||
|
||
id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 }
|
||
|
||
id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 }
|
||
|
||
5. CRL and CRL Extensions Profile
|
||
|
||
As discussed above, one goal of this X.509 v2 CRL profile is to
|
||
foster the creation of an interoperable and reusable Internet PKI.
|
||
To achieve this goal, guidelines for the use of extensions are
|
||
specified, and some assumptions are made about the nature of
|
||
information included in the CRL.
|
||
|
||
CRLs may be used in a wide range of applications and environments
|
||
covering a broad spectrum of interoperability goals and an even
|
||
broader spectrum of operational and assurance requirements. This
|
||
profile establishes a common baseline for generic applications
|
||
requiring broad interoperability. The profile defines a set of
|
||
information that can be expected in every CRL. Also, the profile
|
||
defines common locations within the CRL for frequently used
|
||
attributes as well as common representations for these attributes.
|
||
|
||
CRL issuers issue CRLs. The CRL issuer is either the CA or an entity
|
||
that has been authorized by the CA to issue CRLs. CAs publish CRLs
|
||
to provide status information about the certificates they issued.
|
||
However, a CA may delegate this responsibility to another trusted
|
||
authority.
|
||
|
||
Each CRL has a particular scope. The CRL scope is the set of
|
||
certificates that could appear on a given CRL. For example, the
|
||
scope could be "all certificates issued by CA X", "all CA
|
||
certificates issued by CA X", "all certificates issued by CA X that
|
||
have been revoked for reasons of key compromise and CA compromise",
|
||
or a set of certificates based on arbitrary local information, such
|
||
as "all certificates issued to the NIST employees located in
|
||
Boulder".
|
||
|
||
A complete CRL lists all unexpired certificates, within its scope,
|
||
that have been revoked for one of the revocation reasons covered by
|
||
the CRL scope. A full and complete CRL lists all unexpired
|
||
certificates issued by a CA that have been revoked for any reason.
|
||
(Note that since CAs and CRL issuers are identified by name, the
|
||
scope of a CRL is not affected by the key used to sign the CRL or the
|
||
key(s) used to sign certificates.)
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 54]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
If the scope of the CRL includes one or more certificates issued by
|
||
an entity other than the CRL issuer, then it is an indirect CRL. The
|
||
scope of an indirect CRL may be limited to certificates issued by a
|
||
single CA or may include certificates issued by multiple CAs. If the
|
||
issuer of the indirect CRL is a CA, then the scope of the indirect
|
||
CRL MAY also include certificates issued by the issuer of the CRL.
|
||
|
||
The CRL issuer MAY also generate delta CRLs. A delta CRL only lists
|
||
those certificates, within its scope, whose revocation status has
|
||
changed since the issuance of a referenced complete CRL. The
|
||
referenced complete CRL is referred to as a base CRL. The scope of a
|
||
delta CRL MUST be the same as the base CRL that it references.
|
||
|
||
This profile defines one private Internet CRL extension but does not
|
||
define any private CRL entry extensions.
|
||
|
||
Environments with additional or special purpose requirements may
|
||
build on this profile or may replace it.
|
||
|
||
Conforming CAs are not required to issue CRLs if other revocation or
|
||
certificate status mechanisms are provided. When CRLs are issued,
|
||
the CRLs MUST be version 2 CRLs, include the date by which the next
|
||
CRL will be issued in the nextUpdate field (Section 5.1.2.5), include
|
||
the CRL number extension (Section 5.2.3), and include the authority
|
||
key identifier extension (Section 5.2.1). Conforming applications
|
||
that support CRLs are REQUIRED to process both version 1 and version
|
||
2 complete CRLs that provide revocation information for all
|
||
certificates issued by one CA. Conforming applications are not
|
||
required to support processing of delta CRLs, indirect CRLs, or CRLs
|
||
with a scope other than all certificates issued by one CA.
|
||
|
||
5.1. CRL Fields
|
||
|
||
The X.509 v2 CRL syntax is as follows. For signature calculation,
|
||
the data that is to be signed is ASN.1 DER encoded. ASN.1 DER
|
||
encoding is a tag, length, value encoding system for each element.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 55]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
CertificateList ::= SEQUENCE {
|
||
tbsCertList TBSCertList,
|
||
signatureAlgorithm AlgorithmIdentifier,
|
||
signatureValue BIT STRING }
|
||
|
||
TBSCertList ::= SEQUENCE {
|
||
version Version OPTIONAL,
|
||
-- if present, MUST be v2
|
||
signature AlgorithmIdentifier,
|
||
issuer Name,
|
||
thisUpdate Time,
|
||
nextUpdate Time OPTIONAL,
|
||
revokedCertificates SEQUENCE OF SEQUENCE {
|
||
userCertificate CertificateSerialNumber,
|
||
revocationDate Time,
|
||
crlEntryExtensions Extensions OPTIONAL
|
||
-- if present, version MUST be v2
|
||
} OPTIONAL,
|
||
crlExtensions [0] EXPLICIT Extensions OPTIONAL
|
||
-- if present, version MUST be v2
|
||
}
|
||
|
||
-- Version, Time, CertificateSerialNumber, and Extensions
|
||
-- are all defined in the ASN.1 in Section 4.1
|
||
|
||
-- AlgorithmIdentifier is defined in Section 4.1.1.2
|
||
|
||
The following items describe the use of the X.509 v2 CRL in the
|
||
Internet PKI.
|
||
|
||
5.1.1. CertificateList Fields
|
||
|
||
The CertificateList is a SEQUENCE of three required fields. The
|
||
fields are described in detail in the following subsections.
|
||
|
||
5.1.1.1. tbsCertList
|
||
|
||
The first field in the sequence is the tbsCertList. This field is
|
||
itself a sequence containing the name of the issuer, issue date,
|
||
issue date of the next list, the optional list of revoked
|
||
certificates, and optional CRL extensions. When there are no revoked
|
||
certificates, the revoked certificates list is absent. When one or
|
||
more certificates are revoked, each entry on the revoked certificate
|
||
list is defined by a sequence of user certificate serial number,
|
||
revocation date, and optional CRL entry extensions.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 56]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
5.1.1.2. signatureAlgorithm
|
||
|
||
The signatureAlgorithm field contains the algorithm identifier for
|
||
the algorithm used by the CRL issuer to sign the CertificateList.
|
||
The field is of type AlgorithmIdentifier, which is defined in Section
|
||
4.1.1.2. [RFC3279], [RFC4055], and [RFC4491] list supported
|
||
algorithms for this specification, but other signature algorithms MAY
|
||
also be supported.
|
||
|
||
This field MUST contain the same algorithm identifier as the
|
||
signature field in the sequence tbsCertList (Section 5.1.2.2).
|
||
|
||
5.1.1.3. signatureValue
|
||
|
||
The signatureValue field contains a digital signature computed upon
|
||
the ASN.1 DER encoded tbsCertList. The ASN.1 DER encoded tbsCertList
|
||
is used as the input to the signature function. This signature value
|
||
is encoded as a BIT STRING and included in the CRL signatureValue
|
||
field. The details of this process are specified for each of the
|
||
supported algorithms in [RFC3279], [RFC4055], and [RFC4491].
|
||
|
||
CAs that are also CRL issuers MAY use one private key to digitally
|
||
sign certificates and CRLs, or MAY use separate private keys to
|
||
digitally sign certificates and CRLs. When separate private keys are
|
||
employed, each of the public keys associated with these private keys
|
||
is placed in a separate certificate, one with the keyCertSign bit set
|
||
in the key usage extension, and one with the cRLSign bit set in the
|
||
key usage extension (Section 4.2.1.3). When separate private keys
|
||
are employed, certificates issued by the CA contain one authority key
|
||
identifier, and the corresponding CRLs contain a different authority
|
||
key identifier. The use of separate CA certificates for validation
|
||
of certificate signatures and CRL signatures can offer improved
|
||
security characteristics; however, it imposes a burden on
|
||
applications, and it might limit interoperability. Many applications
|
||
construct a certification path, and then validate the certification
|
||
path (Section 6). CRL checking in turn requires a separate
|
||
certification path to be constructed and validated for the CA's CRL
|
||
signature validation certificate. Applications that perform CRL
|
||
checking MUST support certification path validation when certificates
|
||
and CRLs are digitally signed with the same CA private key. These
|
||
applications SHOULD support certification path validation when
|
||
certificates and CRLs are digitally signed with different CA private
|
||
keys.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 57]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
5.1.2. Certificate List "To Be Signed"
|
||
|
||
The certificate list to be signed, or TBSCertList, is a sequence of
|
||
required and optional fields. The required fields identify the CRL
|
||
issuer, the algorithm used to sign the CRL, and the date and time the
|
||
CRL was issued.
|
||
|
||
Optional fields include the date and time by which the CRL issuer
|
||
will issue the next CRL, lists of revoked certificates, and CRL
|
||
extensions. The revoked certificate list is optional to support the
|
||
case where a CA has not revoked any unexpired certificates that it
|
||
has issued. This profile requires conforming CRL issuers to include
|
||
the nextUpdate field and the CRL number and authority key identifier
|
||
CRL extensions in all CRLs issued.
|
||
|
||
5.1.2.1. Version
|
||
|
||
This optional field describes the version of the encoded CRL. When
|
||
extensions are used, as required by this profile, this field MUST be
|
||
present and MUST specify version 2 (the integer value is 1).
|
||
|
||
5.1.2.2. Signature
|
||
|
||
This field contains the algorithm identifier for the algorithm used
|
||
to sign the CRL. [RFC3279], [RFC4055], and [RFC4491] list OIDs for
|
||
the most popular signature algorithms used in the Internet PKI.
|
||
|
||
This field MUST contain the same algorithm identifier as the
|
||
signatureAlgorithm field in the sequence CertificateList (Section
|
||
5.1.1.2).
|
||
|
||
5.1.2.3. Issuer Name
|
||
|
||
The issuer name identifies the entity that has signed and issued the
|
||
CRL. The issuer identity is carried in the issuer field.
|
||
Alternative name forms may also appear in the issuerAltName extension
|
||
(Section 5.2.2). The issuer field MUST contain a non-empty X.500
|
||
distinguished name (DN). The issuer field is defined as the X.501
|
||
type Name, and MUST follow the encoding rules for the issuer name
|
||
field in the certificate (Section 4.1.2.4).
|
||
|
||
5.1.2.4. This Update
|
||
|
||
This field indicates the issue date of this CRL. thisUpdate may be
|
||
encoded as UTCTime or GeneralizedTime.
|
||
|
||
CRL issuers conforming to this profile MUST encode thisUpdate as
|
||
UTCTime for dates through the year 2049. CRL issuers conforming to
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 58]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
this profile MUST encode thisUpdate as GeneralizedTime for dates in
|
||
the year 2050 or later. Conforming applications MUST be able to
|
||
process dates that are encoded in either UTCTime or GeneralizedTime.
|
||
|
||
Where encoded as UTCTime, thisUpdate MUST be specified and
|
||
interpreted as defined in Section 4.1.2.5.1. Where encoded as
|
||
GeneralizedTime, thisUpdate MUST be specified and interpreted as
|
||
defined in Section 4.1.2.5.2.
|
||
|
||
5.1.2.5. Next Update
|
||
|
||
This field indicates the date by which the next CRL will be issued.
|
||
The next CRL could be issued before the indicated date, but it will
|
||
not be issued any later than the indicated date. CRL issuers SHOULD
|
||
issue CRLs with a nextUpdate time equal to or later than all previous
|
||
CRLs. nextUpdate may be encoded as UTCTime or GeneralizedTime.
|
||
|
||
Conforming CRL issuers MUST include the nextUpdate field in all CRLs.
|
||
Note that the ASN.1 syntax of TBSCertList describes this field as
|
||
OPTIONAL, which is consistent with the ASN.1 structure defined in
|
||
[X.509]. The behavior of clients processing CRLs that omit
|
||
nextUpdate is not specified by this profile.
|
||
|
||
CRL issuers conforming to this profile MUST encode nextUpdate as
|
||
UTCTime for dates through the year 2049. CRL issuers conforming to
|
||
this profile MUST encode nextUpdate as GeneralizedTime for dates in
|
||
the year 2050 or later. Conforming applications MUST be able to
|
||
process dates that are encoded in either UTCTime or GeneralizedTime.
|
||
|
||
Where encoded as UTCTime, nextUpdate MUST be specified and
|
||
interpreted as defined in Section 4.1.2.5.1. Where encoded as
|
||
GeneralizedTime, nextUpdate MUST be specified and interpreted as
|
||
defined in Section 4.1.2.5.2.
|
||
|
||
5.1.2.6. Revoked Certificates
|
||
|
||
When there are no revoked certificates, the revoked certificates list
|
||
MUST be absent. Otherwise, revoked certificates are listed by their
|
||
serial numbers. Certificates revoked by the CA are uniquely
|
||
identified by the certificate serial number. The date on which the
|
||
revocation occurred is specified. The time for revocationDate MUST
|
||
be expressed as described in Section 5.1.2.4. Additional information
|
||
may be supplied in CRL entry extensions; CRL entry extensions are
|
||
discussed in Section 5.3.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 59]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
5.1.2.7. Extensions
|
||
|
||
This field may only appear if the version is 2 (Section 5.1.2.1). If
|
||
present, this field is a sequence of one or more CRL extensions. CRL
|
||
extensions are discussed in Section 5.2.
|
||
|
||
5.2. CRL Extensions
|
||
|
||
The extensions defined by ANSI X9, ISO/IEC, and ITU-T for X.509 v2
|
||
CRLs [X.509] [X9.55] provide methods for associating additional
|
||
attributes with CRLs. The X.509 v2 CRL format also allows
|
||
communities to define private extensions to carry information unique
|
||
to those communities. Each extension in a CRL may be designated as
|
||
critical or non-critical. If a CRL contains a critical extension
|
||
that the application cannot process, then the application MUST NOT
|
||
use that CRL to determine the status of certificates. However,
|
||
applications may ignore unrecognized non-critical extensions. The
|
||
following subsections present those extensions used within Internet
|
||
CRLs. Communities may elect to include extensions in CRLs that are
|
||
not defined in this specification. However, caution should be
|
||
exercised in adopting any critical extensions in CRLs that might be
|
||
used in a general context.
|
||
|
||
Conforming CRL issuers are REQUIRED to include the authority key
|
||
identifier (Section 5.2.1) and the CRL number (Section 5.2.3)
|
||
extensions in all CRLs issued.
|
||
|
||
5.2.1. Authority Key Identifier
|
||
|
||
The authority key identifier extension provides a means of
|
||
identifying the public key corresponding to the private key used to
|
||
sign a CRL. The identification can be based on either the key
|
||
identifier (the subject key identifier in the CRL signer's
|
||
certificate) or the issuer name and serial number. This extension is
|
||
especially useful where an issuer has more than one signing key,
|
||
either due to multiple concurrent key pairs or due to changeover.
|
||
|
||
Conforming CRL issuers MUST use the key identifier method, and MUST
|
||
include this extension in all CRLs issued.
|
||
|
||
The syntax for this CRL extension is defined in Section 4.2.1.1.
|
||
|
||
5.2.2. Issuer Alternative Name
|
||
|
||
The issuer alternative name extension allows additional identities to
|
||
be associated with the issuer of the CRL. Defined options include an
|
||
electronic mail address (rfc822Name), a DNS name, an IP address, and
|
||
a URI. Multiple instances of a name form and multiple name forms may
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 60]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
be included. Whenever such identities are used, the issuer
|
||
alternative name extension MUST be used; however, a DNS name MAY be
|
||
represented in the issuer field using the domainComponent attribute
|
||
as described in Section 4.1.2.4.
|
||
|
||
Conforming CRL issuers SHOULD mark the issuerAltName extension as
|
||
non-critical.
|
||
|
||
The OID and syntax for this CRL extension are defined in Section
|
||
4.2.1.7.
|
||
|
||
5.2.3. CRL Number
|
||
|
||
The CRL number is a non-critical CRL extension that conveys a
|
||
monotonically increasing sequence number for a given CRL scope and
|
||
CRL issuer. This extension allows users to easily determine when a
|
||
particular CRL supersedes another CRL. CRL numbers also support the
|
||
identification of complementary complete CRLs and delta CRLs. CRL
|
||
issuers conforming to this profile MUST include this extension in all
|
||
CRLs and MUST mark this extension as non-critical.
|
||
|
||
If a CRL issuer generates delta CRLs in addition to complete CRLs for
|
||
a given scope, the complete CRLs and delta CRLs MUST share one
|
||
numbering sequence. If a delta CRL and a complete CRL that cover the
|
||
same scope are issued at the same time, they MUST have the same CRL
|
||
number and provide the same revocation information. That is, the
|
||
combination of the delta CRL and an acceptable complete CRL MUST
|
||
provide the same revocation information as the simultaneously issued
|
||
complete CRL.
|
||
|
||
If a CRL issuer generates two CRLs (two complete CRLs, two delta
|
||
CRLs, or a complete CRL and a delta CRL) for the same scope at
|
||
different times, the two CRLs MUST NOT have the same CRL number.
|
||
That is, if the this update field (Section 5.1.2.4) in the two CRLs
|
||
are not identical, the CRL numbers MUST be different.
|
||
|
||
Given the requirements above, CRL numbers can be expected to contain
|
||
long integers. CRL verifiers MUST be able to handle CRLNumber values
|
||
up to 20 octets. Conforming CRL issuers MUST NOT use CRLNumber
|
||
values longer than 20 octets.
|
||
|
||
id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 }
|
||
|
||
CRLNumber ::= INTEGER (0..MAX)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 61]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
5.2.4. Delta CRL Indicator
|
||
|
||
The delta CRL indicator is a critical CRL extension that identifies a
|
||
CRL as being a delta CRL. Delta CRLs contain updates to revocation
|
||
information previously distributed, rather than all the information
|
||
that would appear in a complete CRL. The use of delta CRLs can
|
||
significantly reduce network load and processing time in some
|
||
environments. Delta CRLs are generally smaller than the CRLs they
|
||
update, so applications that obtain delta CRLs consume less network
|
||
bandwidth than applications that obtain the corresponding complete
|
||
CRLs. Applications that store revocation information in a format
|
||
other than the CRL structure can add new revocation information to
|
||
the local database without reprocessing information.
|
||
|
||
The delta CRL indicator extension contains the single value of type
|
||
BaseCRLNumber. The CRL number identifies the CRL, complete for a
|
||
given scope, that was used as the starting point in the generation of
|
||
this delta CRL. A conforming CRL issuer MUST publish the referenced
|
||
base CRL as a complete CRL. The delta CRL contains all updates to
|
||
the revocation status for that same scope. The combination of a
|
||
delta CRL plus the referenced base CRL is equivalent to a complete
|
||
CRL, for the applicable scope, at the time of publication of the
|
||
delta CRL.
|
||
|
||
When a conforming CRL issuer generates a delta CRL, the delta CRL
|
||
MUST include a critical delta CRL indicator extension.
|
||
|
||
When a delta CRL is issued, it MUST cover the same set of reasons and
|
||
the same set of certificates that were covered by the base CRL it
|
||
references. That is, the scope of the delta CRL MUST be the same as
|
||
the scope of the complete CRL referenced as the base. The referenced
|
||
base CRL and the delta CRL MUST omit the issuing distribution point
|
||
extension or contain identical issuing distribution point extensions.
|
||
Further, the CRL issuer MUST use the same private key to sign the
|
||
delta CRL and any complete CRL that it can be used to update.
|
||
|
||
An application that supports delta CRLs can construct a CRL that is
|
||
complete for a given scope by combining a delta CRL for that scope
|
||
with either an issued CRL that is complete for that scope or a
|
||
locally constructed CRL that is complete for that scope.
|
||
|
||
When a delta CRL is combined with a complete CRL or a locally
|
||
constructed CRL, the resulting locally constructed CRL has the CRL
|
||
number specified in the CRL number extension found in the delta CRL
|
||
used in its construction. In addition, the resulting locally
|
||
constructed CRL has the thisUpdate and nextUpdate times specified in
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 62]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
the corresponding fields of the delta CRL used in its construction.
|
||
In addition, the locally constructed CRL inherits the issuing
|
||
distribution point from the delta CRL.
|
||
|
||
A complete CRL and a delta CRL MAY be combined if the following four
|
||
conditions are satisfied:
|
||
|
||
(a) The complete CRL and delta CRL have the same issuer.
|
||
|
||
(b) The complete CRL and delta CRL have the same scope. The two
|
||
CRLs have the same scope if either of the following
|
||
conditions are met:
|
||
|
||
(1) The issuingDistributionPoint extension is omitted from
|
||
both the complete CRL and the delta CRL.
|
||
|
||
(2) The issuingDistributionPoint extension is present in both
|
||
the complete CRL and the delta CRL, and the values for
|
||
each of the fields in the extensions are the same in both
|
||
CRLs.
|
||
|
||
(c) The CRL number of the complete CRL is equal to or greater
|
||
than the BaseCRLNumber specified in the delta CRL. That is,
|
||
the complete CRL contains (at a minimum) all the revocation
|
||
information held by the referenced base CRL.
|
||
|
||
(d) The CRL number of the complete CRL is less than the CRL
|
||
number of the delta CRL. That is, the delta CRL follows the
|
||
complete CRL in the numbering sequence.
|
||
|
||
CRL issuers MUST ensure that the combination of a delta CRL and any
|
||
appropriate complete CRL accurately reflects the current revocation
|
||
status. The CRL issuer MUST include an entry in the delta CRL for
|
||
each certificate within the scope of the delta CRL whose status has
|
||
changed since the generation of the referenced base CRL:
|
||
|
||
(a) If the certificate is revoked for a reason included in the
|
||
scope of the CRL, list the certificate as revoked.
|
||
|
||
(b) If the certificate is valid and was listed on the referenced
|
||
base CRL or any subsequent CRL with reason code
|
||
certificateHold, and the reason code certificateHold is
|
||
included in the scope of the CRL, list the certificate with
|
||
the reason code removeFromCRL.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 63]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(c) If the certificate is revoked for a reason outside the scope
|
||
of the CRL, but the certificate was listed on the referenced
|
||
base CRL or any subsequent CRL with a reason code included in
|
||
the scope of this CRL, list the certificate as revoked but
|
||
omit the reason code.
|
||
|
||
(d) If the certificate is revoked for a reason outside the scope
|
||
of the CRL and the certificate was neither listed on the
|
||
referenced base CRL nor any subsequent CRL with a reason code
|
||
included in the scope of this CRL, do not list the
|
||
certificate on this CRL.
|
||
|
||
The status of a certificate is considered to have changed if it is
|
||
revoked (for any revocation reason, including certificateHold), if it
|
||
is released from hold, or if its revocation reason changes.
|
||
|
||
It is appropriate to list a certificate with reason code
|
||
removeFromCRL on a delta CRL even if the certificate was not on hold
|
||
in the referenced base CRL. If the certificate was placed on hold in
|
||
any CRL issued after the base but before this delta CRL and then
|
||
released from hold, it MUST be listed on the delta CRL with
|
||
revocation reason removeFromCRL.
|
||
|
||
A CRL issuer MAY optionally list a certificate on a delta CRL with
|
||
reason code removeFromCRL if the notAfter time specified in the
|
||
certificate precedes the thisUpdate time specified in the delta CRL
|
||
and the certificate was listed on the referenced base CRL or in any
|
||
CRL issued after the base but before this delta CRL.
|
||
|
||
If a certificate revocation notice first appears on a delta CRL, then
|
||
it is possible for the certificate validity period to expire before
|
||
the next complete CRL for the same scope is issued. In this case,
|
||
the revocation notice MUST be included in all subsequent delta CRLs
|
||
until the revocation notice is included on at least one explicitly
|
||
issued complete CRL for this scope.
|
||
|
||
An application that supports delta CRLs MUST be able to construct a
|
||
current complete CRL by combining a previously issued complete CRL
|
||
and the most current delta CRL. An application that supports delta
|
||
CRLs MAY also be able to construct a current complete CRL by
|
||
combining a previously locally constructed complete CRL and the
|
||
current delta CRL. A delta CRL is considered to be the current one
|
||
if the current time is between the times contained in the thisUpdate
|
||
and nextUpdate fields. Under some circumstances, the CRL issuer may
|
||
publish one or more delta CRLs before the time indicated by the
|
||
nextUpdate field. If more than one current delta CRL for a given
|
||
scope is encountered, the application SHOULD consider the one with
|
||
the latest value in thisUpdate to be the most current one.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 64]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 }
|
||
|
||
BaseCRLNumber ::= CRLNumber
|
||
|
||
5.2.5. Issuing Distribution Point
|
||
|
||
The issuing distribution point is a critical CRL extension that
|
||
identifies the CRL distribution point and scope for a particular CRL,
|
||
and it indicates whether the CRL covers revocation for end entity
|
||
certificates only, CA certificates only, attribute certificates only,
|
||
or a limited set of reason codes. Although the extension is
|
||
critical, conforming implementations are not required to support this
|
||
extension. However, implementations that do not support this
|
||
extension MUST either treat the status of any certificate not listed
|
||
on this CRL as unknown or locate another CRL that does not contain
|
||
any unrecognized critical extensions.
|
||
|
||
The CRL is signed using the CRL issuer's private key. CRL
|
||
distribution points do not have their own key pairs. If the CRL is
|
||
stored in the X.500 directory, it is stored in the directory entry
|
||
corresponding to the CRL distribution point, which may be different
|
||
from the directory entry of the CRL issuer.
|
||
|
||
The reason codes associated with a distribution point MUST be
|
||
specified in onlySomeReasons. If onlySomeReasons does not appear,
|
||
the distribution point MUST contain revocations for all reason codes.
|
||
CAs may use CRL distribution points to partition the CRL on the basis
|
||
of compromise and routine revocation. In this case, the revocations
|
||
with reason code keyCompromise (1), cACompromise (2), and
|
||
aACompromise (8) appear in one distribution point, and the
|
||
revocations with other reason codes appear in another distribution
|
||
point.
|
||
|
||
If a CRL includes an issuingDistributionPoint extension with
|
||
onlySomeReasons present, then every certificate in the scope of the
|
||
CRL that is revoked MUST be assigned a revocation reason other than
|
||
unspecified. The assigned revocation reason is used to determine on
|
||
which CRL(s) to list the revoked certificate, however, there is no
|
||
requirement to include the reasonCode CRL entry extension in the
|
||
corresponding CRL entry.
|
||
|
||
The syntax and semantics for the distributionPoint field are the same
|
||
as for the distributionPoint field in the cRLDistributionPoints
|
||
extension (Section 4.2.1.13). If the distributionPoint field is
|
||
present, then it MUST include at least one of names from the
|
||
corresponding distributionPoint field of the cRLDistributionPoints
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 65]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
extension of every certificate that is within the scope of this CRL.
|
||
The identical encoding MUST be used in the distributionPoint fields
|
||
of the certificate and the CRL.
|
||
|
||
If the distributionPoint field is absent, the CRL MUST contain
|
||
entries for all revoked unexpired certificates issued by the CRL
|
||
issuer, if any, within the scope of the CRL.
|
||
|
||
If the scope of the CRL only includes certificates issued by the CRL
|
||
issuer, then the indirectCRL boolean MUST be set to FALSE.
|
||
Otherwise, if the scope of the CRL includes certificates issued by
|
||
one or more authorities other than the CRL issuer, the indirectCRL
|
||
boolean MUST be set to TRUE. The authority responsible for each
|
||
entry is indicated by the certificate issuer CRL entry extension
|
||
(Section 5.3.3).
|
||
|
||
If the scope of the CRL only includes end entity public key
|
||
certificates, then onlyContainsUserCerts MUST be set to TRUE. If the
|
||
scope of the CRL only includes CA certificates, then
|
||
onlyContainsCACerts MUST be set to TRUE. If either
|
||
onlyContainsUserCerts or onlyContainsCACerts is set to TRUE, then the
|
||
scope of the CRL MUST NOT include any version 1 or version 2
|
||
certificates. Conforming CRLs issuers MUST set the
|
||
onlyContainsAttributeCerts boolean to FALSE.
|
||
|
||
Conforming CRLs issuers MUST NOT issue CRLs where the DER encoding of
|
||
the issuing distribution point extension is an empty sequence. That
|
||
is, if onlyContainsUserCerts, onlyContainsCACerts, indirectCRL, and
|
||
onlyContainsAttributeCerts are all FALSE, then either the
|
||
distributionPoint field or the onlySomeReasons field MUST be present.
|
||
|
||
id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }
|
||
|
||
IssuingDistributionPoint ::= SEQUENCE {
|
||
distributionPoint [0] DistributionPointName OPTIONAL,
|
||
onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE,
|
||
onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE,
|
||
onlySomeReasons [3] ReasonFlags OPTIONAL,
|
||
indirectCRL [4] BOOLEAN DEFAULT FALSE,
|
||
onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
|
||
|
||
-- at most one of onlyContainsUserCerts, onlyContainsCACerts,
|
||
-- and onlyContainsAttributeCerts may be set to TRUE.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 66]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
5.2.6. Freshest CRL (a.k.a. Delta CRL Distribution Point)
|
||
|
||
The freshest CRL extension identifies how delta CRL information for
|
||
this complete CRL is obtained. Conforming CRL issuers MUST mark this
|
||
extension as non-critical. This extension MUST NOT appear in delta
|
||
CRLs.
|
||
|
||
The same syntax is used for this extension as the
|
||
cRLDistributionPoints certificate extension, and is described in
|
||
Section 4.2.1.13. However, only the distribution point field is
|
||
meaningful in this context. The reasons and cRLIssuer fields MUST be
|
||
omitted from this CRL extension.
|
||
|
||
Each distribution point name provides the location at which a delta
|
||
CRL for this complete CRL can be found. The scope of these delta
|
||
CRLs MUST be the same as the scope of this complete CRL. The
|
||
contents of this CRL extension are only used to locate delta CRLs;
|
||
the contents are not used to validate the CRL or the referenced delta
|
||
CRLs. The encoding conventions defined for distribution points in
|
||
Section 4.2.1.13 apply to this extension.
|
||
|
||
id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 }
|
||
|
||
FreshestCRL ::= CRLDistributionPoints
|
||
|
||
5.2.7. Authority Information Access
|
||
|
||
This section defines the use of the Authority Information Access
|
||
extension in a CRL. The syntax and semantics defined in Section
|
||
4.2.2.1 for the certificate extension are also used for the CRL
|
||
extension.
|
||
|
||
This CRL extension MUST be marked as non-critical.
|
||
|
||
When present in a CRL, this extension MUST include at least one
|
||
AccessDescription specifying id-ad-caIssuers as the accessMethod.
|
||
The id-ad-caIssuers OID is used when the information available lists
|
||
certificates that can be used to verify the signature on the CRL
|
||
(i.e., certificates that have a subject name that matches the issuer
|
||
name on the CRL and that have a subject public key that corresponds
|
||
to the private key used to sign the CRL). Access method types other
|
||
than id-ad-caIssuers MUST NOT be included. At least one instance of
|
||
AccessDescription SHOULD specify an accessLocation that is an HTTP
|
||
[RFC2616] or LDAP [RFC4516] URI.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 67]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Where the information is available via HTTP or FTP, accessLocation
|
||
MUST be a uniformResourceIdentifier and the URI MUST point to either
|
||
a single DER encoded certificate as specified in [RFC2585] or a
|
||
collection of certificates in a BER or DER encoded "certs-only" CMS
|
||
message as specified in [RFC2797].
|
||
|
||
Conforming applications that support HTTP or FTP for accessing
|
||
certificates MUST be able to accept individual DER encoded
|
||
certificates and SHOULD be able to accept "certs-only" CMS messages.
|
||
|
||
HTTP server implementations accessed via the URI SHOULD specify the
|
||
media type application/pkix-cert [RFC2585] in the content-type header
|
||
field of the response for a single DER encoded certificate and SHOULD
|
||
specify the media type application/pkcs7-mime [RFC2797] in the
|
||
content-type header field of the response for "certs-only" CMS
|
||
messages. For FTP, the name of a file that contains a single DER
|
||
encoded certificate SHOULD have a suffix of ".cer" [RFC2585] and the
|
||
name of a file that contains a "certs-only" CMS message SHOULD have a
|
||
suffix of ".p7c" [RFC2797]. Consuming clients may use the media type
|
||
or file extension as a hint to the content, but should not depend
|
||
solely on the presence of the correct media type or file extension in
|
||
the server response.
|
||
|
||
When the accessLocation is a directoryName, the information is to be
|
||
obtained by the application from whatever directory server is locally
|
||
configured. When one CA public key is used to validate signatures on
|
||
certificates and CRLs, the desired CA certificate is stored in the
|
||
crossCertificatePair and/or cACertificate attributes as specified in
|
||
[RFC4523]. When different public keys are used to validate
|
||
signatures on certificates and CRLs, the desired certificate is
|
||
stored in the userCertificate attribute as specified in [RFC4523].
|
||
Thus, implementations that support the directoryName form of
|
||
accessLocation MUST be prepared to find the needed certificate in any
|
||
of these three attributes. The protocol that an application uses to
|
||
access the directory (e.g., DAP or LDAP) is a local matter.
|
||
|
||
Where the information is available via LDAP, the accessLocation
|
||
SHOULD be a uniformResourceIdentifier. The LDAP URI [RFC4516] MUST
|
||
include a <dn> field containing the distinguished name of the entry
|
||
holding the certificates, MUST include an <attributes> field that
|
||
lists appropriate attribute descriptions for the attributes that hold
|
||
the DER encoded certificates or cross-certificate pairs [RFC4523],
|
||
and SHOULD include a <host> (e.g., <ldap://ldap.example.com/cn=CA,
|
||
dc=example,dc=com?cACertificate;binary,crossCertificatePair;binary>).
|
||
Omitting the <host> (e.g., <ldap:///cn=exampleCA,dc=example,dc=com?
|
||
cACertificate;binary>) has the effect of relying on whatever a priori
|
||
knowledge the client might have to contact an appropriate server.
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 68]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
5.3. CRL Entry Extensions
|
||
|
||
The CRL entry extensions defined by ISO/IEC, ITU-T, and ANSI X9 for
|
||
X.509 v2 CRLs provide methods for associating additional attributes
|
||
with CRL entries [X.509] [X9.55]. The X.509 v2 CRL format also
|
||
allows communities to define private CRL entry extensions to carry
|
||
information unique to those communities. Each extension in a CRL
|
||
entry may be designated as critical or non-critical. If a CRL
|
||
contains a critical CRL entry extension that the application cannot
|
||
process, then the application MUST NOT use that CRL to determine the
|
||
status of any certificates. However, applications may ignore
|
||
unrecognized non-critical CRL entry extensions.
|
||
|
||
The following subsections present recommended extensions used within
|
||
Internet CRL entries and standard locations for information.
|
||
Communities may elect to use additional CRL entry extensions;
|
||
however, caution should be exercised in adopting any critical CRL
|
||
entry extensions in CRLs that might be used in a general context.
|
||
|
||
Support for the CRL entry extensions defined in this specification is
|
||
optional for conforming CRL issuers and applications. However, CRL
|
||
issuers SHOULD include reason codes (Section 5.3.1) and invalidity
|
||
dates (Section 5.3.2) whenever this information is available.
|
||
|
||
5.3.1. Reason Code
|
||
|
||
The reasonCode is a non-critical CRL entry extension that identifies
|
||
the reason for the certificate revocation. CRL issuers are strongly
|
||
encouraged to include meaningful reason codes in CRL entries;
|
||
however, the reason code CRL entry extension SHOULD be absent instead
|
||
of using the unspecified (0) reasonCode value.
|
||
|
||
The removeFromCRL (8) reasonCode value may only appear in delta CRLs
|
||
and indicates that a certificate is to be removed from a CRL because
|
||
either the certificate expired or was removed from hold. All other
|
||
reason codes may appear in any CRL and indicate that the specified
|
||
certificate should be considered revoked.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 69]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 }
|
||
|
||
-- reasonCode ::= { CRLReason }
|
||
|
||
CRLReason ::= ENUMERATED {
|
||
unspecified (0),
|
||
keyCompromise (1),
|
||
cACompromise (2),
|
||
affiliationChanged (3),
|
||
superseded (4),
|
||
cessationOfOperation (5),
|
||
certificateHold (6),
|
||
-- value 7 is not used
|
||
removeFromCRL (8),
|
||
privilegeWithdrawn (9),
|
||
aACompromise (10) }
|
||
|
||
5.3.2. Invalidity Date
|
||
|
||
The invalidity date is a non-critical CRL entry extension that
|
||
provides the date on which it is known or suspected that the private
|
||
key was compromised or that the certificate otherwise became invalid.
|
||
This date may be earlier than the revocation date in the CRL entry,
|
||
which is the date at which the CA processed the revocation. When a
|
||
revocation is first posted by a CRL issuer in a CRL, the invalidity
|
||
date may precede the date of issue of earlier CRLs, but the
|
||
revocation date SHOULD NOT precede the date of issue of earlier CRLs.
|
||
Whenever this information is available, CRL issuers are strongly
|
||
encouraged to share it with CRL users.
|
||
|
||
The GeneralizedTime values included in this field MUST be expressed
|
||
in Greenwich Mean Time (Zulu), and MUST be specified and interpreted
|
||
as defined in Section 4.1.2.5.2.
|
||
|
||
id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 }
|
||
|
||
InvalidityDate ::= GeneralizedTime
|
||
|
||
5.3.3. Certificate Issuer
|
||
|
||
This CRL entry extension identifies the certificate issuer associated
|
||
with an entry in an indirect CRL, that is, a CRL that has the
|
||
indirectCRL indicator set in its issuing distribution point
|
||
extension. When present, the certificate issuer CRL entry extension
|
||
includes one or more names from the issuer field and/or issuer
|
||
alternative name extension of the certificate that corresponds to the
|
||
CRL entry. If this extension is not present on the first entry in an
|
||
indirect CRL, the certificate issuer defaults to the CRL issuer. On
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 70]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
subsequent entries in an indirect CRL, if this extension is not
|
||
present, the certificate issuer for the entry is the same as that for
|
||
the preceding entry. This field is defined as follows:
|
||
|
||
id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 }
|
||
|
||
CertificateIssuer ::= GeneralNames
|
||
|
||
Conforming CRL issuers MUST include in this extension the
|
||
distinguished name (DN) from the issuer field of the certificate that
|
||
corresponds to this CRL entry. The encoding of the DN MUST be
|
||
identical to the encoding used in the certificate.
|
||
|
||
CRL issuers MUST mark this extension as critical since an
|
||
implementation that ignored this extension could not correctly
|
||
attribute CRL entries to certificates. This specification RECOMMENDS
|
||
that implementations recognize this extension.
|
||
|
||
6. Certification Path Validation
|
||
|
||
Certification path validation procedures for the Internet PKI are
|
||
based on the algorithm supplied in [X.509]. Certification path
|
||
processing verifies the binding between the subject distinguished
|
||
name and/or subject alternative name and subject public key. The
|
||
binding is limited by constraints that are specified in the
|
||
certificates that comprise the path and inputs that are specified by
|
||
the relying party. The basic constraints and policy constraints
|
||
extensions allow the certification path processing logic to automate
|
||
the decision making process.
|
||
|
||
This section describes an algorithm for validating certification
|
||
paths. Conforming implementations of this specification are not
|
||
required to implement this algorithm, but MUST provide functionality
|
||
equivalent to the external behavior resulting from this procedure.
|
||
Any algorithm may be used by a particular implementation so long as
|
||
it derives the correct result.
|
||
|
||
In Section 6.1, the text describes basic path validation. Valid
|
||
paths begin with certificates issued by a trust anchor. The
|
||
algorithm requires the public key of the CA, the CA's name, and any
|
||
constraints upon the set of paths that may be validated using this
|
||
key.
|
||
|
||
The selection of a trust anchor is a matter of policy: it could be
|
||
the top CA in a hierarchical PKI, the CA that issued the verifier's
|
||
own certificate(s), or any other CA in a network PKI. The path
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 71]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
validation procedure is the same regardless of the choice of trust
|
||
anchor. In addition, different applications may rely on different
|
||
trust anchors, or may accept paths that begin with any of a set of
|
||
trust anchors.
|
||
|
||
Section 6.2 describes methods for using the path validation algorithm
|
||
in specific implementations.
|
||
|
||
Section 6.3 describes the steps necessary to determine if a
|
||
certificate is revoked when CRLs are the revocation mechanism used by
|
||
the certificate issuer.
|
||
|
||
6.1. Basic Path Validation
|
||
|
||
This text describes an algorithm for X.509 path processing. A
|
||
conforming implementation MUST include an X.509 path processing
|
||
procedure that is functionally equivalent to the external behavior of
|
||
this algorithm. However, support for some of the certificate
|
||
extensions processed in this algorithm are OPTIONAL for compliant
|
||
implementations. Clients that do not support these extensions MAY
|
||
omit the corresponding steps in the path validation algorithm.
|
||
|
||
For example, clients are not required to support the policy mappings
|
||
extension. Clients that do not support this extension MAY omit the
|
||
path validation steps where policy mappings are processed. Note that
|
||
clients MUST reject the certificate if it contains an unsupported
|
||
critical extension.
|
||
|
||
While the certificate and CRL profiles specified in Sections 4 and 5
|
||
of this document specify values for certificate and CRL fields and
|
||
extensions that are considered to be appropriate for the Internet
|
||
PKI, the algorithm presented in this section is not limited to
|
||
accepting certificates and CRLs that conform to these profiles.
|
||
Therefore, the algorithm only includes checks to verify that the
|
||
certification path is valid according to X.509 and does not include
|
||
checks to verify that the certificates and CRLs conform to this
|
||
profile. While the algorithm could be extended to include checks for
|
||
conformance to the profiles in Sections 4 and 5, this profile
|
||
RECOMMENDS against including such checks.
|
||
|
||
The algorithm presented in this section validates the certificate
|
||
with respect to the current date and time. A conforming
|
||
implementation MAY also support validation with respect to some point
|
||
in the past. Note that mechanisms are not available for validating a
|
||
certificate with respect to a time outside the certificate validity
|
||
period.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 72]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
The trust anchor is an input to the algorithm. There is no
|
||
requirement that the same trust anchor be used to validate all
|
||
certification paths. Different trust anchors MAY be used to validate
|
||
different paths, as discussed further in Section 6.2.
|
||
|
||
The primary goal of path validation is to verify the binding between
|
||
a subject distinguished name or a subject alternative name and
|
||
subject public key, as represented in the target certificate, based
|
||
on the public key of the trust anchor. In most cases, the target
|
||
certificate will be an end entity certificate, but the target
|
||
certificate may be a CA certificate as long as the subject public key
|
||
is to be used for a purpose other than verifying the signature on a
|
||
public key certificate. Verifying the binding between the name and
|
||
subject public key requires obtaining a sequence of certificates that
|
||
support that binding. The procedure performed to obtain this
|
||
sequence of certificates is outside the scope of this specification.
|
||
|
||
To meet this goal, the path validation process verifies, among other
|
||
things, that a prospective certification path (a sequence of n
|
||
certificates) satisfies the following conditions:
|
||
|
||
(a) for all x in {1, ..., n-1}, the subject of certificate x is
|
||
the issuer of certificate x+1;
|
||
|
||
(b) certificate 1 is issued by the trust anchor;
|
||
|
||
(c) certificate n is the certificate to be validated (i.e., the
|
||
target certificate); and
|
||
|
||
(d) for all x in {1, ..., n}, the certificate was valid at the
|
||
time in question.
|
||
|
||
A certificate MUST NOT appear more than once in a prospective
|
||
certification path.
|
||
|
||
When the trust anchor is provided in the form of a self-signed
|
||
certificate, this self-signed certificate is not included as part of
|
||
the prospective certification path. Information about trust anchors
|
||
is provided as inputs to the certification path validation algorithm
|
||
(Section 6.1.1).
|
||
|
||
A particular certification path may not, however, be appropriate for
|
||
all applications. Therefore, an application MAY augment this
|
||
algorithm to further limit the set of valid paths. The path
|
||
validation process also determines the set of certificate policies
|
||
that are valid for this path, based on the certificate policies
|
||
extension, policy mappings extension, policy constraints extension,
|
||
and inhibit anyPolicy extension. To achieve this, the path
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 73]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
validation algorithm constructs a valid policy tree. If the set of
|
||
certificate policies that are valid for this path is not empty, then
|
||
the result will be a valid policy tree of depth n, otherwise the
|
||
result will be a null valid policy tree.
|
||
|
||
A certificate is self-issued if the same DN appears in the subject
|
||
and issuer fields (the two DNs are the same if they match according
|
||
to the rules specified in Section 7.1). In general, the issuer and
|
||
subject of the certificates that make up a path are different for
|
||
each certificate. However, a CA may issue a certificate to itself to
|
||
support key rollover or changes in certificate policies. These
|
||
self-issued certificates are not counted when evaluating path length
|
||
or name constraints.
|
||
|
||
This section presents the algorithm in four basic steps: (1)
|
||
initialization, (2) basic certificate processing, (3) preparation for
|
||
the next certificate, and (4) wrap-up. Steps (1) and (4) are
|
||
performed exactly once. Step (2) is performed for all certificates
|
||
in the path. Step (3) is performed for all certificates in the path
|
||
except the final certificate. Figure 2 provides a high-level
|
||
flowchart of this algorithm.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 74]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
+-------+
|
||
| START |
|
||
+-------+
|
||
|
|
||
V
|
||
+----------------+
|
||
| Initialization |
|
||
+----------------+
|
||
|
|
||
+<--------------------+
|
||
| |
|
||
V |
|
||
+----------------+ |
|
||
| Process Cert | |
|
||
+----------------+ |
|
||
| |
|
||
V |
|
||
+================+ |
|
||
| IF Last Cert | |
|
||
| in Path | |
|
||
+================+ |
|
||
| | |
|
||
THEN | | ELSE |
|
||
V V |
|
||
+----------------+ +----------------+ |
|
||
| Wrap up | | Prepare for | |
|
||
+----------------+ | Next Cert | |
|
||
| +----------------+ |
|
||
V | |
|
||
+-------+ +--------------+
|
||
| STOP |
|
||
+-------+
|
||
|
||
Figure 2. Certification Path Processing Flowchart
|
||
|
||
6.1.1. Inputs
|
||
|
||
This algorithm assumes that the following nine inputs are provided to
|
||
the path processing logic:
|
||
|
||
(a) a prospective certification path of length n.
|
||
|
||
(b) the current date/time.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 75]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(c) user-initial-policy-set: A set of certificate policy
|
||
identifiers naming the policies that are acceptable to the
|
||
certificate user. The user-initial-policy-set contains the
|
||
special value any-policy if the user is not concerned about
|
||
certificate policy.
|
||
|
||
(d) trust anchor information, describing a CA that serves as a
|
||
trust anchor for the certification path. The trust anchor
|
||
information includes:
|
||
|
||
(1) the trusted issuer name,
|
||
|
||
(2) the trusted public key algorithm,
|
||
|
||
(3) the trusted public key, and
|
||
|
||
(4) optionally, the trusted public key parameters associated
|
||
with the public key.
|
||
|
||
The trust anchor information may be provided to the path
|
||
processing procedure in the form of a self-signed certificate.
|
||
When the trust anchor information is provided in the form of a
|
||
certificate, the name in the subject field is used as the trusted
|
||
issuer name and the contents of the subjectPublicKeyInfo field is
|
||
used as the source of the trusted public key algorithm and the
|
||
trusted public key. The trust anchor information is trusted
|
||
because it was delivered to the path processing procedure by some
|
||
trustworthy out-of-band procedure. If the trusted public key
|
||
algorithm requires parameters, then the parameters are provided
|
||
along with the trusted public key.
|
||
|
||
(e) initial-policy-mapping-inhibit, which indicates if policy
|
||
mapping is allowed in the certification path.
|
||
|
||
(f) initial-explicit-policy, which indicates if the path must be
|
||
valid for at least one of the certificate policies in the
|
||
user-initial-policy-set.
|
||
|
||
(g) initial-any-policy-inhibit, which indicates whether the
|
||
anyPolicy OID should be processed if it is included in a
|
||
certificate.
|
||
|
||
(h) initial-permitted-subtrees, which indicates for each name
|
||
type (e.g., X.500 distinguished names, email addresses, or IP
|
||
addresses) a set of subtrees within which all subject names
|
||
in every certificate in the certification path MUST fall.
|
||
The initial-permitted-subtrees input includes a set for each
|
||
name type. For each name type, the set may consist of a
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 76]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
single subtree that includes all names of that name type or
|
||
one or more subtrees that each specifies a subset of the
|
||
names of that name type, or the set may be empty. If the set
|
||
for a name type is empty, then the certification path will be
|
||
considered invalid if any certificate in the certification
|
||
path includes a name of that name type.
|
||
|
||
(i) initial-excluded-subtrees, which indicates for each name type
|
||
(e.g., X.500 distinguished names, email addresses, or IP
|
||
addresses) a set of subtrees within which no subject name in
|
||
any certificate in the certification path may fall. The
|
||
initial-excluded-subtrees input includes a set for each name
|
||
type. For each name type, the set may be empty or may
|
||
consist of one or more subtrees that each specifies a subset
|
||
of the names of that name type. If the set for a name type
|
||
is empty, then no names of that name type are excluded.
|
||
|
||
Conforming implementations are not required to support the setting of
|
||
all of these inputs. For example, a conforming implementation may be
|
||
designed to validate all certification paths using a value of FALSE
|
||
for initial-any-policy-inhibit.
|
||
|
||
6.1.2. Initialization
|
||
|
||
This initialization phase establishes eleven state variables based
|
||
upon the nine inputs:
|
||
|
||
(a) valid_policy_tree: A tree of certificate policies with their
|
||
optional qualifiers; each of the leaves of the tree
|
||
represents a valid policy at this stage in the certification
|
||
path validation. If valid policies exist at this stage in
|
||
the certification path validation, the depth of the tree is
|
||
equal to the number of certificates in the chain that have
|
||
been processed. If valid policies do not exist at this stage
|
||
in the certification path validation, the tree is set to
|
||
NULL. Once the tree is set to NULL, policy processing
|
||
ceases.
|
||
|
||
Each node in the valid_policy_tree includes three data
|
||
objects: the valid policy, a set of associated policy
|
||
qualifiers, and a set of one or more expected policy values.
|
||
If the node is at depth x, the components of the node have
|
||
the following semantics:
|
||
|
||
(1) The valid_policy is a single policy OID representing a
|
||
valid policy for the path of length x.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 77]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(2) The qualifier_set is a set of policy qualifiers associated
|
||
with the valid policy in certificate x.
|
||
|
||
(3) The expected_policy_set contains one or more policy OIDs
|
||
that would satisfy this policy in the certificate x+1.
|
||
|
||
The initial value of the valid_policy_tree is a single node with
|
||
valid_policy anyPolicy, an empty qualifier_set, and an
|
||
expected_policy_set with the single value anyPolicy. This node is
|
||
considered to be at depth zero.
|
||
|
||
Figure 3 is a graphic representation of the initial state of the
|
||
valid_policy_tree. Additional figures will use this format to
|
||
describe changes in the valid_policy_tree during path processing.
|
||
|
||
+----------------+
|
||
| anyPolicy | <---- valid_policy
|
||
+----------------+
|
||
| {} | <---- qualifier_set
|
||
+----------------+
|
||
| {anyPolicy} | <---- expected_policy_set
|
||
+----------------+
|
||
|
||
Figure 3. Initial Value of the valid_policy_tree State Variable
|
||
|
||
(b) permitted_subtrees: a set of root names for each name type
|
||
(e.g., X.500 distinguished names, email addresses, or IP
|
||
addresses) defining a set of subtrees within which all
|
||
subject names in subsequent certificates in the certification
|
||
path MUST fall. This variable includes a set for each name
|
||
type, and the initial value is initial-permitted-subtrees.
|
||
|
||
(c) excluded_subtrees: a set of root names for each name type
|
||
(e.g., X.500 distinguished names, email addresses, or IP
|
||
addresses) defining a set of subtrees within which no subject
|
||
name in subsequent certificates in the certification path may
|
||
fall. This variable includes a set for each name type, and
|
||
the initial value is initial-excluded-subtrees.
|
||
|
||
(d) explicit_policy: an integer that indicates if a non-NULL
|
||
valid_policy_tree is required. The integer indicates the
|
||
number of non-self-issued certificates to be processed before
|
||
this requirement is imposed. Once set, this variable may be
|
||
decreased, but may not be increased. That is, if a
|
||
certificate in the path requires a non-NULL
|
||
valid_policy_tree, a later certificate cannot remove this
|
||
requirement. If initial-explicit-policy is set, then the
|
||
initial value is 0, otherwise the initial value is n+1.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 78]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(e) inhibit_anyPolicy: an integer that indicates whether the
|
||
anyPolicy policy identifier is considered a match. The
|
||
integer indicates the number of non-self-issued certificates
|
||
to be processed before the anyPolicy OID, if asserted in a
|
||
certificate other than an intermediate self-issued
|
||
certificate, is ignored. Once set, this variable may be
|
||
decreased, but may not be increased. That is, if a
|
||
certificate in the path inhibits processing of anyPolicy, a
|
||
later certificate cannot permit it. If initial-any-policy-
|
||
inhibit is set, then the initial value is 0, otherwise the
|
||
initial value is n+1.
|
||
|
||
(f) policy_mapping: an integer that indicates if policy mapping
|
||
is permitted. The integer indicates the number of non-self-
|
||
issued certificates to be processed before policy mapping is
|
||
inhibited. Once set, this variable may be decreased, but may
|
||
not be increased. That is, if a certificate in the path
|
||
specifies that policy mapping is not permitted, it cannot be
|
||
overridden by a later certificate. If initial-policy-
|
||
mapping-inhibit is set, then the initial value is 0,
|
||
otherwise the initial value is n+1.
|
||
|
||
(g) working_public_key_algorithm: the digital signature
|
||
algorithm used to verify the signature of a certificate. The
|
||
working_public_key_algorithm is initialized from the trusted
|
||
public key algorithm provided in the trust anchor
|
||
information.
|
||
|
||
(h) working_public_key: the public key used to verify the
|
||
signature of a certificate. The working_public_key is
|
||
initialized from the trusted public key provided in the trust
|
||
anchor information.
|
||
|
||
(i) working_public_key_parameters: parameters associated with
|
||
the current public key that may be required to verify a
|
||
signature (depending upon the algorithm). The
|
||
working_public_key_parameters variable is initialized from
|
||
the trusted public key parameters provided in the trust
|
||
anchor information.
|
||
|
||
(j) working_issuer_name: the issuer distinguished name expected
|
||
in the next certificate in the chain. The
|
||
working_issuer_name is initialized to the trusted issuer name
|
||
provided in the trust anchor information.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 79]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(k) max_path_length: this integer is initialized to n, is
|
||
decremented for each non-self-issued certificate in the path,
|
||
and may be reduced to the value in the path length constraint
|
||
field within the basic constraints extension of a CA
|
||
certificate.
|
||
|
||
Upon completion of the initialization steps, perform the basic
|
||
certificate processing steps specified in 6.1.3.
|
||
|
||
6.1.3. Basic Certificate Processing
|
||
|
||
The basic path processing actions to be performed for certificate i
|
||
(for all i in [1..n]) are listed below.
|
||
|
||
(a) Verify the basic certificate information. The certificate
|
||
MUST satisfy each of the following:
|
||
|
||
(1) The signature on the certificate can be verified using
|
||
working_public_key_algorithm, the working_public_key, and
|
||
the working_public_key_parameters.
|
||
|
||
(2) The certificate validity period includes the current time.
|
||
|
||
(3) At the current time, the certificate is not revoked. This
|
||
may be determined by obtaining the appropriate CRL
|
||
(Section 6.3), by status information, or by out-of-band
|
||
mechanisms.
|
||
|
||
(4) The certificate issuer name is the working_issuer_name.
|
||
|
||
(b) If certificate i is self-issued and it is not the final
|
||
certificate in the path, skip this step for certificate i.
|
||
Otherwise, verify that the subject name is within one of the
|
||
permitted_subtrees for X.500 distinguished names, and verify
|
||
that each of the alternative names in the subjectAltName
|
||
extension (critical or non-critical) is within one of the
|
||
permitted_subtrees for that name type.
|
||
|
||
(c) If certificate i is self-issued and it is not the final
|
||
certificate in the path, skip this step for certificate i.
|
||
Otherwise, verify that the subject name is not within any of
|
||
the excluded_subtrees for X.500 distinguished names, and
|
||
verify that each of the alternative names in the
|
||
subjectAltName extension (critical or non-critical) is not
|
||
within any of the excluded_subtrees for that name type.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 80]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(d) If the certificate policies extension is present in the
|
||
certificate and the valid_policy_tree is not NULL, process
|
||
the policy information by performing the following steps in
|
||
order:
|
||
|
||
(1) For each policy P not equal to anyPolicy in the
|
||
certificate policies extension, let P-OID denote the OID
|
||
for policy P and P-Q denote the qualifier set for policy
|
||
P. Perform the following steps in order:
|
||
|
||
(i) For each node of depth i-1 in the valid_policy_tree
|
||
where P-OID is in the expected_policy_set, create a
|
||
child node as follows: set the valid_policy to P-OID,
|
||
set the qualifier_set to P-Q, and set the
|
||
expected_policy_set to
|
||
{P-OID}.
|
||
|
||
For example, consider a valid_policy_tree with a node
|
||
of depth i-1 where the expected_policy_set is {Gold,
|
||
White}. Assume the certificate policies Gold and
|
||
Silver appear in the certificate policies extension of
|
||
certificate i. The Gold policy is matched, but the
|
||
Silver policy is not. This rule will generate a child
|
||
node of depth i for the Gold policy. The result is
|
||
shown as Figure 4.
|
||
|
||
+-----------------+
|
||
| Red |
|
||
+-----------------+
|
||
| {} |
|
||
+-----------------+ node of depth i-1
|
||
| {Gold, White} |
|
||
+-----------------+
|
||
|
|
||
|
|
||
|
|
||
V
|
||
+-----------------+
|
||
| Gold |
|
||
+-----------------+
|
||
| {} |
|
||
+-----------------+ node of depth i
|
||
| {Gold} |
|
||
+-----------------+
|
||
|
||
Figure 4. Processing an Exact Match
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 81]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(ii) If there was no match in step (i) and the
|
||
valid_policy_tree includes a node of depth i-1 with
|
||
the valid_policy anyPolicy, generate a child node with
|
||
the following values: set the valid_policy to P-OID,
|
||
set the qualifier_set to P-Q, and set the
|
||
expected_policy_set to {P-OID}.
|
||
|
||
For example, consider a valid_policy_tree with a node
|
||
of depth i-1 where the valid_policy is anyPolicy.
|
||
Assume the certificate policies Gold and Silver appear
|
||
in the certificate policies extension of certificate
|
||
i. The Gold policy does not have a qualifier, but the
|
||
Silver policy has the qualifier Q-Silver. If Gold and
|
||
Silver were not matched in (i) above, this rule will
|
||
generate two child nodes of depth i, one for each
|
||
policy. The result is shown as Figure 5.
|
||
|
||
+-----------------+
|
||
| anyPolicy |
|
||
+-----------------+
|
||
| {} |
|
||
+-----------------+ node of depth i-1
|
||
| {anyPolicy} |
|
||
+-----------------+
|
||
/ \
|
||
/ \
|
||
/ \
|
||
/ \
|
||
+-----------------+ +-----------------+
|
||
| Gold | | Silver |
|
||
+-----------------+ +-----------------+
|
||
| {} | | {Q-Silver} |
|
||
+-----------------+ nodes of +-----------------+
|
||
| {Gold} | depth i | {Silver} |
|
||
+-----------------+ +-----------------+
|
||
|
||
Figure 5. Processing Unmatched Policies when a
|
||
Leaf Node Specifies anyPolicy
|
||
|
||
(2) If the certificate policies extension includes the policy
|
||
anyPolicy with the qualifier set AP-Q and either (a)
|
||
inhibit_anyPolicy is greater than 0 or (b) i<n and the
|
||
certificate is self-issued, then:
|
||
|
||
For each node in the valid_policy_tree of depth i-1, for
|
||
each value in the expected_policy_set (including
|
||
anyPolicy) that does not appear in a child node, create a
|
||
child node with the following values: set the valid_policy
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 82]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
to the value from the expected_policy_set in the parent
|
||
node, set the qualifier_set to AP-Q, and set the
|
||
expected_policy_set to the value in the valid_policy from
|
||
this node.
|
||
|
||
For example, consider a valid_policy_tree with a node of
|
||
depth i-1 where the expected_policy_set is {Gold, Silver}.
|
||
Assume anyPolicy appears in the certificate policies
|
||
extension of certificate i with no policy qualifiers, but
|
||
Gold and Silver do not appear. This rule will generate
|
||
two child nodes of depth i, one for each policy. The
|
||
result is shown below as Figure 6.
|
||
|
||
+-----------------+
|
||
| Red |
|
||
+-----------------+
|
||
| {} |
|
||
+-----------------+ node of depth i-1
|
||
| {Gold, Silver} |
|
||
+-----------------+
|
||
/ \
|
||
/ \
|
||
/ \
|
||
/ \
|
||
+-----------------+ +-----------------+
|
||
| Gold | | Silver |
|
||
+-----------------+ +-----------------+
|
||
| {} | | {} |
|
||
+-----------------+ nodes of +-----------------+
|
||
| {Gold} | depth i | {Silver} |
|
||
+-----------------+ +-----------------+
|
||
|
||
Figure 6. Processing Unmatched Policies When the
|
||
Certificate Policies Extension Specifies anyPolicy
|
||
|
||
(3) If there is a node in the valid_policy_tree of depth i-1
|
||
or less without any child nodes, delete that node. Repeat
|
||
this step until there are no nodes of depth i-1 or less
|
||
without children.
|
||
|
||
For example, consider the valid_policy_tree shown in
|
||
Figure 7 below. The two nodes at depth i-1 that are
|
||
marked with an 'X' have no children, and they are deleted.
|
||
Applying this rule to the resulting tree will cause the
|
||
node at depth i-2 that is marked with a 'Y' to be deleted.
|
||
In the resulting tree, there are no nodes of depth i-1 or
|
||
less without children, and this step is complete.
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 83]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(e) If the certificate policies extension is not present, set the
|
||
valid_policy_tree to NULL.
|
||
|
||
(f) Verify that either explicit_policy is greater than 0 or the
|
||
valid_policy_tree is not equal to NULL;
|
||
|
||
If any of steps (a), (b), (c), or (f) fails, the procedure
|
||
terminates, returning a failure indication and an appropriate reason.
|
||
|
||
If i is not equal to n, continue by performing the preparatory steps
|
||
listed in Section 6.1.4. If i is equal to n, perform the wrap-up
|
||
steps listed in Section 6.1.5.
|
||
|
||
+-----------+
|
||
| | node of depth i-3
|
||
+-----------+
|
||
/ | \
|
||
/ | \
|
||
/ | \
|
||
+-----------+ +-----------+ +-----------+
|
||
| | | | | Y | nodes of
|
||
+-----------+ +-----------+ +-----------+ depth i-2
|
||
/ \ | |
|
||
/ \ | |
|
||
/ \ | |
|
||
+-----------+ +-----------+ +-----------+ +-----------+ nodes of
|
||
| | | X | | | | X | depth
|
||
+-----------+ +-----------+ +-----------+ +-----------+ i-1
|
||
| / | \
|
||
| / | \
|
||
| / | \
|
||
+-----------+ +-----------+ +-----------+ +-----------+ nodes of
|
||
| | | | | | | | depth
|
||
+-----------+ +-----------+ +-----------+ +-----------+ i
|
||
|
||
Figure 7. Pruning the valid_policy_tree
|
||
|
||
6.1.4. Preparation for Certificate i+1
|
||
|
||
To prepare for processing of certificate i+1, perform the
|
||
following steps for certificate i:
|
||
|
||
(a) If a policy mappings extension is present, verify that the
|
||
special value anyPolicy does not appear as an
|
||
issuerDomainPolicy or a subjectDomainPolicy.
|
||
|
||
(b) If a policy mappings extension is present, then for each
|
||
issuerDomainPolicy ID-P in the policy mappings extension:
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 84]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(1) If the policy_mapping variable is greater than 0, for each
|
||
node in the valid_policy_tree of depth i where ID-P is the
|
||
valid_policy, set expected_policy_set to the set of
|
||
subjectDomainPolicy values that are specified as
|
||
equivalent to ID-P by the policy mappings extension.
|
||
|
||
If no node of depth i in the valid_policy_tree has a
|
||
valid_policy of ID-P but there is a node of depth i with a
|
||
valid_policy of anyPolicy, then generate a child node of
|
||
the node of depth i-1 that has a valid_policy of anyPolicy
|
||
as follows:
|
||
|
||
(i) set the valid_policy to ID-P;
|
||
|
||
(ii) set the qualifier_set to the qualifier set of the
|
||
policy anyPolicy in the certificate policies
|
||
extension of certificate i; and
|
||
|
||
(iii) set the expected_policy_set to the set of
|
||
subjectDomainPolicy values that are specified as
|
||
equivalent to ID-P by the policy mappings extension.
|
||
|
||
(2) If the policy_mapping variable is equal to 0:
|
||
|
||
(i) delete each node of depth i in the valid_policy_tree
|
||
where ID-P is the valid_policy.
|
||
|
||
(ii) If there is a node in the valid_policy_tree of depth
|
||
i-1 or less without any child nodes, delete that
|
||
node. Repeat this step until there are no nodes of
|
||
depth i-1 or less without children.
|
||
|
||
(c) Assign the certificate subject name to working_issuer_name.
|
||
|
||
(d) Assign the certificate subjectPublicKey to
|
||
working_public_key.
|
||
|
||
(e) If the subjectPublicKeyInfo field of the certificate contains
|
||
an algorithm field with non-null parameters, assign the
|
||
parameters to the working_public_key_parameters variable.
|
||
|
||
If the subjectPublicKeyInfo field of the certificate contains
|
||
an algorithm field with null parameters or parameters are
|
||
omitted, compare the certificate subjectPublicKey algorithm
|
||
to the working_public_key_algorithm. If the certificate
|
||
subjectPublicKey algorithm and the
|
||
working_public_key_algorithm are different, set the
|
||
working_public_key_parameters to null.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 85]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(f) Assign the certificate subjectPublicKey algorithm to the
|
||
working_public_key_algorithm variable.
|
||
|
||
(g) If a name constraints extension is included in the
|
||
certificate, modify the permitted_subtrees and
|
||
excluded_subtrees state variables as follows:
|
||
|
||
(1) If permittedSubtrees is present in the certificate, set
|
||
the permitted_subtrees state variable to the intersection
|
||
of its previous value and the value indicated in the
|
||
extension field. If permittedSubtrees does not include a
|
||
particular name type, the permitted_subtrees state
|
||
variable is unchanged for that name type. For example,
|
||
the intersection of example.com and foo.example.com is
|
||
foo.example.com. And the intersection of example.com and
|
||
example.net is the empty set.
|
||
|
||
(2) If excludedSubtrees is present in the certificate, set the
|
||
excluded_subtrees state variable to the union of its
|
||
previous value and the value indicated in the extension
|
||
field. If excludedSubtrees does not include a particular
|
||
name type, the excluded_subtrees state variable is
|
||
unchanged for that name type. For example, the union of
|
||
the name spaces example.com and foo.example.com is
|
||
example.com. And the union of example.com and example.net
|
||
is both name spaces.
|
||
|
||
(h) If certificate i is not self-issued:
|
||
|
||
(1) If explicit_policy is not 0, decrement explicit_policy by
|
||
1.
|
||
|
||
(2) If policy_mapping is not 0, decrement policy_mapping by 1.
|
||
|
||
(3) If inhibit_anyPolicy is not 0, decrement inhibit_anyPolicy
|
||
by 1.
|
||
|
||
(i) If a policy constraints extension is included in the
|
||
certificate, modify the explicit_policy and policy_mapping
|
||
state variables as follows:
|
||
|
||
(1) If requireExplicitPolicy is present and is less than
|
||
explicit_policy, set explicit_policy to the value of
|
||
requireExplicitPolicy.
|
||
|
||
(2) If inhibitPolicyMapping is present and is less than
|
||
policy_mapping, set policy_mapping to the value of
|
||
inhibitPolicyMapping.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 86]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(j) If the inhibitAnyPolicy extension is included in the
|
||
certificate and is less than inhibit_anyPolicy, set
|
||
inhibit_anyPolicy to the value of inhibitAnyPolicy.
|
||
|
||
(k) If certificate i is a version 3 certificate, verify that the
|
||
basicConstraints extension is present and that cA is set to
|
||
TRUE. (If certificate i is a version 1 or version 2
|
||
certificate, then the application MUST either verify that
|
||
certificate i is a CA certificate through out-of-band means
|
||
or reject the certificate. Conforming implementations may
|
||
choose to reject all version 1 and version 2 intermediate
|
||
certificates.)
|
||
|
||
(l) If the certificate was not self-issued, verify that
|
||
max_path_length is greater than zero and decrement
|
||
max_path_length by 1.
|
||
|
||
(m) If pathLenConstraint is present in the certificate and is
|
||
less than max_path_length, set max_path_length to the value
|
||
of pathLenConstraint.
|
||
|
||
(n) If a key usage extension is present, verify that the
|
||
keyCertSign bit is set.
|
||
|
||
(o) Recognize and process any other critical extension present in
|
||
the certificate. Process any other recognized non-critical
|
||
extension present in the certificate that is relevant to path
|
||
processing.
|
||
|
||
If check (a), (k), (l), (n), or (o) fails, the procedure terminates,
|
||
returning a failure indication and an appropriate reason.
|
||
|
||
If (a), (k), (l), (n), and (o) have completed successfully, increment
|
||
i and perform the basic certificate processing specified in Section
|
||
6.1.3.
|
||
|
||
6.1.5. Wrap-Up Procedure
|
||
|
||
To complete the processing of the target certificate, perform the
|
||
following steps for certificate n:
|
||
|
||
(a) If explicit_policy is not 0, decrement explicit_policy by 1.
|
||
|
||
(b) If a policy constraints extension is included in the
|
||
certificate and requireExplicitPolicy is present and has a
|
||
value of 0, set the explicit_policy state variable to 0.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 87]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(c) Assign the certificate subjectPublicKey to
|
||
working_public_key.
|
||
|
||
(d) If the subjectPublicKeyInfo field of the certificate contains
|
||
an algorithm field with non-null parameters, assign the
|
||
parameters to the working_public_key_parameters variable.
|
||
|
||
If the subjectPublicKeyInfo field of the certificate contains
|
||
an algorithm field with null parameters or parameters are
|
||
omitted, compare the certificate subjectPublicKey algorithm
|
||
to the working_public_key_algorithm. If the certificate
|
||
subjectPublicKey algorithm and the
|
||
working_public_key_algorithm are different, set the
|
||
working_public_key_parameters to null.
|
||
|
||
(e) Assign the certificate subjectPublicKey algorithm to the
|
||
working_public_key_algorithm variable.
|
||
|
||
(f) Recognize and process any other critical extension present in
|
||
the certificate n. Process any other recognized non-critical
|
||
extension present in certificate n that is relevant to path
|
||
processing.
|
||
|
||
(g) Calculate the intersection of the valid_policy_tree and the
|
||
user-initial-policy-set, as follows:
|
||
|
||
(i) If the valid_policy_tree is NULL, the intersection is
|
||
NULL.
|
||
|
||
(ii) If the valid_policy_tree is not NULL and the user-
|
||
initial-policy-set is any-policy, the intersection is
|
||
the entire valid_policy_tree.
|
||
|
||
(iii) If the valid_policy_tree is not NULL and the user-
|
||
initial-policy-set is not any-policy, calculate the
|
||
intersection of the valid_policy_tree and the user-
|
||
initial-policy-set as follows:
|
||
|
||
1. Determine the set of policy nodes whose parent nodes
|
||
have a valid_policy of anyPolicy. This is the
|
||
valid_policy_node_set.
|
||
|
||
2. If the valid_policy of any node in the
|
||
valid_policy_node_set is not in the user-initial-
|
||
policy-set and is not anyPolicy, delete this node and
|
||
all its children.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 88]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
3. If the valid_policy_tree includes a node of depth n
|
||
with the valid_policy anyPolicy and the user-initial-
|
||
policy-set is not any-policy, perform the following
|
||
steps:
|
||
|
||
a. Set P-Q to the qualifier_set in the node of depth n
|
||
with valid_policy anyPolicy.
|
||
|
||
b. For each P-OID in the user-initial-policy-set that is
|
||
not the valid_policy of a node in the
|
||
valid_policy_node_set, create a child node whose
|
||
parent is the node of depth n-1 with the valid_policy
|
||
anyPolicy. Set the values in the child node as
|
||
follows: set the valid_policy to P-OID, set the
|
||
qualifier_set to P-Q, and set the expected_policy_set
|
||
to {P-OID}.
|
||
|
||
c. Delete the node of depth n with the valid_policy
|
||
anyPolicy.
|
||
|
||
4. If there is a node in the valid_policy_tree of depth
|
||
n-1 or less without any child nodes, delete that node.
|
||
Repeat this step until there are no nodes of depth n-1
|
||
or less without children.
|
||
|
||
If either (1) the value of explicit_policy variable is greater than
|
||
zero or (2) the valid_policy_tree is not NULL, then path processing
|
||
has succeeded.
|
||
|
||
6.1.6. Outputs
|
||
|
||
If path processing succeeds, the procedure terminates, returning a
|
||
success indication together with final value of the
|
||
valid_policy_tree, the working_public_key, the
|
||
working_public_key_algorithm, and the working_public_key_parameters.
|
||
|
||
6.2. Using the Path Validation Algorithm
|
||
|
||
The path validation algorithm describes the process of validating a
|
||
single certification path. While each certification path begins with
|
||
a specific trust anchor, there is no requirement that all
|
||
certification paths validated by a particular system share a single
|
||
trust anchor. The selection of one or more trusted CAs is a local
|
||
decision. A system may provide any one of its trusted CAs as the
|
||
trust anchor for a particular path. The inputs to the path
|
||
validation algorithm may be different for each path. The inputs used
|
||
to process a path may reflect application-specific requirements or
|
||
limitations in the trust accorded a particular trust anchor. For
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 89]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
example, a trusted CA may only be trusted for a particular
|
||
certificate policy. This restriction can be expressed through the
|
||
inputs to the path validation procedure.
|
||
|
||
An implementation MAY augment the algorithm presented in Section 6.1
|
||
to further limit the set of valid certification paths that begin with
|
||
a particular trust anchor. For example, an implementation MAY modify
|
||
the algorithm to apply a path length constraint to a specific trust
|
||
anchor during the initialization phase, or the application MAY
|
||
require the presence of a particular alternative name form in the
|
||
target certificate, or the application MAY impose requirements on
|
||
application-specific extensions. Thus, the path validation algorithm
|
||
presented in Section 6.1 defines the minimum conditions for a path to
|
||
be considered valid.
|
||
|
||
Where a CA distributes self-signed certificates to specify trust
|
||
anchor information, certificate extensions can be used to specify
|
||
recommended inputs to path validation. For example, a policy
|
||
constraints extension could be included in the self-signed
|
||
certificate to indicate that paths beginning with this trust anchor
|
||
should be trusted only for the specified policies. Similarly, a name
|
||
constraints extension could be included to indicate that paths
|
||
beginning with this trust anchor should be trusted only for the
|
||
specified name spaces. The path validation algorithm presented in
|
||
Section 6.1 does not assume that trust anchor information is provided
|
||
in self-signed certificates and does not specify processing rules for
|
||
additional information included in such certificates.
|
||
Implementations that use self-signed certificates to specify trust
|
||
anchor information are free to process or ignore such information.
|
||
|
||
6.3. CRL Validation
|
||
|
||
This section describes the steps necessary to determine if a
|
||
certificate is revoked when CRLs are the revocation mechanism used by
|
||
the certificate issuer. Conforming implementations that support CRLs
|
||
are not required to implement this algorithm, but they MUST be
|
||
functionally equivalent to the external behavior resulting from this
|
||
procedure when processing CRLs that are issued in conformance with
|
||
this profile. Any algorithm may be used by a particular
|
||
implementation so long as it derives the correct result.
|
||
|
||
This algorithm assumes that all of the needed CRLs are available in a
|
||
local cache. Further, if the next update time of a CRL has passed,
|
||
the algorithm assumes a mechanism to fetch a current CRL and place it
|
||
in the local CRL cache.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 90]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
This algorithm defines a set of inputs, a set of state variables, and
|
||
processing steps that are performed for each certificate in the path.
|
||
The algorithm output is the revocation status of the certificate.
|
||
|
||
6.3.1. Revocation Inputs
|
||
|
||
To support revocation processing, the algorithm requires two inputs:
|
||
|
||
(a) certificate: The algorithm requires the certificate serial
|
||
number and issuer name to determine whether a certificate is
|
||
on a particular CRL. The basicConstraints extension is used
|
||
to determine whether the supplied certificate is associated
|
||
with a CA or an end entity. If present, the algorithm uses
|
||
the cRLDistributionPoints and freshestCRL extensions to
|
||
determine revocation status.
|
||
|
||
(b) use-deltas: This boolean input determines whether delta CRLs
|
||
are applied to CRLs.
|
||
|
||
6.3.2. Initialization and Revocation State Variables
|
||
|
||
To support CRL processing, the algorithm requires the following state
|
||
variables:
|
||
|
||
(a) reasons_mask: This variable contains the set of revocation
|
||
reasons supported by the CRLs and delta CRLs processed so
|
||
far. The legal members of the set are the possible
|
||
revocation reason values minus unspecified: keyCompromise,
|
||
cACompromise, affiliationChanged, superseded,
|
||
cessationOfOperation, certificateHold, privilegeWithdrawn,
|
||
and aACompromise. The special value all-reasons is used to
|
||
denote the set of all legal members. This variable is
|
||
initialized to the empty set.
|
||
|
||
(b) cert_status: This variable contains the status of the
|
||
certificate. This variable may be assigned one of the
|
||
following values: unspecified, keyCompromise, cACompromise,
|
||
affiliationChanged, superseded, cessationOfOperation,
|
||
certificateHold, removeFromCRL, privilegeWithdrawn,
|
||
aACompromise, the special value UNREVOKED, or the special
|
||
value UNDETERMINED. This variable is initialized to the
|
||
special value UNREVOKED.
|
||
|
||
(c) interim_reasons_mask: This contains the set of revocation
|
||
reasons supported by the CRL or delta CRL currently being
|
||
processed.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 91]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Note: In some environments, it is not necessary to check all reason
|
||
codes. For example, some environments are only concerned with
|
||
cACompromise and keyCompromise for CA certificates. This algorithm
|
||
checks all reason codes. Additional processing and state variables
|
||
may be necessary to limit the checking to a subset of the reason
|
||
codes.
|
||
|
||
6.3.3. CRL Processing
|
||
|
||
This algorithm begins by assuming that the certificate is not
|
||
revoked. The algorithm checks one or more CRLs until either the
|
||
certificate status is determined to be revoked or sufficient CRLs
|
||
have been checked to cover all reason codes.
|
||
|
||
For each distribution point (DP) in the certificate's CRL
|
||
distribution points extension, for each corresponding CRL in the
|
||
local CRL cache, while ((reasons_mask is not all-reasons) and
|
||
(cert_status is UNREVOKED)) perform the following:
|
||
|
||
(a) Update the local CRL cache by obtaining a complete CRL, a
|
||
delta CRL, or both, as required:
|
||
|
||
(1) If the current time is after the value of the CRL next
|
||
update field, then do one of the following:
|
||
|
||
(i) If use-deltas is set and either the certificate or the
|
||
CRL contains the freshest CRL extension, obtain a
|
||
delta CRL with a next update value that is after the
|
||
current time and can be used to update the locally
|
||
cached CRL as specified in Section 5.2.4.
|
||
|
||
(ii) Update the local CRL cache with a current complete
|
||
CRL, verify that the current time is before the next
|
||
update value in the new CRL, and continue processing
|
||
with the new CRL. If use-deltas is set and either the
|
||
certificate or the CRL contains the freshest CRL
|
||
extension, then obtain the current delta CRL that can
|
||
be used to update the new locally cached complete CRL
|
||
as specified in Section 5.2.4.
|
||
|
||
(2) If the current time is before the value of the next update
|
||
field, use-deltas is set, and either the certificate or
|
||
the CRL contains the freshest CRL extension, then obtain
|
||
the current delta CRL that can be used to update the
|
||
locally cached complete CRL as specified in Section 5.2.4.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 92]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(b) Verify the issuer and scope of the complete CRL as follows:
|
||
|
||
(1) If the DP includes cRLIssuer, then verify that the issuer
|
||
field in the complete CRL matches cRLIssuer in the DP and
|
||
that the complete CRL contains an issuing distribution
|
||
point extension with the indirectCRL boolean asserted.
|
||
Otherwise, verify that the CRL issuer matches the
|
||
certificate issuer.
|
||
|
||
(2) If the complete CRL includes an issuing distribution point
|
||
(IDP) CRL extension, check the following:
|
||
|
||
(i) If the distribution point name is present in the IDP
|
||
CRL extension and the distribution field is present in
|
||
the DP, then verify that one of the names in the IDP
|
||
matches one of the names in the DP. If the
|
||
distribution point name is present in the IDP CRL
|
||
extension and the distribution field is omitted from
|
||
the DP, then verify that one of the names in the IDP
|
||
matches one of the names in the cRLIssuer field of the
|
||
DP.
|
||
|
||
(ii) If the onlyContainsUserCerts boolean is asserted in
|
||
the IDP CRL extension, verify that the certificate
|
||
does not include the basic constraints extension with
|
||
the cA boolean asserted.
|
||
|
||
(iii) If the onlyContainsCACerts boolean is asserted in the
|
||
IDP CRL extension, verify that the certificate
|
||
includes the basic constraints extension with the cA
|
||
boolean asserted.
|
||
|
||
(iv) Verify that the onlyContainsAttributeCerts boolean is
|
||
not asserted.
|
||
|
||
(c) If use-deltas is set, verify the issuer and scope of the
|
||
delta CRL as follows:
|
||
|
||
(1) Verify that the delta CRL issuer matches the complete CRL
|
||
issuer.
|
||
|
||
(2) If the complete CRL includes an issuing distribution point
|
||
(IDP) CRL extension, verify that the delta CRL contains a
|
||
matching IDP CRL extension. If the complete CRL omits an
|
||
IDP CRL extension, verify that the delta CRL also omits an
|
||
IDP CRL extension.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 93]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(3) Verify that the delta CRL authority key identifier
|
||
extension matches the complete CRL authority key
|
||
identifier extension.
|
||
|
||
(d) Compute the interim_reasons_mask for this CRL as follows:
|
||
|
||
(1) If the issuing distribution point (IDP) CRL extension is
|
||
present and includes onlySomeReasons and the DP includes
|
||
reasons, then set interim_reasons_mask to the intersection
|
||
of reasons in the DP and onlySomeReasons in the IDP CRL
|
||
extension.
|
||
|
||
(2) If the IDP CRL extension includes onlySomeReasons but the
|
||
DP omits reasons, then set interim_reasons_mask to the
|
||
value of onlySomeReasons in the IDP CRL extension.
|
||
|
||
(3) If the IDP CRL extension is not present or omits
|
||
onlySomeReasons but the DP includes reasons, then set
|
||
interim_reasons_mask to the value of DP reasons.
|
||
|
||
(4) If the IDP CRL extension is not present or omits
|
||
onlySomeReasons and the DP omits reasons, then set
|
||
interim_reasons_mask to the special value all-reasons.
|
||
|
||
(e) Verify that interim_reasons_mask includes one or more reasons
|
||
that are not included in the reasons_mask.
|
||
|
||
(f) Obtain and validate the certification path for the issuer of
|
||
the complete CRL. The trust anchor for the certification
|
||
path MUST be the same as the trust anchor used to validate
|
||
the target certificate. If a key usage extension is present
|
||
in the CRL issuer's certificate, verify that the cRLSign bit
|
||
is set.
|
||
|
||
(g) Validate the signature on the complete CRL using the public
|
||
key validated in step (f).
|
||
|
||
(h) If use-deltas is set, then validate the signature on the
|
||
delta CRL using the public key validated in step (f).
|
||
|
||
(i) If use-deltas is set, then search for the certificate on the
|
||
delta CRL. If an entry is found that matches the certificate
|
||
issuer and serial number as described in Section 5.3.3, then
|
||
set the cert_status variable to the indicated reason as
|
||
follows:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 94]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(1) If the reason code CRL entry extension is present, set the
|
||
cert_status variable to the value of the reason code CRL
|
||
entry extension.
|
||
|
||
(2) If the reason code CRL entry extension is not present, set
|
||
the cert_status variable to the value unspecified.
|
||
|
||
(j) If (cert_status is UNREVOKED), then search for the
|
||
certificate on the complete CRL. If an entry is found that
|
||
matches the certificate issuer and serial number as described
|
||
in Section 5.3.3, then set the cert_status variable to the
|
||
indicated reason as described in step (i).
|
||
|
||
(k) If (cert_status is removeFromCRL), then set cert_status to
|
||
UNREVOKED.
|
||
|
||
(l) Set the reasons_mask state variable to the union of its
|
||
previous value and the value of the interim_reasons_mask
|
||
state variable.
|
||
|
||
If ((reasons_mask is all-reasons) OR (cert_status is not UNREVOKED)),
|
||
then the revocation status has been determined, so return
|
||
cert_status.
|
||
|
||
If the revocation status has not been determined, repeat the process
|
||
above with any available CRLs not specified in a distribution point
|
||
but issued by the certificate issuer. For the processing of such a
|
||
CRL, assume a DP with both the reasons and the cRLIssuer fields
|
||
omitted and a distribution point name of the certificate issuer.
|
||
That is, the sequence of names in fullName is generated from the
|
||
certificate issuer field as well as the certificate issuerAltName
|
||
extension. After processing such CRLs, if the revocation status has
|
||
still not been determined, then return the cert_status UNDETERMINED.
|
||
|
||
7. Processing Rules for Internationalized Names
|
||
|
||
Internationalized names may be encountered in numerous certificate
|
||
and CRL fields and extensions, including distinguished names,
|
||
internationalized domain names, electronic mail addresses, and
|
||
Internationalized Resource Identifiers (IRIs). Storage, comparison,
|
||
and presentation of such names require special care. Some characters
|
||
may be encoded in multiple ways. The same names could be represented
|
||
in multiple encodings (e.g., ASCII or UTF8). This section
|
||
establishes conformance requirements for storage or comparison of
|
||
each of these name forms. Informative guidance on presentation is
|
||
provided for some of these name forms.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 95]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
7.1. Internationalized Names in Distinguished Names
|
||
|
||
Representation of internationalized names in distinguished names is
|
||
covered in Sections 4.1.2.4, Issuer Name, and 4.1.2.6, Subject Name.
|
||
Standard naming attributes, such as common name, employ the
|
||
DirectoryString type, which supports internationalized names through
|
||
a variety of language encodings. Conforming implementations MUST
|
||
support UTF8String and PrintableString. RFC 3280 required only
|
||
binary comparison of attribute values encoded in UTF8String, however,
|
||
this specification requires a more comprehensive handling of
|
||
comparison. Implementations may encounter certificates and CRLs with
|
||
names encoded using TeletexString, BMPString, or UniversalString, but
|
||
support for these is OPTIONAL.
|
||
|
||
Conforming implementations MUST use the LDAP StringPrep profile
|
||
(including insignificant space handling), as specified in [RFC4518],
|
||
as the basis for comparison of distinguished name attributes encoded
|
||
in either PrintableString or UTF8String. Conforming implementations
|
||
MUST support name comparisons using caseIgnoreMatch. Support for
|
||
attribute types that use other equality matching rules is optional.
|
||
|
||
Before comparing names using the caseIgnoreMatch matching rule,
|
||
conforming implementations MUST perform the six-step string
|
||
preparation algorithm described in [RFC4518] for each attribute of
|
||
type DirectoryString, with the following clarifications:
|
||
|
||
* In step 2, Map, the mapping shall include case folding as
|
||
specified in Appendix B.2 of [RFC3454].
|
||
|
||
* In step 6, Insignificant Character Removal, perform white space
|
||
compression as specified in Section 2.6.1, Insignificant Space
|
||
Handling, of [RFC4518].
|
||
|
||
When performing the string preparation algorithm, attributes MUST be
|
||
treated as stored values.
|
||
|
||
Comparisons of domainComponent attributes MUST be performed as
|
||
specified in Section 7.3.
|
||
|
||
Two naming attributes match if the attribute types are the same and
|
||
the values of the attributes are an exact match after processing with
|
||
the string preparation algorithm. Two relative distinguished names
|
||
RDN1 and RDN2 match if they have the same number of naming attributes
|
||
and for each naming attribute in RDN1 there is a matching naming
|
||
attribute in RDN2. Two distinguished names DN1 and DN2 match if they
|
||
have the same number of RDNs, for each RDN in DN1 there is a matching
|
||
RDN in DN2, and the matching RDNs appear in the same order in both
|
||
DNs. A distinguished name DN1 is within the subtree defined by the
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 96]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
distinguished name DN2 if DN1 contains at least as many RDNs as DN2,
|
||
and DN1 and DN2 are a match when trailing RDNs in DN1 are ignored.
|
||
|
||
7.2. Internationalized Domain Names in GeneralName
|
||
|
||
Internationalized Domain Names (IDNs) may be included in certificates
|
||
and CRLs in the subjectAltName and issuerAltName extensions, name
|
||
constraints extension, authority information access extension,
|
||
subject information access extension, CRL distribution points
|
||
extension, and issuing distribution point extension. Each of these
|
||
extensions uses the GeneralName type; one choice in GeneralName is
|
||
the dNSName field, which is defined as type IA5String.
|
||
|
||
IA5String is limited to the set of ASCII characters. To accommodate
|
||
internationalized domain names in the current structure, conforming
|
||
implementations MUST convert internationalized domain names to the
|
||
ASCII Compatible Encoding (ACE) format as specified in Section 4 of
|
||
RFC 3490 before storage in the dNSName field. Specifically,
|
||
conforming implementations MUST perform the conversion operation
|
||
specified in Section 4 of RFC 3490, with the following
|
||
clarifications:
|
||
|
||
* in step 1, the domain name SHALL be considered a "stored
|
||
string". That is, the AllowUnassigned flag SHALL NOT be set;
|
||
|
||
* in step 3, set the flag called "UseSTD3ASCIIRules";
|
||
|
||
* in step 4, process each label with the "ToASCII" operation; and
|
||
|
||
* in step 5, change all label separators to U+002E (full stop).
|
||
|
||
When comparing DNS names for equality, conforming implementations
|
||
MUST perform a case-insensitive exact match on the entire DNS name.
|
||
When evaluating name constraints, conforming implementations MUST
|
||
perform a case-insensitive exact match on a label-by-label basis. As
|
||
noted in Section 4.2.1.10, any DNS name that may be constructed by
|
||
adding labels to the left-hand side of the domain name given as the
|
||
constraint is considered to fall within the indicated subtree.
|
||
|
||
Implementations should convert IDNs to Unicode before display.
|
||
Specifically, conforming implementations should perform the
|
||
conversion operation specified in Section 4 of RFC 3490, with the
|
||
following clarifications:
|
||
|
||
* in step 1, the domain name SHALL be considered a "stored
|
||
string". That is, the AllowUnassigned flag SHALL NOT be set;
|
||
|
||
* in step 3, set the flag called "UseSTD3ASCIIRules";
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 97]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
* in step 4, process each label with the "ToUnicode" operation;
|
||
and
|
||
|
||
* skip step 5.
|
||
|
||
Note: Implementations MUST allow for increased space requirements
|
||
for IDNs. An IDN ACE label will begin with the four additional
|
||
characters "xn--" and may require as many as five ASCII characters to
|
||
specify a single international character.
|
||
|
||
7.3. Internationalized Domain Names in Distinguished Names
|
||
|
||
Domain Names may also be represented as distinguished names using
|
||
domain components in the subject field, the issuer field, the
|
||
subjectAltName extension, or the issuerAltName extension. As with
|
||
the dNSName in the GeneralName type, the value of this attribute is
|
||
defined as an IA5String. Each domainComponent attribute represents a
|
||
single label. To represent a label from an IDN in the distinguished
|
||
name, the implementation MUST perform the "ToASCII" label conversion
|
||
specified in Section 4.1 of RFC 3490. The label SHALL be considered
|
||
a "stored string". That is, the AllowUnassigned flag SHALL NOT be
|
||
set.
|
||
|
||
Conforming implementations shall perform a case-insensitive exact
|
||
match when comparing domainComponent attributes in distinguished
|
||
names, as described in Section 7.2.
|
||
|
||
Implementations should convert ACE labels to Unicode before display.
|
||
Specifically, conforming implementations should perform the
|
||
"ToUnicode" conversion operation specified, as described in Section
|
||
7.2, on each ACE label before displaying the name.
|
||
|
||
7.4. Internationalized Resource Identifiers
|
||
|
||
Internationalized Resource Identifiers (IRIs) are the
|
||
internationalized complement to the Uniform Resource Identifier
|
||
(URI). IRIs are sequences of characters from Unicode, while URIs are
|
||
sequences of characters from the ASCII character set. [RFC3987]
|
||
defines a mapping from IRIs to URIs. While IRIs are not encoded
|
||
directly in any certificate fields or extensions, their mapped URIs
|
||
may be included in certificates and CRLs. URIs may appear in the
|
||
subjectAltName and issuerAltName extensions, name constraints
|
||
extension, authority information access extension, subject
|
||
information access extension, issuing distribution point extension,
|
||
and CRL distribution points extension. Each of these extensions uses
|
||
the GeneralName type; URIs are encoded in the
|
||
uniformResourceIdentifier field in GeneralName, which is defined as
|
||
type IA5String.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 98]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
To accommodate IRIs in the current structure, conforming
|
||
implementations MUST map IRIs to URIs as specified in Section 3.1 of
|
||
[RFC3987], with the following clarifications:
|
||
|
||
* in step 1, generate a UCS character sequence from the original
|
||
IRI format normalizing according to the NFC as specified in
|
||
Variant b (normalization according to NFC);
|
||
|
||
* perform step 2 using the output from step 1.
|
||
|
||
Implementations MUST NOT convert the ireg-name component before
|
||
performing step 2.
|
||
|
||
Before URIs may be compared, conforming implementations MUST perform
|
||
a combination of the syntax-based and scheme-based normalization
|
||
techniques described in [RFC3987]. Specifically, conforming
|
||
implementations MUST prepare URIs for comparison as follows:
|
||
|
||
* Step 1: Where IRIs allow the usage of IDNs, those names MUST be
|
||
converted to ASCII Compatible Encoding as specified in Section
|
||
7.2 above.
|
||
|
||
* Step 2: The scheme and host are normalized to lowercase, as
|
||
described in Section 5.3.2.1 of [RFC3987].
|
||
|
||
* Step 3: Perform percent-encoding normalization, as specified in
|
||
Section 5.3.2.3 of [RFC3987].
|
||
|
||
* Step 4: Perform path segment normalization, as specified in
|
||
Section 5.3.2.4 of [RFC3987].
|
||
|
||
* Step 5: If recognized, the implementation MUST perform scheme-
|
||
based normalization as specified in Section 5.3.3 of [RFC3987].
|
||
|
||
Conforming implementations MUST recognize and perform scheme-based
|
||
normalization for the following schemes: ldap, http, https, and ftp.
|
||
If the scheme is not recognized, step 5 is omitted.
|
||
|
||
When comparing URIs for equivalence, conforming implementations shall
|
||
perform a case-sensitive exact match.
|
||
|
||
Implementations should convert URIs to Unicode before display.
|
||
Specifically, conforming implementations should perform the
|
||
conversion operation specified in Section 3.2 of [RFC3987].
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 99]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
7.5. Internationalized Electronic Mail Addresses
|
||
|
||
Electronic Mail addresses may be included in certificates and CRLs in
|
||
the subjectAltName and issuerAltName extensions, name constraints
|
||
extension, authority information access extension, subject
|
||
information access extension, issuing distribution point extension,
|
||
or CRL distribution points extension. Each of these extensions uses
|
||
the GeneralName construct; GeneralName includes the rfc822Name
|
||
choice, which is defined as type IA5String. To accommodate email
|
||
addresses with internationalized domain names using the current
|
||
structure, conforming implementations MUST convert the addresses into
|
||
an ASCII representation.
|
||
|
||
Where the host-part (the Domain of the Mailbox) contains an
|
||
internationalized name, the domain name MUST be converted from an IDN
|
||
to the ASCII Compatible Encoding (ACE) format as specified in Section
|
||
7.2.
|
||
|
||
Two email addresses are considered to match if:
|
||
|
||
1) the local-part of each name is an exact match, AND
|
||
|
||
2) the host-part of each name matches using a case-insensitive
|
||
ASCII comparison.
|
||
|
||
Implementations should convert the host-part of internationalized
|
||
email addresses specified in these extensions to Unicode before
|
||
display. Specifically, conforming implementations should perform the
|
||
conversion of the host-part of the Mailbox as described in Section
|
||
7.2.
|
||
|
||
8. Security Considerations
|
||
|
||
The majority of this specification is devoted to the format and
|
||
content of certificates and CRLs. Since certificates and CRLs are
|
||
digitally signed, no additional integrity service is necessary.
|
||
Neither certificates nor CRLs need be kept secret, and unrestricted
|
||
and anonymous access to certificates and CRLs has no security
|
||
implications.
|
||
|
||
However, security factors outside the scope of this specification
|
||
will affect the assurance provided to certificate users. This
|
||
section highlights critical issues to be considered by implementers,
|
||
administrators, and users.
|
||
|
||
The procedures performed by CAs and RAs to validate the binding of
|
||
the subject's identity to their public key greatly affect the
|
||
assurance that ought to be placed in the certificate. Relying
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 100]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
parties might wish to review the CA's certification practice
|
||
statement. This is particularly important when issuing certificates
|
||
to other CAs.
|
||
|
||
The use of a single key pair for both signature and other purposes is
|
||
strongly discouraged. Use of separate key pairs for signature and
|
||
key management provides several benefits to the users. The
|
||
ramifications associated with loss or disclosure of a signature key
|
||
are different from loss or disclosure of a key management key. Using
|
||
separate key pairs permits a balanced and flexible response.
|
||
Similarly, different validity periods or key lengths for each key
|
||
pair may be appropriate in some application environments.
|
||
Unfortunately, some legacy applications (e.g., Secure Sockets Layer
|
||
(SSL)) use a single key pair for signature and key management.
|
||
|
||
The protection afforded private keys is a critical security factor.
|
||
On a small scale, failure of users to protect their private keys will
|
||
permit an attacker to masquerade as them or decrypt their personal
|
||
information. On a larger scale, compromise of a CA's private signing
|
||
key may have a catastrophic effect. If an attacker obtains the
|
||
private key unnoticed, the attacker may issue bogus certificates and
|
||
CRLs. Existence of bogus certificates and CRLs will undermine
|
||
confidence in the system. If such a compromise is detected, all
|
||
certificates issued to the compromised CA MUST be revoked, preventing
|
||
services between its users and users of other CAs. Rebuilding after
|
||
such a compromise will be problematic, so CAs are advised to
|
||
implement a combination of strong technical measures (e.g., tamper-
|
||
resistant cryptographic modules) and appropriate management
|
||
procedures (e.g., separation of duties) to avoid such an incident.
|
||
|
||
Loss of a CA's private signing key may also be problematic. The CA
|
||
would not be able to produce CRLs or perform normal key rollover.
|
||
CAs SHOULD maintain secure backup for signing keys. The security of
|
||
the key backup procedures is a critical factor in avoiding key
|
||
compromise.
|
||
|
||
The availability and freshness of revocation information affects the
|
||
degree of assurance that ought to be placed in a certificate. While
|
||
certificates expire naturally, events may occur during its natural
|
||
lifetime that negate the binding between the subject and public key.
|
||
If revocation information is untimely or unavailable, the assurance
|
||
associated with the binding is clearly reduced. Relying parties
|
||
might not be able to process every critical extension that can appear
|
||
in a CRL. CAs SHOULD take extra care when making revocation
|
||
information available only through CRLs that contain critical
|
||
extensions, particularly if support for those extensions is not
|
||
mandated by this profile. For example, if revocation information is
|
||
supplied using a combination of delta CRLs and full CRLs, and the
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 101]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
delta CRLs are issued more frequently than the full CRLs, then
|
||
relying parties that cannot handle the critical extensions related to
|
||
delta CRL processing will not be able to obtain the most recent
|
||
revocation information. Alternatively, if a full CRL is issued
|
||
whenever a delta CRL is issued, then timely revocation information
|
||
will be available to all relying parties. Similarly, implementations
|
||
of the certification path validation mechanism described in Section 6
|
||
that omit revocation checking provide less assurance than those that
|
||
support it.
|
||
|
||
The certification path validation algorithm depends on the certain
|
||
knowledge of the public keys (and other information) about one or
|
||
more trusted CAs. The decision to trust a CA is an important
|
||
decision as it ultimately determines the trust afforded a
|
||
certificate. The authenticated distribution of trusted CA public
|
||
keys (usually in the form of a "self-signed" certificate) is a
|
||
security critical out-of-band process that is beyond the scope of
|
||
this specification.
|
||
|
||
In addition, where a key compromise or CA failure occurs for a
|
||
trusted CA, the user will need to modify the information provided to
|
||
the path validation routine. Selection of too many trusted CAs makes
|
||
the trusted CA information difficult to maintain. On the other hand,
|
||
selection of only one trusted CA could limit users to a closed
|
||
community of users.
|
||
|
||
The quality of implementations that process certificates also affects
|
||
the degree of assurance provided. The path validation algorithm
|
||
described in Section 6 relies upon the integrity of the trusted CA
|
||
information, and especially the integrity of the public keys
|
||
associated with the trusted CAs. By substituting public keys for
|
||
which an attacker has the private key, an attacker could trick the
|
||
user into accepting false certificates.
|
||
|
||
The binding between a key and certificate subject cannot be stronger
|
||
than the cryptographic module implementation and algorithms used to
|
||
generate the signature. Short key lengths or weak hash algorithms
|
||
will limit the utility of a certificate. CAs are encouraged to note
|
||
advances in cryptology so they can employ strong cryptographic
|
||
techniques. In addition, CAs SHOULD decline to issue certificates to
|
||
CAs or end entities that generate weak signatures.
|
||
|
||
Inconsistent application of name comparison rules can result in
|
||
acceptance of invalid X.509 certification paths or rejection of valid
|
||
ones. The X.500 series of specifications defines rules for comparing
|
||
distinguished names that require comparison of strings without regard
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 102]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
to case, character set, multi-character white space substring, or
|
||
leading and trailing white space. This specification relaxes these
|
||
requirements, requiring support for binary comparison at a minimum.
|
||
|
||
CAs MUST encode the distinguished name in the subject field of a CA
|
||
certificate identically to the distinguished name in the issuer field
|
||
in certificates issued by that CA. If CAs use different encodings,
|
||
implementations might fail to recognize name chains for paths that
|
||
include this certificate. As a consequence, valid paths could be
|
||
rejected.
|
||
|
||
In addition, name constraints for distinguished names MUST be stated
|
||
identically to the encoding used in the subject field or
|
||
subjectAltName extension. If not, then name constraints stated as
|
||
excludedSubtrees will not match and invalid paths will be accepted
|
||
and name constraints expressed as permittedSubtrees will not match
|
||
and valid paths will be rejected. To avoid acceptance of invalid
|
||
paths, CAs SHOULD state name constraints for distinguished names as
|
||
permittedSubtrees wherever possible.
|
||
|
||
In general, using the nameConstraints extension to constrain one name
|
||
form (e.g., DNS names) offers no protection against use of other name
|
||
forms (e.g., electronic mail addresses).
|
||
|
||
While X.509 mandates that names be unambiguous, there is a risk that
|
||
two unrelated authorities will issue certificates and/or CRLs under
|
||
the same issuer name. As a means of reducing problems and security
|
||
issues related to issuer name collisions, CA and CRL issuer names
|
||
SHOULD be formed in a way that reduces the likelihood of name
|
||
collisions. Implementers should take into account the possible
|
||
existence of multiple unrelated CAs and CRL issuers with the same
|
||
name. At a minimum, implementations validating CRLs MUST ensure that
|
||
the certification path of a certificate and the CRL issuer
|
||
certification path used to validate the certificate terminate at the
|
||
same trust anchor.
|
||
|
||
While the local-part of an electronic mail address is case sensitive
|
||
[RFC2821], emailAddress attribute values are not case sensitive
|
||
[RFC2985]. As a result, there is a risk that two different email
|
||
addresses will be treated as the same address when the matching rule
|
||
for the emailAddress attribute is used, if the email server exploits
|
||
the case sensitivity of mailbox local-parts. Implementers should not
|
||
include an email address in the emailAddress attribute if the email
|
||
server that hosts the email address treats the local-part of email
|
||
addresses as case sensitive.
|
||
|
||
Implementers should be aware of risks involved if the CRL
|
||
distribution points or authority information access extensions of
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 103]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
corrupted certificates or CRLs contain links to malicious code.
|
||
Implementers should always take the steps of validating the retrieved
|
||
data to ensure that the data is properly formed.
|
||
|
||
When certificates include a cRLDistributionPoints extension with an
|
||
https URI or similar scheme, circular dependencies can be introduced.
|
||
The relying party is forced to perform an additional path validation
|
||
in order to obtain the CRL required to complete the initial path
|
||
validation! Circular conditions can also be created with an https
|
||
URI (or similar scheme) in the authorityInfoAccess or
|
||
subjectInfoAccess extensions. At worst, this situation can create
|
||
unresolvable dependencies.
|
||
|
||
CAs SHOULD NOT include URIs that specify https, ldaps, or similar
|
||
schemes in extensions. CAs that include an https URI in one of these
|
||
extensions MUST ensure that the server's certificate can be validated
|
||
without using the information that is pointed to by the URI. Relying
|
||
parties that choose to validate the server's certificate when
|
||
obtaining information pointed to by an https URI in the
|
||
cRLDistributionPoints, authorityInfoAccess, or subjectInfoAccess
|
||
extensions MUST be prepared for the possibility that this will result
|
||
in unbounded recursion.
|
||
|
||
Self-issued certificates provide CAs with one automated mechanism to
|
||
indicate changes in the CA's operations. In particular, self-issued
|
||
certificates may be used to implement a graceful change-over from one
|
||
non-compromised CA key pair to the next. Detailed procedures for "CA
|
||
key update" are specified in [RFC4210], where the CA protects its new
|
||
public key using its previous private key and vice versa using two
|
||
self-issued certificates. Conforming client implementations will
|
||
process the self-issued certificate and determine whether
|
||
certificates issued under the new key may be trusted. Self-issued
|
||
certificates MAY be used to support other changes in CA operations,
|
||
such as additions to the CA's policy set, using similar procedures.
|
||
|
||
Some legacy implementations support names encoded in the ISO 8859-1
|
||
character set (Latin1String) [ISO8859] but tag them as TeletexString.
|
||
TeletexString encodes a larger character set than ISO 8859-1, but it
|
||
encodes some characters differently. The name comparison rules
|
||
specified in Section 7.1 assume that TeletexStrings are encoded as
|
||
described in the ASN.1 standard. When comparing names encoded using
|
||
the Latin1String character set, false positives and negatives are
|
||
possible.
|
||
|
||
When strings are mapped from internal representations to visual
|
||
representations, sometimes two different strings will have the same
|
||
or similar visual representations. This can happen for many
|
||
different reasons, including use of similar glyphs and use of
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 104]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
composed characters (such as e + ' equaling U+00E9, the Korean
|
||
composed characters, and vowels above consonant clusters in certain
|
||
languages). As a result of this situation, people doing visual
|
||
comparisons between two different names may think they are the same
|
||
when in fact they are not. Also, people may mistake one string for
|
||
another. Issuers of certificates and relying parties both need to be
|
||
aware of this situation.
|
||
|
||
9. IANA Considerations
|
||
|
||
Extensions in certificates and CRLs are identified using object
|
||
identifiers. The objects are defined in an arc delegated by IANA to
|
||
the PKIX Working Group. No further action by IANA is necessary for
|
||
this document or any anticipated updates.
|
||
|
||
10. Acknowledgments
|
||
|
||
Warwick Ford participated with the authors in some of the design team
|
||
meetings that directed development of this document. The design
|
||
team's efforts were guided by contributions from Matt Crawford, Tom
|
||
Gindin, Steve Hanna, Stephen Henson, Paul Hoffman, Takashi Ito, Denis
|
||
Pinkas, and Wen-Cheng Wang.
|
||
|
||
11. References
|
||
|
||
11.1. Normative References
|
||
|
||
[RFC791] Postel, J., "Internet Protocol", STD 5, RFC 791, September
|
||
1981.
|
||
|
||
[RFC1034] Mockapetris, P., "Domain Names - Concepts and Facilities",
|
||
STD 13, RFC 1034, November 1987.
|
||
|
||
[RFC1123] Braden, R., Ed., "Requirements for Internet Hosts --
|
||
Application and Support", STD 3, RFC 1123, October 1989.
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
||
|
||
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6
|
||
(IPv6) Specification", RFC 2460, December 1998.
|
||
|
||
[RFC2585] Housley, R. and P. Hoffman, "Internet X.509 Public Key
|
||
Infrastructure: Operational Protocols: FTP and HTTP", RFC
|
||
2585, May 1999.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 105]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
|
||
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
|
||
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
|
||
|
||
[RFC2797] Myers, M., Liu, X., Schaad, J., and J. Weinstein,
|
||
"Certificate Management Messages over CMS", RFC 2797,
|
||
April 2000.
|
||
|
||
[RFC2821] Klensin, J., Ed., "Simple Mail Transfer Protocol", RFC
|
||
2821, April 2001.
|
||
|
||
[RFC3454] Hoffman, P. and M. Blanchet, "Preparation of
|
||
Internationalized Strings ("stringprep")", RFC 3454,
|
||
December 2002.
|
||
|
||
[RFC3490] Faltstrom, P., Hoffman, P., and A. Costello,
|
||
"Internationalizing Domain Names in Applications (IDNA)",
|
||
RFC 3490, March 2003.
|
||
|
||
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
|
||
10646", STD 63, RFC 3629, November 2003.
|
||
|
||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
|
||
Resource Identifier (URI): Generic Syntax", STD 66, RFC
|
||
3986, January 2005.
|
||
|
||
[RFC3987] Duerst, M. and M. Suignard, "Internationalized Resource
|
||
Identifiers (IRIs)", RFC 3987, January 2005.
|
||
|
||
[RFC4516] Smith, M., Ed., and T. Howes, "Lightweight Directory
|
||
Access Protocol (LDAP): Uniform Resource Locator", RFC
|
||
4516, June 2006.
|
||
|
||
[RFC4518] Zeilenga, K., "Lightweight Directory Access Protocol
|
||
(LDAP): Internationalized String Preparation", RFC 4518,
|
||
June 2006.
|
||
|
||
[RFC4523] Zeilenga, K., "Lightweight Directory Access Protocol
|
||
(LDAP) Schema Definitions for X.509 Certificates", RFC
|
||
4523, June 2006.
|
||
|
||
[RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing
|
||
(CIDR): The Internet Address Assignment and Aggregation
|
||
Plan", BCP 122, RFC 4632, August 2006.
|
||
|
||
[X.680] ITU-T Recommendation X.680 (2002) | ISO/IEC 8824-1:2002,
|
||
Information technology - Abstract Syntax Notation One
|
||
(ASN.1): Specification of basic notation.
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 106]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
[X.690] ITU-T Recommendation X.690 (2002) | ISO/IEC 8825-1:2002,
|
||
Information technology - ASN.1 encoding rules:
|
||
Specification of Basic Encoding Rules (BER), Canonical
|
||
Encoding Rules (CER) and Distinguished Encoding Rules
|
||
(DER).
|
||
|
||
11.2. Informative References
|
||
|
||
[ISO8859] ISO/IEC 8859-1:1998. Information technology -- 8-bit
|
||
single-byte coded graphic character sets -- Part 1: Latin
|
||
alphabet No. 1.
|
||
|
||
[ISO10646] ISO/IEC 10646:2003. Information technology -- Universal
|
||
Multiple-Octet Coded Character Set (UCS).
|
||
|
||
[NFC] Davis, M. and M. Duerst, "Unicode Standard Annex #15:
|
||
Unicode Normalization Forms", October 2006,
|
||
<http://www.unicode.org/reports/tr15/>.
|
||
|
||
[RFC1422] Kent, S., "Privacy Enhancement for Internet Electronic
|
||
Mail: Part II: Certificate-Based Key Management", RFC
|
||
1422, February 1993.
|
||
|
||
[RFC2277] Alvestrand, H., "IETF Policy on Character Sets and
|
||
Languages", BCP 18, RFC 2277, January 1998.
|
||
|
||
[RFC2459] Housley, R., Ford, W., Polk, W., and D. Solo, "Internet
|
||
X.509 Public Key Infrastructure Certificate and CRL
|
||
Profile", RFC 2459, January 1999.
|
||
|
||
[RFC2560] Myers, M., Ankney, R., Malpani, A., Galperin, S., and C.
|
||
Adams, "X.509 Internet Public Key Infrastructure Online
|
||
Certificate Status Protocol - OCSP", RFC 2560, June 1999.
|
||
|
||
[RFC2985] Nystrom, M. and B. Kaliski, "PKCS #9: Selected Object
|
||
Classes and Attribute Types Version 2.0", RFC 2985,
|
||
November 2000.
|
||
|
||
[RFC3161] Adams, C., Cain, P., Pinkas, D., and R. Zuccherato,
|
||
"Internet X.509 Public Key Infrastructure Time-Stamp
|
||
Protocol (TSP)", RFC 3161, August 2001.
|
||
|
||
[RFC3279] Bassham, L., Polk, W., and R. Housley, "Algorithms and
|
||
Identifiers for the Internet X.509 Public Key
|
||
Infrastructure Certificate and Certificate Revocation List
|
||
(CRL) Profile", RFC 3279, April 2002.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 107]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
[RFC3280] Housley, R., Polk, W., Ford, W., and D. Solo, "Internet
|
||
X.509 Public Key Infrastructure Certificate and
|
||
Certificate Revocation List (CRL) Profile", RFC 3280,
|
||
April 2002.
|
||
|
||
[RFC4055] Schaad, J., Kaliski, B., and R. Housley, "Additional
|
||
Algorithms and Identifiers for RSA Cryptography for use in
|
||
the Internet X.509 Public Key Infrastructure Certificate
|
||
and Certificate Revocation List (CRL) Profile", RFC 4055,
|
||
June 2005.
|
||
|
||
[RFC4120] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The
|
||
Kerberos Network Authentication Service (V5)", RFC 4120,
|
||
July 2005.
|
||
|
||
[RFC4210] Adams, C., Farrell, S., Kause, T., and T. Mononen,
|
||
"Internet X.509 Public Key Infrastructure Certificate
|
||
Management Protocol (CMP)", RFC 4210, September 2005.
|
||
|
||
[RFC4325] Santesson, S. and R. Housley, "Internet X.509 Public Key
|
||
Infrastructure Authority Information Access Certificate
|
||
Revocation List (CRL) Extension", RFC 4325, December 2005.
|
||
|
||
[RFC4491] Leontiev, S., Ed., and D. Shefanovski, Ed., "Using the
|
||
GOST R 34.10-94, GOST R 34.10-2001, and GOST R 34.11-94
|
||
Algorithms with the Internet X.509 Public Key
|
||
Infrastructure Certificate and CRL Profile", RFC 4491, May
|
||
2006.
|
||
|
||
[RFC4510] Zeilenga, K., Ed., "Lightweight Directory Access Protocol
|
||
(LDAP): Technical Specification Road Map", RFC 4510, June
|
||
2006.
|
||
|
||
[RFC4512] Zeilenga, K., Ed., "Lightweight Directory Access Protocol
|
||
(LDAP): Directory Information Models", RFC 4512, June
|
||
2006.
|
||
|
||
[RFC4514] Zeilenga, K., Ed., "Lightweight Directory Access Protocol
|
||
(LDAP): String Representation of Distinguished Names", RFC
|
||
4514, June 2006.
|
||
|
||
[RFC4519] Sciberras, A., Ed., "Lightweight Directory Access Protocol
|
||
(LDAP): Schema for User Applications", RFC 4519, June
|
||
2006.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 108]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
[RFC4630] Housley, R. and S. Santesson, "Update to DirectoryString
|
||
Processing in the Internet X.509 Public Key Infrastructure
|
||
Certificate and Certificate Revocation List (CRL)
|
||
Profile", RFC 4630, August 2006.
|
||
|
||
[X.500] ITU-T Recommendation X.500 (2005) | ISO/IEC 9594-1:2005,
|
||
Information technology - Open Systems Interconnection -
|
||
The Directory: Overview of concepts, models and services.
|
||
|
||
[X.501] ITU-T Recommendation X.501 (2005) | ISO/IEC 9594-2:2005,
|
||
Information technology - Open Systems Interconnection -
|
||
The Directory: Models.
|
||
|
||
[X.509] ITU-T Recommendation X.509 (2005) | ISO/IEC 9594-8:2005,
|
||
Information technology - Open Systems Interconnection -
|
||
The Directory: Public-key and attribute certificate
|
||
frameworks.
|
||
|
||
[X.520] ITU-T Recommendation X.520 (2005) | ISO/IEC 9594-6:2005,
|
||
Information technology - Open Systems Interconnection -
|
||
The Directory: Selected attribute types.
|
||
|
||
[X.660] ITU-T Recommendation X.660 (2004) | ISO/IEC 9834-1:2005,
|
||
Information technology - Open Systems Interconnection -
|
||
Procedures for the operation of OSI Registration
|
||
Authorities: General procedures, and top arcs of the ASN.1
|
||
Object Identifier tree.
|
||
|
||
[X.683] ITU-T Recommendation X.683 (2002) | ISO/IEC 8824-4:2002,
|
||
Information technology - Abstract Syntax Notation One
|
||
(ASN.1): Parameterization of ASN.1 specifications.
|
||
|
||
[X9.55] ANSI X9.55-1997, Public Key Cryptography for the Financial
|
||
Services Industry: Extensions to Public Key Certificates
|
||
and Certificate Revocation Lists, January 1997.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 109]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Appendix A. Pseudo-ASN.1 Structures and OIDs
|
||
|
||
This appendix describes data objects used by conforming PKI
|
||
components in an "ASN.1-like" syntax. This syntax is a hybrid of the
|
||
1988 and 1993 ASN.1 syntaxes. The 1988 ASN.1 syntax is augmented
|
||
with 1993 UNIVERSAL Types UniversalString, BMPString, and UTF8String.
|
||
|
||
The ASN.1 syntax does not permit the inclusion of type statements in
|
||
the ASN.1 module, and the 1993 ASN.1 standard does not permit use of
|
||
the new UNIVERSAL types in modules using the 1988 syntax. As a
|
||
result, this module does not conform to either version of the ASN.1
|
||
standard.
|
||
|
||
This appendix may be converted into 1988 ASN.1 by replacing the
|
||
definitions for the UNIVERSAL Types with the 1988 catch-all "ANY".
|
||
|
||
A.1. Explicitly Tagged Module, 1988 Syntax
|
||
|
||
PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1)
|
||
security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) }
|
||
|
||
DEFINITIONS EXPLICIT TAGS ::=
|
||
|
||
BEGIN
|
||
|
||
-- EXPORTS ALL --
|
||
|
||
-- IMPORTS NONE --
|
||
|
||
-- UNIVERSAL Types defined in 1993 and 1998 ASN.1
|
||
-- and required by this specification
|
||
|
||
UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING
|
||
-- UniversalString is defined in ASN.1:1993
|
||
|
||
BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING
|
||
-- BMPString is the subtype of UniversalString and models
|
||
-- the Basic Multilingual Plane of ISO/IEC 10646
|
||
|
||
UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING
|
||
-- The content of this type conforms to RFC 3629.
|
||
|
||
-- PKIX specific OIDs
|
||
|
||
id-pkix OBJECT IDENTIFIER ::=
|
||
{ iso(1) identified-organization(3) dod(6) internet(1)
|
||
security(5) mechanisms(5) pkix(7) }
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 110]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- PKIX arcs
|
||
|
||
id-pe OBJECT IDENTIFIER ::= { id-pkix 1 }
|
||
-- arc for private certificate extensions
|
||
id-qt OBJECT IDENTIFIER ::= { id-pkix 2 }
|
||
-- arc for policy qualifier types
|
||
id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
|
||
-- arc for extended key purpose OIDS
|
||
id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
|
||
-- arc for access descriptors
|
||
|
||
-- policyQualifierIds for Internet policy qualifiers
|
||
|
||
id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 }
|
||
-- OID for CPS qualifier
|
||
id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 }
|
||
-- OID for user notice qualifier
|
||
|
||
-- access descriptor definitions
|
||
|
||
id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
|
||
id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
|
||
id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 }
|
||
id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 }
|
||
|
||
-- attribute data types
|
||
|
||
Attribute ::= SEQUENCE {
|
||
type AttributeType,
|
||
values SET OF AttributeValue }
|
||
-- at least one value is required
|
||
|
||
AttributeType ::= OBJECT IDENTIFIER
|
||
|
||
AttributeValue ::= ANY -- DEFINED BY AttributeType
|
||
|
||
AttributeTypeAndValue ::= SEQUENCE {
|
||
type AttributeType,
|
||
value AttributeValue }
|
||
|
||
-- suggested naming attributes: Definition of the following
|
||
-- information object set may be augmented to meet local
|
||
-- requirements. Note that deleting members of the set may
|
||
-- prevent interoperability with conforming implementations.
|
||
-- presented in pairs: the AttributeType followed by the
|
||
-- type definition for the corresponding AttributeValue
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 111]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- Arc for standard naming attributes
|
||
|
||
id-at OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 4 }
|
||
|
||
-- Naming attributes of type X520name
|
||
|
||
id-at-name AttributeType ::= { id-at 41 }
|
||
id-at-surname AttributeType ::= { id-at 4 }
|
||
id-at-givenName AttributeType ::= { id-at 42 }
|
||
id-at-initials AttributeType ::= { id-at 43 }
|
||
id-at-generationQualifier AttributeType ::= { id-at 44 }
|
||
|
||
-- Naming attributes of type X520Name:
|
||
-- X520name ::= DirectoryString (SIZE (1..ub-name))
|
||
--
|
||
-- Expanded to avoid parameterized type:
|
||
X520name ::= CHOICE {
|
||
teletexString TeletexString (SIZE (1..ub-name)),
|
||
printableString PrintableString (SIZE (1..ub-name)),
|
||
universalString UniversalString (SIZE (1..ub-name)),
|
||
utf8String UTF8String (SIZE (1..ub-name)),
|
||
bmpString BMPString (SIZE (1..ub-name)) }
|
||
|
||
-- Naming attributes of type X520CommonName
|
||
|
||
id-at-commonName AttributeType ::= { id-at 3 }
|
||
|
||
-- Naming attributes of type X520CommonName:
|
||
-- X520CommonName ::= DirectoryName (SIZE (1..ub-common-name))
|
||
--
|
||
-- Expanded to avoid parameterized type:
|
||
X520CommonName ::= CHOICE {
|
||
teletexString TeletexString (SIZE (1..ub-common-name)),
|
||
printableString PrintableString (SIZE (1..ub-common-name)),
|
||
universalString UniversalString (SIZE (1..ub-common-name)),
|
||
utf8String UTF8String (SIZE (1..ub-common-name)),
|
||
bmpString BMPString (SIZE (1..ub-common-name)) }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 112]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- Naming attributes of type X520LocalityName
|
||
|
||
id-at-localityName AttributeType ::= { id-at 7 }
|
||
|
||
-- Naming attributes of type X520LocalityName:
|
||
-- X520LocalityName ::= DirectoryName (SIZE (1..ub-locality-name))
|
||
--
|
||
-- Expanded to avoid parameterized type:
|
||
X520LocalityName ::= CHOICE {
|
||
teletexString TeletexString (SIZE (1..ub-locality-name)),
|
||
printableString PrintableString (SIZE (1..ub-locality-name)),
|
||
universalString UniversalString (SIZE (1..ub-locality-name)),
|
||
utf8String UTF8String (SIZE (1..ub-locality-name)),
|
||
bmpString BMPString (SIZE (1..ub-locality-name)) }
|
||
|
||
-- Naming attributes of type X520StateOrProvinceName
|
||
|
||
id-at-stateOrProvinceName AttributeType ::= { id-at 8 }
|
||
|
||
-- Naming attributes of type X520StateOrProvinceName:
|
||
-- X520StateOrProvinceName ::= DirectoryName (SIZE (1..ub-state-name))
|
||
--
|
||
-- Expanded to avoid parameterized type:
|
||
X520StateOrProvinceName ::= CHOICE {
|
||
teletexString TeletexString (SIZE (1..ub-state-name)),
|
||
printableString PrintableString (SIZE (1..ub-state-name)),
|
||
universalString UniversalString (SIZE (1..ub-state-name)),
|
||
utf8String UTF8String (SIZE (1..ub-state-name)),
|
||
bmpString BMPString (SIZE (1..ub-state-name)) }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 113]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- Naming attributes of type X520OrganizationName
|
||
|
||
id-at-organizationName AttributeType ::= { id-at 10 }
|
||
|
||
-- Naming attributes of type X520OrganizationName:
|
||
-- X520OrganizationName ::=
|
||
-- DirectoryName (SIZE (1..ub-organization-name))
|
||
--
|
||
-- Expanded to avoid parameterized type:
|
||
X520OrganizationName ::= CHOICE {
|
||
teletexString TeletexString
|
||
(SIZE (1..ub-organization-name)),
|
||
printableString PrintableString
|
||
(SIZE (1..ub-organization-name)),
|
||
universalString UniversalString
|
||
(SIZE (1..ub-organization-name)),
|
||
utf8String UTF8String
|
||
(SIZE (1..ub-organization-name)),
|
||
bmpString BMPString
|
||
(SIZE (1..ub-organization-name)) }
|
||
|
||
-- Naming attributes of type X520OrganizationalUnitName
|
||
|
||
id-at-organizationalUnitName AttributeType ::= { id-at 11 }
|
||
|
||
-- Naming attributes of type X520OrganizationalUnitName:
|
||
-- X520OrganizationalUnitName ::=
|
||
-- DirectoryName (SIZE (1..ub-organizational-unit-name))
|
||
--
|
||
-- Expanded to avoid parameterized type:
|
||
X520OrganizationalUnitName ::= CHOICE {
|
||
teletexString TeletexString
|
||
(SIZE (1..ub-organizational-unit-name)),
|
||
printableString PrintableString
|
||
(SIZE (1..ub-organizational-unit-name)),
|
||
universalString UniversalString
|
||
(SIZE (1..ub-organizational-unit-name)),
|
||
utf8String UTF8String
|
||
(SIZE (1..ub-organizational-unit-name)),
|
||
bmpString BMPString
|
||
(SIZE (1..ub-organizational-unit-name)) }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 114]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- Naming attributes of type X520Title
|
||
|
||
id-at-title AttributeType ::= { id-at 12 }
|
||
|
||
-- Naming attributes of type X520Title:
|
||
-- X520Title ::= DirectoryName (SIZE (1..ub-title))
|
||
--
|
||
-- Expanded to avoid parameterized type:
|
||
X520Title ::= CHOICE {
|
||
teletexString TeletexString (SIZE (1..ub-title)),
|
||
printableString PrintableString (SIZE (1..ub-title)),
|
||
universalString UniversalString (SIZE (1..ub-title)),
|
||
utf8String UTF8String (SIZE (1..ub-title)),
|
||
bmpString BMPString (SIZE (1..ub-title)) }
|
||
|
||
-- Naming attributes of type X520dnQualifier
|
||
|
||
id-at-dnQualifier AttributeType ::= { id-at 46 }
|
||
|
||
X520dnQualifier ::= PrintableString
|
||
|
||
-- Naming attributes of type X520countryName (digraph from IS 3166)
|
||
|
||
id-at-countryName AttributeType ::= { id-at 6 }
|
||
|
||
X520countryName ::= PrintableString (SIZE (2))
|
||
|
||
-- Naming attributes of type X520SerialNumber
|
||
|
||
id-at-serialNumber AttributeType ::= { id-at 5 }
|
||
|
||
X520SerialNumber ::= PrintableString (SIZE (1..ub-serial-number))
|
||
|
||
-- Naming attributes of type X520Pseudonym
|
||
|
||
id-at-pseudonym AttributeType ::= { id-at 65 }
|
||
|
||
-- Naming attributes of type X520Pseudonym:
|
||
-- X520Pseudonym ::= DirectoryName (SIZE (1..ub-pseudonym))
|
||
--
|
||
-- Expanded to avoid parameterized type:
|
||
X520Pseudonym ::= CHOICE {
|
||
teletexString TeletexString (SIZE (1..ub-pseudonym)),
|
||
printableString PrintableString (SIZE (1..ub-pseudonym)),
|
||
universalString UniversalString (SIZE (1..ub-pseudonym)),
|
||
utf8String UTF8String (SIZE (1..ub-pseudonym)),
|
||
bmpString BMPString (SIZE (1..ub-pseudonym)) }
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 115]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- Naming attributes of type DomainComponent (from RFC 4519)
|
||
|
||
id-domainComponent AttributeType ::= { 0 9 2342 19200300 100 1 25 }
|
||
|
||
DomainComponent ::= IA5String
|
||
|
||
-- Legacy attributes
|
||
|
||
pkcs-9 OBJECT IDENTIFIER ::=
|
||
{ iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 }
|
||
|
||
id-emailAddress AttributeType ::= { pkcs-9 1 }
|
||
|
||
EmailAddress ::= IA5String (SIZE (1..ub-emailaddress-length))
|
||
|
||
-- naming data types --
|
||
|
||
Name ::= CHOICE { -- only one possibility for now --
|
||
rdnSequence RDNSequence }
|
||
|
||
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
|
||
|
||
DistinguishedName ::= RDNSequence
|
||
|
||
RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
|
||
|
||
-- Directory string type --
|
||
|
||
DirectoryString ::= CHOICE {
|
||
teletexString TeletexString (SIZE (1..MAX)),
|
||
printableString PrintableString (SIZE (1..MAX)),
|
||
universalString UniversalString (SIZE (1..MAX)),
|
||
utf8String UTF8String (SIZE (1..MAX)),
|
||
bmpString BMPString (SIZE (1..MAX)) }
|
||
|
||
-- certificate and CRL specific structures begin here
|
||
|
||
Certificate ::= SEQUENCE {
|
||
tbsCertificate TBSCertificate,
|
||
signatureAlgorithm AlgorithmIdentifier,
|
||
signature BIT STRING }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 116]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
TBSCertificate ::= SEQUENCE {
|
||
version [0] Version DEFAULT v1,
|
||
serialNumber CertificateSerialNumber,
|
||
signature AlgorithmIdentifier,
|
||
issuer Name,
|
||
validity Validity,
|
||
subject Name,
|
||
subjectPublicKeyInfo SubjectPublicKeyInfo,
|
||
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
|
||
-- If present, version MUST be v2 or v3
|
||
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
|
||
-- If present, version MUST be v2 or v3
|
||
extensions [3] Extensions OPTIONAL
|
||
-- If present, version MUST be v3 -- }
|
||
|
||
Version ::= INTEGER { v1(0), v2(1), v3(2) }
|
||
|
||
CertificateSerialNumber ::= INTEGER
|
||
|
||
Validity ::= SEQUENCE {
|
||
notBefore Time,
|
||
notAfter Time }
|
||
|
||
Time ::= CHOICE {
|
||
utcTime UTCTime,
|
||
generalTime GeneralizedTime }
|
||
|
||
UniqueIdentifier ::= BIT STRING
|
||
|
||
SubjectPublicKeyInfo ::= SEQUENCE {
|
||
algorithm AlgorithmIdentifier,
|
||
subjectPublicKey BIT STRING }
|
||
|
||
Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
|
||
|
||
Extension ::= SEQUENCE {
|
||
extnID OBJECT IDENTIFIER,
|
||
critical BOOLEAN DEFAULT FALSE,
|
||
extnValue OCTET STRING
|
||
-- contains the DER encoding of an ASN.1 value
|
||
-- corresponding to the extension type identified
|
||
-- by extnID
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 117]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- CRL structures
|
||
|
||
CertificateList ::= SEQUENCE {
|
||
tbsCertList TBSCertList,
|
||
signatureAlgorithm AlgorithmIdentifier,
|
||
signature BIT STRING }
|
||
|
||
TBSCertList ::= SEQUENCE {
|
||
version Version OPTIONAL,
|
||
-- if present, MUST be v2
|
||
signature AlgorithmIdentifier,
|
||
issuer Name,
|
||
thisUpdate Time,
|
||
nextUpdate Time OPTIONAL,
|
||
revokedCertificates SEQUENCE OF SEQUENCE {
|
||
userCertificate CertificateSerialNumber,
|
||
revocationDate Time,
|
||
crlEntryExtensions Extensions OPTIONAL
|
||
-- if present, version MUST be v2
|
||
} OPTIONAL,
|
||
crlExtensions [0] Extensions OPTIONAL }
|
||
-- if present, version MUST be v2
|
||
|
||
-- Version, Time, CertificateSerialNumber, and Extensions were
|
||
-- defined earlier for use in the certificate structure
|
||
|
||
AlgorithmIdentifier ::= SEQUENCE {
|
||
algorithm OBJECT IDENTIFIER,
|
||
parameters ANY DEFINED BY algorithm OPTIONAL }
|
||
-- contains a value of the type
|
||
-- registered for use with the
|
||
-- algorithm object identifier value
|
||
|
||
-- X.400 address syntax starts here
|
||
|
||
ORAddress ::= SEQUENCE {
|
||
built-in-standard-attributes BuiltInStandardAttributes,
|
||
built-in-domain-defined-attributes
|
||
BuiltInDomainDefinedAttributes OPTIONAL,
|
||
-- see also teletex-domain-defined-attributes
|
||
extension-attributes ExtensionAttributes OPTIONAL }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 118]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- Built-in Standard Attributes
|
||
|
||
BuiltInStandardAttributes ::= SEQUENCE {
|
||
country-name CountryName OPTIONAL,
|
||
administration-domain-name AdministrationDomainName OPTIONAL,
|
||
network-address [0] IMPLICIT NetworkAddress OPTIONAL,
|
||
-- see also extended-network-address
|
||
terminal-identifier [1] IMPLICIT TerminalIdentifier OPTIONAL,
|
||
private-domain-name [2] PrivateDomainName OPTIONAL,
|
||
organization-name [3] IMPLICIT OrganizationName OPTIONAL,
|
||
-- see also teletex-organization-name
|
||
numeric-user-identifier [4] IMPLICIT NumericUserIdentifier
|
||
OPTIONAL,
|
||
personal-name [5] IMPLICIT PersonalName OPTIONAL,
|
||
-- see also teletex-personal-name
|
||
organizational-unit-names [6] IMPLICIT OrganizationalUnitNames
|
||
OPTIONAL }
|
||
-- see also teletex-organizational-unit-names
|
||
|
||
CountryName ::= [APPLICATION 1] CHOICE {
|
||
x121-dcc-code NumericString
|
||
(SIZE (ub-country-name-numeric-length)),
|
||
iso-3166-alpha2-code PrintableString
|
||
(SIZE (ub-country-name-alpha-length)) }
|
||
|
||
AdministrationDomainName ::= [APPLICATION 2] CHOICE {
|
||
numeric NumericString (SIZE (0..ub-domain-name-length)),
|
||
printable PrintableString (SIZE (0..ub-domain-name-length)) }
|
||
|
||
NetworkAddress ::= X121Address -- see also extended-network-address
|
||
|
||
X121Address ::= NumericString (SIZE (1..ub-x121-address-length))
|
||
|
||
TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length))
|
||
|
||
PrivateDomainName ::= CHOICE {
|
||
numeric NumericString (SIZE (1..ub-domain-name-length)),
|
||
printable PrintableString (SIZE (1..ub-domain-name-length)) }
|
||
|
||
OrganizationName ::= PrintableString
|
||
(SIZE (1..ub-organization-name-length))
|
||
-- see also teletex-organization-name
|
||
|
||
NumericUserIdentifier ::= NumericString
|
||
(SIZE (1..ub-numeric-user-id-length))
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 119]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
PersonalName ::= SET {
|
||
surname [0] IMPLICIT PrintableString
|
||
(SIZE (1..ub-surname-length)),
|
||
given-name [1] IMPLICIT PrintableString
|
||
(SIZE (1..ub-given-name-length)) OPTIONAL,
|
||
initials [2] IMPLICIT PrintableString
|
||
(SIZE (1..ub-initials-length)) OPTIONAL,
|
||
generation-qualifier [3] IMPLICIT PrintableString
|
||
(SIZE (1..ub-generation-qualifier-length))
|
||
OPTIONAL }
|
||
-- see also teletex-personal-name
|
||
|
||
OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units)
|
||
OF OrganizationalUnitName
|
||
-- see also teletex-organizational-unit-names
|
||
|
||
OrganizationalUnitName ::= PrintableString (SIZE
|
||
(1..ub-organizational-unit-name-length))
|
||
|
||
-- Built-in Domain-defined Attributes
|
||
|
||
BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE
|
||
(1..ub-domain-defined-attributes) OF
|
||
BuiltInDomainDefinedAttribute
|
||
|
||
BuiltInDomainDefinedAttribute ::= SEQUENCE {
|
||
type PrintableString (SIZE
|
||
(1..ub-domain-defined-attribute-type-length)),
|
||
value PrintableString (SIZE
|
||
(1..ub-domain-defined-attribute-value-length)) }
|
||
|
||
-- Extension Attributes
|
||
|
||
ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF
|
||
ExtensionAttribute
|
||
|
||
ExtensionAttribute ::= SEQUENCE {
|
||
extension-attribute-type [0] IMPLICIT INTEGER
|
||
(0..ub-extension-attributes),
|
||
extension-attribute-value [1]
|
||
ANY DEFINED BY extension-attribute-type }
|
||
|
||
-- Extension types and attribute values
|
||
|
||
common-name INTEGER ::= 1
|
||
|
||
CommonName ::= PrintableString (SIZE (1..ub-common-name-length))
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 120]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
teletex-common-name INTEGER ::= 2
|
||
|
||
TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length))
|
||
|
||
teletex-organization-name INTEGER ::= 3
|
||
|
||
TeletexOrganizationName ::=
|
||
TeletexString (SIZE (1..ub-organization-name-length))
|
||
|
||
teletex-personal-name INTEGER ::= 4
|
||
|
||
TeletexPersonalName ::= SET {
|
||
surname [0] IMPLICIT TeletexString
|
||
(SIZE (1..ub-surname-length)),
|
||
given-name [1] IMPLICIT TeletexString
|
||
(SIZE (1..ub-given-name-length)) OPTIONAL,
|
||
initials [2] IMPLICIT TeletexString
|
||
(SIZE (1..ub-initials-length)) OPTIONAL,
|
||
generation-qualifier [3] IMPLICIT TeletexString
|
||
(SIZE (1..ub-generation-qualifier-length))
|
||
OPTIONAL }
|
||
|
||
teletex-organizational-unit-names INTEGER ::= 5
|
||
|
||
TeletexOrganizationalUnitNames ::= SEQUENCE SIZE
|
||
(1..ub-organizational-units) OF TeletexOrganizationalUnitName
|
||
|
||
TeletexOrganizationalUnitName ::= TeletexString
|
||
(SIZE (1..ub-organizational-unit-name-length))
|
||
|
||
pds-name INTEGER ::= 7
|
||
|
||
PDSName ::= PrintableString (SIZE (1..ub-pds-name-length))
|
||
|
||
physical-delivery-country-name INTEGER ::= 8
|
||
|
||
PhysicalDeliveryCountryName ::= CHOICE {
|
||
x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)),
|
||
iso-3166-alpha2-code PrintableString
|
||
(SIZE (ub-country-name-alpha-length)) }
|
||
|
||
postal-code INTEGER ::= 9
|
||
|
||
PostalCode ::= CHOICE {
|
||
numeric-code NumericString (SIZE (1..ub-postal-code-length)),
|
||
printable-code PrintableString (SIZE (1..ub-postal-code-length)) }
|
||
|
||
physical-delivery-office-name INTEGER ::= 10
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 121]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
PhysicalDeliveryOfficeName ::= PDSParameter
|
||
|
||
physical-delivery-office-number INTEGER ::= 11
|
||
|
||
PhysicalDeliveryOfficeNumber ::= PDSParameter
|
||
|
||
extension-OR-address-components INTEGER ::= 12
|
||
|
||
ExtensionORAddressComponents ::= PDSParameter
|
||
|
||
physical-delivery-personal-name INTEGER ::= 13
|
||
|
||
PhysicalDeliveryPersonalName ::= PDSParameter
|
||
|
||
physical-delivery-organization-name INTEGER ::= 14
|
||
|
||
PhysicalDeliveryOrganizationName ::= PDSParameter
|
||
|
||
extension-physical-delivery-address-components INTEGER ::= 15
|
||
|
||
ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter
|
||
|
||
unformatted-postal-address INTEGER ::= 16
|
||
|
||
UnformattedPostalAddress ::= SET {
|
||
printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines)
|
||
OF PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL,
|
||
teletex-string TeletexString
|
||
(SIZE (1..ub-unformatted-address-length)) OPTIONAL }
|
||
|
||
street-address INTEGER ::= 17
|
||
|
||
StreetAddress ::= PDSParameter
|
||
|
||
post-office-box-address INTEGER ::= 18
|
||
|
||
PostOfficeBoxAddress ::= PDSParameter
|
||
|
||
poste-restante-address INTEGER ::= 19
|
||
|
||
PosteRestanteAddress ::= PDSParameter
|
||
|
||
unique-postal-name INTEGER ::= 20
|
||
|
||
UniquePostalName ::= PDSParameter
|
||
|
||
local-postal-attributes INTEGER ::= 21
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 122]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
LocalPostalAttributes ::= PDSParameter
|
||
|
||
PDSParameter ::= SET {
|
||
printable-string PrintableString
|
||
(SIZE(1..ub-pds-parameter-length)) OPTIONAL,
|
||
teletex-string TeletexString
|
||
(SIZE(1..ub-pds-parameter-length)) OPTIONAL }
|
||
|
||
extended-network-address INTEGER ::= 22
|
||
|
||
ExtendedNetworkAddress ::= CHOICE {
|
||
e163-4-address SEQUENCE {
|
||
number [0] IMPLICIT NumericString
|
||
(SIZE (1..ub-e163-4-number-length)),
|
||
sub-address [1] IMPLICIT NumericString
|
||
(SIZE (1..ub-e163-4-sub-address-length))
|
||
OPTIONAL },
|
||
psap-address [0] IMPLICIT PresentationAddress }
|
||
|
||
PresentationAddress ::= SEQUENCE {
|
||
pSelector [0] EXPLICIT OCTET STRING OPTIONAL,
|
||
sSelector [1] EXPLICIT OCTET STRING OPTIONAL,
|
||
tSelector [2] EXPLICIT OCTET STRING OPTIONAL,
|
||
nAddresses [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING }
|
||
|
||
terminal-type INTEGER ::= 23
|
||
|
||
TerminalType ::= INTEGER {
|
||
telex (3),
|
||
teletex (4),
|
||
g3-facsimile (5),
|
||
g4-facsimile (6),
|
||
ia5-terminal (7),
|
||
videotex (8) } (0..ub-integer-options)
|
||
|
||
-- Extension Domain-defined Attributes
|
||
|
||
teletex-domain-defined-attributes INTEGER ::= 6
|
||
|
||
TeletexDomainDefinedAttributes ::= SEQUENCE SIZE
|
||
(1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute
|
||
|
||
TeletexDomainDefinedAttribute ::= SEQUENCE {
|
||
type TeletexString
|
||
(SIZE (1..ub-domain-defined-attribute-type-length)),
|
||
value TeletexString
|
||
(SIZE (1..ub-domain-defined-attribute-value-length)) }
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 123]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- specifications of Upper Bounds MUST be regarded as mandatory
|
||
-- from Annex B of ITU-T X.411 Reference Definition of MTS Parameter
|
||
-- Upper Bounds
|
||
|
||
-- Upper Bounds
|
||
ub-name INTEGER ::= 32768
|
||
ub-common-name INTEGER ::= 64
|
||
ub-locality-name INTEGER ::= 128
|
||
ub-state-name INTEGER ::= 128
|
||
ub-organization-name INTEGER ::= 64
|
||
ub-organizational-unit-name INTEGER ::= 64
|
||
ub-title INTEGER ::= 64
|
||
ub-serial-number INTEGER ::= 64
|
||
ub-match INTEGER ::= 128
|
||
ub-emailaddress-length INTEGER ::= 255
|
||
ub-common-name-length INTEGER ::= 64
|
||
ub-country-name-alpha-length INTEGER ::= 2
|
||
ub-country-name-numeric-length INTEGER ::= 3
|
||
ub-domain-defined-attributes INTEGER ::= 4
|
||
ub-domain-defined-attribute-type-length INTEGER ::= 8
|
||
ub-domain-defined-attribute-value-length INTEGER ::= 128
|
||
ub-domain-name-length INTEGER ::= 16
|
||
ub-extension-attributes INTEGER ::= 256
|
||
ub-e163-4-number-length INTEGER ::= 15
|
||
ub-e163-4-sub-address-length INTEGER ::= 40
|
||
ub-generation-qualifier-length INTEGER ::= 3
|
||
ub-given-name-length INTEGER ::= 16
|
||
ub-initials-length INTEGER ::= 5
|
||
ub-integer-options INTEGER ::= 256
|
||
ub-numeric-user-id-length INTEGER ::= 32
|
||
ub-organization-name-length INTEGER ::= 64
|
||
ub-organizational-unit-name-length INTEGER ::= 32
|
||
ub-organizational-units INTEGER ::= 4
|
||
ub-pds-name-length INTEGER ::= 16
|
||
ub-pds-parameter-length INTEGER ::= 30
|
||
ub-pds-physical-address-lines INTEGER ::= 6
|
||
ub-postal-code-length INTEGER ::= 16
|
||
ub-pseudonym INTEGER ::= 128
|
||
ub-surname-length INTEGER ::= 40
|
||
ub-terminal-id-length INTEGER ::= 24
|
||
ub-unformatted-address-length INTEGER ::= 180
|
||
ub-x121-address-length INTEGER ::= 16
|
||
|
||
-- Note - upper bounds on string types, such as TeletexString, are
|
||
-- measured in characters. Excepting PrintableString or IA5String, a
|
||
-- significantly greater number of octets will be required to hold
|
||
-- such a value. As a minimum, 16 octets, or twice the specified
|
||
-- upper bound, whichever is the larger, should be allowed for
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 124]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- TeletexString. For UTF8String or UniversalString at least four
|
||
-- times the upper bound should be allowed.
|
||
|
||
END
|
||
|
||
A.2. Implicitly Tagged Module, 1988 Syntax
|
||
|
||
PKIX1Implicit88 { iso(1) identified-organization(3) dod(6) internet(1)
|
||
security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19) }
|
||
|
||
DEFINITIONS IMPLICIT TAGS ::=
|
||
|
||
BEGIN
|
||
|
||
-- EXPORTS ALL --
|
||
|
||
IMPORTS
|
||
id-pe, id-kp, id-qt-unotice, id-qt-cps,
|
||
-- delete following line if "new" types are supported --
|
||
BMPString, UTF8String, -- end "new" types --
|
||
ORAddress, Name, RelativeDistinguishedName,
|
||
CertificateSerialNumber, Attribute, DirectoryString
|
||
FROM PKIX1Explicit88 { iso(1) identified-organization(3)
|
||
dod(6) internet(1) security(5) mechanisms(5) pkix(7)
|
||
id-mod(0) id-pkix1-explicit(18) };
|
||
|
||
-- ISO arc for standard certificate and CRL extensions
|
||
|
||
id-ce OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 29}
|
||
|
||
-- authority key identifier OID and syntax
|
||
|
||
id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 }
|
||
|
||
AuthorityKeyIdentifier ::= SEQUENCE {
|
||
keyIdentifier [0] KeyIdentifier OPTIONAL,
|
||
authorityCertIssuer [1] GeneralNames OPTIONAL,
|
||
authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
|
||
-- authorityCertIssuer and authorityCertSerialNumber MUST both
|
||
-- be present or both be absent
|
||
|
||
KeyIdentifier ::= OCTET STRING
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 125]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- subject key identifier OID and syntax
|
||
|
||
id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 }
|
||
|
||
SubjectKeyIdentifier ::= KeyIdentifier
|
||
|
||
-- key usage extension OID and syntax
|
||
|
||
id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }
|
||
|
||
KeyUsage ::= BIT STRING {
|
||
digitalSignature (0),
|
||
nonRepudiation (1), -- recent editions of X.509 have
|
||
-- renamed this bit to contentCommitment
|
||
keyEncipherment (2),
|
||
dataEncipherment (3),
|
||
keyAgreement (4),
|
||
keyCertSign (5),
|
||
cRLSign (6),
|
||
encipherOnly (7),
|
||
decipherOnly (8) }
|
||
|
||
-- private key usage period extension OID and syntax
|
||
|
||
id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 }
|
||
|
||
PrivateKeyUsagePeriod ::= SEQUENCE {
|
||
notBefore [0] GeneralizedTime OPTIONAL,
|
||
notAfter [1] GeneralizedTime OPTIONAL }
|
||
-- either notBefore or notAfter MUST be present
|
||
|
||
-- certificate policies extension OID and syntax
|
||
|
||
id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 }
|
||
|
||
anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificatePolicies 0 }
|
||
|
||
CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
|
||
|
||
PolicyInformation ::= SEQUENCE {
|
||
policyIdentifier CertPolicyId,
|
||
policyQualifiers SEQUENCE SIZE (1..MAX) OF
|
||
PolicyQualifierInfo OPTIONAL }
|
||
|
||
CertPolicyId ::= OBJECT IDENTIFIER
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 126]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
PolicyQualifierInfo ::= SEQUENCE {
|
||
policyQualifierId PolicyQualifierId,
|
||
qualifier ANY DEFINED BY policyQualifierId }
|
||
|
||
-- Implementations that recognize additional policy qualifiers MUST
|
||
-- augment the following definition for PolicyQualifierId
|
||
|
||
PolicyQualifierId ::= OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
|
||
|
||
-- CPS pointer qualifier
|
||
|
||
CPSuri ::= IA5String
|
||
|
||
-- user notice qualifier
|
||
|
||
UserNotice ::= SEQUENCE {
|
||
noticeRef NoticeReference OPTIONAL,
|
||
explicitText DisplayText OPTIONAL }
|
||
|
||
NoticeReference ::= SEQUENCE {
|
||
organization DisplayText,
|
||
noticeNumbers SEQUENCE OF INTEGER }
|
||
|
||
DisplayText ::= CHOICE {
|
||
ia5String IA5String (SIZE (1..200)),
|
||
visibleString VisibleString (SIZE (1..200)),
|
||
bmpString BMPString (SIZE (1..200)),
|
||
utf8String UTF8String (SIZE (1..200)) }
|
||
|
||
-- policy mapping extension OID and syntax
|
||
|
||
id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 }
|
||
|
||
PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
|
||
issuerDomainPolicy CertPolicyId,
|
||
subjectDomainPolicy CertPolicyId }
|
||
|
||
-- subject alternative name extension OID and syntax
|
||
|
||
id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 }
|
||
|
||
SubjectAltName ::= GeneralNames
|
||
|
||
GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 127]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
GeneralName ::= CHOICE {
|
||
otherName [0] AnotherName,
|
||
rfc822Name [1] IA5String,
|
||
dNSName [2] IA5String,
|
||
x400Address [3] ORAddress,
|
||
directoryName [4] Name,
|
||
ediPartyName [5] EDIPartyName,
|
||
uniformResourceIdentifier [6] IA5String,
|
||
iPAddress [7] OCTET STRING,
|
||
registeredID [8] OBJECT IDENTIFIER }
|
||
|
||
-- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as
|
||
-- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax
|
||
|
||
AnotherName ::= SEQUENCE {
|
||
type-id OBJECT IDENTIFIER,
|
||
value [0] EXPLICIT ANY DEFINED BY type-id }
|
||
|
||
EDIPartyName ::= SEQUENCE {
|
||
nameAssigner [0] DirectoryString OPTIONAL,
|
||
partyName [1] DirectoryString }
|
||
|
||
-- issuer alternative name extension OID and syntax
|
||
|
||
id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 }
|
||
|
||
IssuerAltName ::= GeneralNames
|
||
|
||
id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 }
|
||
|
||
SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
|
||
|
||
-- basic constraints extension OID and syntax
|
||
|
||
id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }
|
||
|
||
BasicConstraints ::= SEQUENCE {
|
||
cA BOOLEAN DEFAULT FALSE,
|
||
pathLenConstraint INTEGER (0..MAX) OPTIONAL }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 128]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- name constraints extension OID and syntax
|
||
|
||
id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 }
|
||
|
||
NameConstraints ::= SEQUENCE {
|
||
permittedSubtrees [0] GeneralSubtrees OPTIONAL,
|
||
excludedSubtrees [1] GeneralSubtrees OPTIONAL }
|
||
|
||
GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
|
||
|
||
GeneralSubtree ::= SEQUENCE {
|
||
base GeneralName,
|
||
minimum [0] BaseDistance DEFAULT 0,
|
||
maximum [1] BaseDistance OPTIONAL }
|
||
|
||
BaseDistance ::= INTEGER (0..MAX)
|
||
|
||
-- policy constraints extension OID and syntax
|
||
|
||
id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 }
|
||
|
||
PolicyConstraints ::= SEQUENCE {
|
||
requireExplicitPolicy [0] SkipCerts OPTIONAL,
|
||
inhibitPolicyMapping [1] SkipCerts OPTIONAL }
|
||
|
||
SkipCerts ::= INTEGER (0..MAX)
|
||
|
||
-- CRL distribution points extension OID and syntax
|
||
|
||
id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= {id-ce 31}
|
||
|
||
CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
|
||
|
||
DistributionPoint ::= SEQUENCE {
|
||
distributionPoint [0] DistributionPointName OPTIONAL,
|
||
reasons [1] ReasonFlags OPTIONAL,
|
||
cRLIssuer [2] GeneralNames OPTIONAL }
|
||
|
||
DistributionPointName ::= CHOICE {
|
||
fullName [0] GeneralNames,
|
||
nameRelativeToCRLIssuer [1] RelativeDistinguishedName }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 129]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
ReasonFlags ::= BIT STRING {
|
||
unused (0),
|
||
keyCompromise (1),
|
||
cACompromise (2),
|
||
affiliationChanged (3),
|
||
superseded (4),
|
||
cessationOfOperation (5),
|
||
certificateHold (6),
|
||
privilegeWithdrawn (7),
|
||
aACompromise (8) }
|
||
|
||
-- extended key usage extension OID and syntax
|
||
|
||
id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37}
|
||
|
||
ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
|
||
|
||
KeyPurposeId ::= OBJECT IDENTIFIER
|
||
|
||
-- permit unspecified key uses
|
||
|
||
anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 }
|
||
|
||
-- extended key purpose OIDs
|
||
|
||
id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 }
|
||
id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 }
|
||
id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 }
|
||
id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 }
|
||
id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 }
|
||
id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 }
|
||
|
||
-- inhibit any policy OID and syntax
|
||
|
||
id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::= { id-ce 54 }
|
||
|
||
InhibitAnyPolicy ::= SkipCerts
|
||
|
||
-- freshest (delta)CRL extension OID and syntax
|
||
|
||
id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 }
|
||
|
||
FreshestCRL ::= CRLDistributionPoints
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 130]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- authority info access
|
||
|
||
id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
|
||
|
||
AuthorityInfoAccessSyntax ::=
|
||
SEQUENCE SIZE (1..MAX) OF AccessDescription
|
||
|
||
AccessDescription ::= SEQUENCE {
|
||
accessMethod OBJECT IDENTIFIER,
|
||
accessLocation GeneralName }
|
||
|
||
-- subject info access
|
||
|
||
id-pe-subjectInfoAccess OBJECT IDENTIFIER ::= { id-pe 11 }
|
||
|
||
SubjectInfoAccessSyntax ::=
|
||
SEQUENCE SIZE (1..MAX) OF AccessDescription
|
||
|
||
-- CRL number extension OID and syntax
|
||
|
||
id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 }
|
||
|
||
CRLNumber ::= INTEGER (0..MAX)
|
||
|
||
-- issuing distribution point extension OID and syntax
|
||
|
||
id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }
|
||
|
||
IssuingDistributionPoint ::= SEQUENCE {
|
||
distributionPoint [0] DistributionPointName OPTIONAL,
|
||
onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE,
|
||
onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE,
|
||
onlySomeReasons [3] ReasonFlags OPTIONAL,
|
||
indirectCRL [4] BOOLEAN DEFAULT FALSE,
|
||
onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
|
||
-- at most one of onlyContainsUserCerts, onlyContainsCACerts,
|
||
-- and onlyContainsAttributeCerts may be set to TRUE.
|
||
|
||
id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 }
|
||
|
||
BaseCRLNumber ::= CRLNumber
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 131]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- reason code extension OID and syntax
|
||
|
||
id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 }
|
||
|
||
CRLReason ::= ENUMERATED {
|
||
unspecified (0),
|
||
keyCompromise (1),
|
||
cACompromise (2),
|
||
affiliationChanged (3),
|
||
superseded (4),
|
||
cessationOfOperation (5),
|
||
certificateHold (6),
|
||
removeFromCRL (8),
|
||
privilegeWithdrawn (9),
|
||
aACompromise (10) }
|
||
|
||
-- certificate issuer CRL entry extension OID and syntax
|
||
|
||
id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 }
|
||
|
||
CertificateIssuer ::= GeneralNames
|
||
|
||
-- hold instruction extension OID and syntax
|
||
|
||
id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 }
|
||
|
||
HoldInstructionCode ::= OBJECT IDENTIFIER
|
||
|
||
-- ANSI x9 arc holdinstruction arc
|
||
|
||
holdInstruction OBJECT IDENTIFIER ::=
|
||
{joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2}
|
||
|
||
-- ANSI X9 holdinstructions
|
||
|
||
id-holdinstruction-none OBJECT IDENTIFIER ::=
|
||
{holdInstruction 1} -- deprecated
|
||
|
||
id-holdinstruction-callissuer OBJECT IDENTIFIER ::= {holdInstruction 2}
|
||
|
||
id-holdinstruction-reject OBJECT IDENTIFIER ::= {holdInstruction 3}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 132]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
-- invalidity date CRL entry extension OID and syntax
|
||
|
||
id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 }
|
||
|
||
InvalidityDate ::= GeneralizedTime
|
||
|
||
END
|
||
|
||
Appendix B. ASN.1 Notes
|
||
|
||
CAs MUST force the serialNumber to be a non-negative integer, that
|
||
is, the sign bit in the DER encoding of the INTEGER value MUST be
|
||
zero. This can be done by adding a leading (leftmost) `00'H octet if
|
||
necessary. This removes a potential ambiguity in mapping between a
|
||
string of octets and an integer value.
|
||
|
||
As noted in Section 4.1.2.2, serial numbers can be expected to
|
||
contain long integers. Certificate users MUST be able to handle
|
||
serialNumber values up to 20 octets in length. Conforming CAs MUST
|
||
NOT use serialNumber values longer than 20 octets.
|
||
|
||
As noted in Section 5.2.3, CRL numbers can be expected to contain
|
||
long integers. CRL validators MUST be able to handle cRLNumber
|
||
values up to 20 octets in length. Conforming CRL issuers MUST NOT
|
||
use cRLNumber values longer than 20 octets.
|
||
|
||
The construct "SEQUENCE SIZE (1..MAX) OF" appears in several ASN.1
|
||
constructs. A valid ASN.1 sequence will have zero or more entries.
|
||
The SIZE (1..MAX) construct constrains the sequence to have at least
|
||
one entry. MAX indicates that the upper bound is unspecified.
|
||
Implementations are free to choose an upper bound that suits their
|
||
environment.
|
||
|
||
The character string type PrintableString supports a very basic Latin
|
||
character set: the lowercase letters 'a' through 'z', uppercase
|
||
letters 'A' through 'Z', the digits '0' through '9', eleven special
|
||
characters ' = ( ) + , - . / : ? and space.
|
||
|
||
Implementers should note that the at sign ('@') and underscore ('_')
|
||
characters are not supported by the ASN.1 type PrintableString.
|
||
These characters often appear in Internet addresses. Such addresses
|
||
MUST be encoded using an ASN.1 type that supports them. They are
|
||
usually encoded as IA5String in either the emailAddress attribute
|
||
within a distinguished name or the rfc822Name field of GeneralName.
|
||
Conforming implementations MUST NOT encode strings that include
|
||
either the at sign or underscore character as PrintableString.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 133]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
The character string type TeletexString is a superset of
|
||
PrintableString. TeletexString supports a fairly standard (ASCII-
|
||
like) Latin character set: Latin characters with non-spacing accents
|
||
and Japanese characters.
|
||
|
||
Named bit lists are BIT STRINGs where the values have been assigned
|
||
names. This specification makes use of named bit lists in the
|
||
definitions for the key usage, CRL distribution points, and freshest
|
||
CRL certificate extensions, as well as the freshest CRL and issuing
|
||
distribution point CRL extensions. When DER encoding a named bit
|
||
list, trailing zeros MUST be omitted. That is, the encoded value
|
||
ends with the last named bit that is set to one.
|
||
|
||
The character string type UniversalString supports any of the
|
||
characters allowed by [ISO10646]. ISO 10646 is the Universal
|
||
multiple-octet coded Character Set (UCS).
|
||
|
||
The character string type UTF8String was introduced in the 1997
|
||
version of ASN.1, and UTF8String was added to the list of choices for
|
||
DirectoryString in the 2001 version of [X.520]. UTF8String is a
|
||
universal type and has been assigned tag number 12. The content of
|
||
UTF8String was defined by RFC 2044 and updated in RFC 2279, which was
|
||
updated in [RFC3629].
|
||
|
||
In anticipation of these changes, and in conformance with IETF Best
|
||
Practices codified in [RFC2277], IETF Policy on Character Sets and
|
||
Languages, this document includes UTF8String as a choice in
|
||
DirectoryString and in the userNotice certificate policy qualifier.
|
||
|
||
For many of the attribute types defined in [X.520], the
|
||
AttributeValue uses the DirectoryString type. Of the attributes
|
||
specified in Appendix A, the name, surname, givenName, initials,
|
||
generationQualifier, commonName, localityName, stateOrProvinceName,
|
||
organizationName, organizationalUnitName, title, and pseudonym
|
||
attributes all use the DirectoryString type. X.520 uses a
|
||
parameterized type definition [X.683] of DirectoryString to specify
|
||
the syntax for each of these attributes. The parameter is used to
|
||
indicate the maximum string length allowed for the attribute. In
|
||
Appendix A, in order to avoid the use of parameterized type
|
||
definitions, the DirectoryString type is written in its expanded form
|
||
for the definition of each of these attribute types. So, the ASN.1
|
||
in Appendix A describes the syntax for each of these attributes as
|
||
being a CHOICE of TeletexString, PrintableString, UniversalString,
|
||
UTF8String, and BMPString, with the appropriate constraints on the
|
||
string length applied to each of the types in the CHOICE, rather than
|
||
using the ASN.1 type DirectoryString to describe the syntax.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 134]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Implementers should note that the DER encoding of the SET OF values
|
||
requires ordering of the encodings of the values. In particular,
|
||
this issue arises with respect to distinguished names.
|
||
|
||
Implementers should note that the DER encoding of SET or SEQUENCE
|
||
components whose value is the DEFAULT omit the component from the
|
||
encoded certificate or CRL. For example, a BasicConstraints
|
||
extension whose cA value is FALSE would omit the cA boolean from the
|
||
encoded certificate.
|
||
|
||
Object Identifiers (OIDs) are used throughout this specification to
|
||
identify certificate policies, public key and signature algorithms,
|
||
certificate extensions, etc. There is no maximum size for OIDs.
|
||
This specification mandates support for OIDs that have arc elements
|
||
with values that are less than 2^28, that is, they MUST be between 0
|
||
and 268,435,455, inclusive. This allows each arc element to be
|
||
represented within a single 32-bit word. Implementations MUST also
|
||
support OIDs where the length of the dotted decimal (see Section 1.4
|
||
of [RFC4512]) string representation can be up to 100 bytes
|
||
(inclusive). Implementations MUST be able to handle OIDs with up to
|
||
20 elements (inclusive). CAs SHOULD NOT issue certificates that
|
||
contain OIDs that exceed these requirements. Likewise, CRL issuers
|
||
SHOULD NOT issue CRLs that contain OIDs that exceed these
|
||
requirements.
|
||
|
||
The content-specific rules for encoding GeneralName field values in
|
||
the nameConstraints extension differ from rules that apply in other
|
||
extensions. In all other certificate, CRL, and CRL entry extensions
|
||
specified in this document the encoding rules conform to the rules
|
||
for the underlying type. For example, values in the
|
||
uniformResourceIdentifier field must contain a valid URI as specified
|
||
in [RFC3986]. The content-specific rules for encoding values in the
|
||
nameConstraints extension are specified in Section 4.2.1.10, and
|
||
these rules may not conform to the rules for the underlying type.
|
||
For example, when the uniformResourceIdentifier field appears in a
|
||
nameConstraints extension, it must hold a DNS name (e.g.,
|
||
"host.example.com" or ".example.com") rather than a URI.
|
||
|
||
Implementors are warned that the X.500 standards community has
|
||
developed a series of extensibility rules. These rules determine
|
||
when an ASN.1 definition can be changed without assigning a new
|
||
Object Identifier (OID). For example, at least two extension
|
||
definitions included in [RFC2459], the predecessor to this profile
|
||
document, have different ASN.1 definitions in this specification, but
|
||
the same OID is used. If unknown elements appear within an
|
||
extension, and the extension is not marked as critical, those unknown
|
||
elements ought to be ignored, as follows:
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 135]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(a) ignore all unknown bit name assignments within a bit string;
|
||
|
||
(b) ignore all unknown named numbers in an ENUMERATED type or
|
||
INTEGER type that is being used in the enumerated style,
|
||
provided the number occurs as an optional element of a SET or
|
||
SEQUENCE; and
|
||
|
||
(c) ignore all unknown elements in SETs, at the end of SEQUENCEs,
|
||
or in CHOICEs where the CHOICE is itself an optional element
|
||
of a SET or SEQUENCE.
|
||
|
||
If an extension containing unexpected values is marked as critical,
|
||
the implementation MUST reject the certificate or CRL containing the
|
||
unrecognized extension.
|
||
|
||
Appendix C. Examples
|
||
|
||
This appendix contains four examples: three certificates and a CRL.
|
||
The first two certificates and the CRL comprise a minimal
|
||
certification path.
|
||
|
||
Appendix C.1 contains an annotated hex dump of a "self-signed"
|
||
certificate issued by a CA whose distinguished name is
|
||
cn=Example CA,dc=example,dc=com. The certificate contains an RSA
|
||
public key, and is signed by the corresponding RSA private key.
|
||
|
||
Appendix C.2 contains an annotated hex dump of an end entity
|
||
certificate. The end entity certificate contains an RSA public key,
|
||
and is signed by the private key corresponding to the "self-signed"
|
||
certificate in Appendix C.1.
|
||
|
||
Appendix C.3 contains an annotated hex dump of an end entity
|
||
certificate that contains a DSA public key with parameters, and is
|
||
signed with DSA and SHA-1. This certificate is not part of the
|
||
minimal certification path.
|
||
|
||
Appendix C.4 contains an annotated hex dump of a CRL. The CRL is
|
||
issued by the CA whose distinguished name is
|
||
cn=Example CA,dc=example,dc=com and the list of revoked certificates
|
||
includes the end entity certificate presented in Appendix C.2.
|
||
|
||
The certificates were processed using Peter Gutmann's dumpasn1
|
||
utility to generate the output. The source for the dumpasn1 utility
|
||
is available at <http://www.cs.auckland.ac.nz/~pgut001/dumpasn1.c>.
|
||
The binaries for the certificates and CRLs are available at
|
||
http://csrc.nist.gov/groups/ST/crypto_apps_infra/documents/pkixtools.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 136]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
In places in this appendix where a distinguished name is specified
|
||
using a string representation, the strings are formatted using the
|
||
rules specified in [RFC4514].
|
||
|
||
C.1. RSA Self-Signed Certificate
|
||
|
||
This appendix contains an annotated hex dump of a 578 byte version 3
|
||
certificate. The certificate contains the following information:
|
||
|
||
(a) the serial number is 17;
|
||
(b) the certificate is signed with RSA and the SHA-1 hash algorithm;
|
||
(c) the issuer's distinguished name is
|
||
cn=Example CA,dc=example,dc=com;
|
||
(d) the subject's distinguished name is
|
||
cn=Example CA,dc=example,dc=com;
|
||
(e) the certificate was issued on April 30, 2004 and expired on
|
||
April 30, 2005;
|
||
(f) the certificate contains a 1024-bit RSA public key;
|
||
(g) the certificate contains a subject key identifier extension
|
||
generated using method (1) of Section 4.2.1.2; and
|
||
(h) the certificate is a CA certificate (as indicated through the
|
||
basic constraints extension).
|
||
|
||
0 574: SEQUENCE {
|
||
4 423: SEQUENCE {
|
||
8 3: [0] {
|
||
10 1: INTEGER 2
|
||
: }
|
||
13 1: INTEGER 17
|
||
16 13: SEQUENCE {
|
||
18 9: OBJECT IDENTIFIER
|
||
: sha1withRSAEncryption (1 2 840 113549 1 1 5)
|
||
29 0: NULL
|
||
: }
|
||
31 67: SEQUENCE {
|
||
33 19: SET {
|
||
35 17: SEQUENCE {
|
||
37 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
49 3: IA5String 'com'
|
||
: }
|
||
: }
|
||
54 23: SET {
|
||
56 21: SEQUENCE {
|
||
58 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
70 7: IA5String 'example'
|
||
: }
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 137]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
: }
|
||
79 19: SET {
|
||
81 17: SEQUENCE {
|
||
83 3: OBJECT IDENTIFIER commonName (2 5 4 3)
|
||
88 10: PrintableString 'Example CA'
|
||
: }
|
||
: }
|
||
: }
|
||
100 30: SEQUENCE {
|
||
102 13: UTCTime 30/04/2004 14:25:34 GMT
|
||
117 13: UTCTime 30/04/2005 14:25:34 GMT
|
||
: }
|
||
132 67: SEQUENCE {
|
||
134 19: SET {
|
||
136 17: SEQUENCE {
|
||
138 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
150 3: IA5String 'com'
|
||
: }
|
||
: }
|
||
155 23: SET {
|
||
157 21: SEQUENCE {
|
||
159 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
171 7: IA5String 'example'
|
||
: }
|
||
: }
|
||
180 19: SET {
|
||
182 17: SEQUENCE {
|
||
184 3: OBJECT IDENTIFIER commonName (2 5 4 3)
|
||
189 10: PrintableString 'Example CA'
|
||
: }
|
||
: }
|
||
: }
|
||
201 159: SEQUENCE {
|
||
204 13: SEQUENCE {
|
||
206 9: OBJECT IDENTIFIER
|
||
: rsaEncryption (1 2 840 113549 1 1 1)
|
||
217 0: NULL
|
||
: }
|
||
219 141: BIT STRING, encapsulates {
|
||
223 137: SEQUENCE {
|
||
226 129: INTEGER
|
||
: 00 C2 D7 97 6D 28 70 AA 5B CF 23 2E 80 70 39 EE
|
||
: DB 6F D5 2D D5 6A 4F 7A 34 2D F9 22 72 47 70 1D
|
||
: EF 80 E9 CA 30 8C 00 C4 9A 6E 5B 45 B4 6E A5 E6
|
||
: 6C 94 0D FA 91 E9 40 FC 25 9D C7 B7 68 19 56 8F
|
||
: 11 70 6A D7 F1 C9 11 4F 3A 7E 3F 99 8D 6E 76 A5
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 138]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
: 74 5F 5E A4 55 53 E5 C7 68 36 53 C7 1D 3B 12 A6
|
||
: 85 FE BD 6E A1 CA DF 35 50 AC 08 D7 B9 B4 7E 5C
|
||
: FE E2 A3 2C D1 23 84 AA 98 C0 9B 66 18 9A 68 47
|
||
: E9
|
||
358 3: INTEGER 65537
|
||
: }
|
||
: }
|
||
: }
|
||
363 66: [3] {
|
||
365 64: SEQUENCE {
|
||
367 29: SEQUENCE {
|
||
369 3: OBJECT IDENTIFIER subjectKeyIdentifier (2 5 29 14)
|
||
374 22: OCTET STRING, encapsulates {
|
||
376 20: OCTET STRING
|
||
: 08 68 AF 85 33 C8 39 4A 7A F8 82 93 8E 70 6A 4A
|
||
: 20 84 2C 32
|
||
: }
|
||
: }
|
||
398 14: SEQUENCE {
|
||
400 3: OBJECT IDENTIFIER keyUsage (2 5 29 15)
|
||
405 1: BOOLEAN TRUE
|
||
408 4: OCTET STRING, encapsulates {
|
||
410 2: BIT STRING 1 unused bits
|
||
: '0000011'B
|
||
: }
|
||
: }
|
||
414 15: SEQUENCE {
|
||
416 3: OBJECT IDENTIFIER basicConstraints (2 5 29 19)
|
||
421 1: BOOLEAN TRUE
|
||
424 5: OCTET STRING, encapsulates {
|
||
426 3: SEQUENCE {
|
||
428 1: BOOLEAN TRUE
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
431 13: SEQUENCE {
|
||
433 9: OBJECT IDENTIFIER
|
||
: sha1withRSAEncryption (1 2 840 113549 1 1 5)
|
||
444 0: NULL
|
||
: }
|
||
446 129: BIT STRING
|
||
: 6C F8 02 74 A6 61 E2 64 04 A6 54 0C 6C 72 13 AD
|
||
: 3C 47 FB F6 65 13 A9 85 90 33 EA 76 A3 26 D9 FC
|
||
: D1 0E 15 5F 28 B7 EF 93 BF 3C F3 E2 3E 7C B9 52
|
||
: FC 16 6E 29 AA E1 F4 7A 6F D5 7F EF B3 95 CA F3
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 139]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
: 66 88 83 4E A1 35 45 84 CB BC 9B B8 C8 AD C5 5E
|
||
: 46 D9 0B 0E 8D 80 E1 33 2B DC BE 2B 92 7E 4A 43
|
||
: A9 6A EF 8A 63 61 B3 6E 47 38 BE E8 0D A3 67 5D
|
||
: F3 FA 91 81 3C 92 BB C5 5F 25 25 EB 7C E7 D8 A1
|
||
: }
|
||
|
||
C.2. End Entity Certificate Using RSA
|
||
|
||
This appendix contains an annotated hex dump of a 629-byte version 3
|
||
certificate. The certificate contains the following information:
|
||
|
||
(a) the serial number is 18;
|
||
(b) the certificate is signed with RSA and the SHA-1 hash algorithm;
|
||
(c) the issuer's distinguished name is
|
||
cn=Example CA,dc=example,dc=com;
|
||
(d) the subject's distinguished name is
|
||
cn=End Entity,dc=example,dc=com;
|
||
(e) the certificate was valid from September 15, 2004 through March
|
||
15, 2005;
|
||
(f) the certificate contains a 1024-bit RSA public key;
|
||
(g) the certificate is an end entity certificate, as the basic
|
||
constraints extension is not present;
|
||
(h) the certificate contains an authority key identifier extension
|
||
matching the subject key identifier of the certificate in
|
||
appendix C.1; and
|
||
(i) the certificate includes one alternative name -- an electronic
|
||
mail address (rfc822Name) of "end.entity@example.com".
|
||
|
||
0 625: SEQUENCE {
|
||
4 474: SEQUENCE {
|
||
8 3: [0] {
|
||
10 1: INTEGER 2
|
||
: }
|
||
13 1: INTEGER 18
|
||
16 13: SEQUENCE {
|
||
18 9: OBJECT IDENTIFIER
|
||
: sha1withRSAEncryption (1 2 840 113549 1 1 5)
|
||
29 0: NULL
|
||
: }
|
||
31 67: SEQUENCE {
|
||
33 19: SET {
|
||
35 17: SEQUENCE {
|
||
37 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
49 3: IA5String 'com'
|
||
: }
|
||
: }
|
||
54 23: SET {
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 140]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
56 21: SEQUENCE {
|
||
58 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
70 7: IA5String 'example'
|
||
: }
|
||
: }
|
||
79 19: SET {
|
||
81 17: SEQUENCE {
|
||
83 3: OBJECT IDENTIFIER commonName (2 5 4 3)
|
||
88 10: PrintableString 'Example CA'
|
||
: }
|
||
: }
|
||
: }
|
||
100 30: SEQUENCE {
|
||
102 13: UTCTime 15/09/2004 11:48:21 GMT
|
||
117 13: UTCTime 15/03/2005 11:48:21 GMT
|
||
: }
|
||
132 67: SEQUENCE {
|
||
134 19: SET {
|
||
136 17: SEQUENCE {
|
||
138 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
150 3: IA5String 'com'
|
||
: }
|
||
: }
|
||
155 23: SET {
|
||
157 21: SEQUENCE {
|
||
159 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
171 7: IA5String 'example'
|
||
: }
|
||
: }
|
||
180 19: SET {
|
||
182 17: SEQUENCE {
|
||
184 3: OBJECT IDENTIFIER commonName (2 5 4 3)
|
||
189 10: PrintableString 'End Entity'
|
||
: }
|
||
: }
|
||
: }
|
||
201 159: SEQUENCE {
|
||
204 13: SEQUENCE {
|
||
206 9: OBJECT IDENTIFIER
|
||
: rsaEncryption (1 2 840 113549 1 1 1)
|
||
217 0: NULL
|
||
: }
|
||
219 141: BIT STRING, encapsulates {
|
||
223 137: SEQUENCE {
|
||
226 129: INTEGER
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 141]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
: 00 E1 6A E4 03 30 97 02 3C F4 10 F3 B5 1E 4D 7F
|
||
: 14 7B F6 F5 D0 78 E9 A4 8A F0 A3 75 EC ED B6 56
|
||
: 96 7F 88 99 85 9A F2 3E 68 77 87 EB 9E D1 9F C0
|
||
: B4 17 DC AB 89 23 A4 1D 7E 16 23 4C 4F A8 4D F5
|
||
: 31 B8 7C AA E3 1A 49 09 F4 4B 26 DB 27 67 30 82
|
||
: 12 01 4A E9 1A B6 C1 0C 53 8B 6C FC 2F 7A 43 EC
|
||
: 33 36 7E 32 B2 7B D5 AA CF 01 14 C6 12 EC 13 F2
|
||
: 2D 14 7A 8B 21 58 14 13 4C 46 A3 9A F2 16 95 FF
|
||
: 23
|
||
358 3: INTEGER 65537
|
||
: }
|
||
: }
|
||
: }
|
||
363 117: [3] {
|
||
365 115: SEQUENCE {
|
||
367 33: SEQUENCE {
|
||
369 3: OBJECT IDENTIFIER subjectAltName (2 5 29 17)
|
||
374 26: OCTET STRING, encapsulates {
|
||
376 24: SEQUENCE {
|
||
378 22: [1] 'end.entity@example.com'
|
||
: }
|
||
: }
|
||
: }
|
||
402 29: SEQUENCE {
|
||
404 3: OBJECT IDENTIFIER subjectKeyIdentifier (2 5 29 14)
|
||
409 22: OCTET STRING, encapsulates {
|
||
411 20: OCTET STRING
|
||
: 17 7B 92 30 FF 44 D6 66 E1 90 10 22 6C 16 4F C0
|
||
: 8E 41 DD 6D
|
||
: }
|
||
: }
|
||
433 31: SEQUENCE {
|
||
435 3: OBJECT IDENTIFIER
|
||
: authorityKeyIdentifier (2 5 29 35)
|
||
440 24: OCTET STRING, encapsulates {
|
||
442 22: SEQUENCE {
|
||
444 20: [0]
|
||
: 08 68 AF 85 33 C8 39 4A 7A F8 82 93 8E 70 6A
|
||
: 4A 20 84 2C 32
|
||
: }
|
||
: }
|
||
: }
|
||
466 14: SEQUENCE {
|
||
468 3: OBJECT IDENTIFIER keyUsage (2 5 29 15)
|
||
473 1: BOOLEAN TRUE
|
||
476 4: OCTET STRING, encapsulates {
|
||
478 2: BIT STRING 6 unused bits
|
||
: '11'B
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 142]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
482 13: SEQUENCE {
|
||
484 9: OBJECT IDENTIFIER
|
||
: sha1withRSAEncryption (1 2 840 113549 1 1 5)
|
||
495 0: NULL
|
||
: }
|
||
497 129: BIT STRING
|
||
: 00 20 28 34 5B 68 32 01 BB 0A 36 0E AD 71 C5 95
|
||
: 1A E1 04 CF AE AD C7 62 14 A4 1B 36 31 C0 E2 0C
|
||
: 3D D9 1E C0 00 DC 10 A0 BA 85 6F 41 CB 62 7A B7
|
||
: 4C 63 81 26 5E D2 80 45 5E 33 E7 70 45 3B 39 3B
|
||
: 26 4A 9C 3B F2 26 36 69 08 79 BB FB 96 43 77 4B
|
||
: 61 8B A1 AB 91 64 E0 F3 37 61 3C 1A A3 A4 C9 8A
|
||
: B2 BF 73 D4 4D E4 58 E4 62 EA BC 20 74 92 86 0E
|
||
: CE 84 60 76 E9 73 BB C7 85 D3 91 45 EA 62 5D CD
|
||
: }
|
||
|
||
C.3. End Entity Certificate Using DSA
|
||
|
||
This appendix contains an annotated hex dump of a 914-byte version 3
|
||
certificate. The certificate contains the following information:
|
||
|
||
(a) the serial number is 256;
|
||
|
||
(b) the certificate is signed with DSA and the SHA-1 hash algorithm;
|
||
|
||
(c) the issuer's distinguished name is cn=Example DSA
|
||
CA,dc=example,dc=com;
|
||
|
||
(d) the subject's distinguished name is cn=DSA End
|
||
Entity,dc=example,dc=com;
|
||
|
||
(e) the certificate was issued on May 2, 2004 and expired on May 2,
|
||
2005;
|
||
|
||
(f) the certificate contains a 1024-bit DSA public key with
|
||
parameters;
|
||
|
||
(g) the certificate is an end entity certificate (not a CA
|
||
certificate);
|
||
|
||
(h) the certificate includes a subject alternative name of
|
||
"<http://www.example.com/users/DSAendentity.html>" and an issuer
|
||
alternative name of "<http://www.example.com>" -- both are URLs;
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 143]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
(i) the certificate includes an authority key identifier extension
|
||
and a certificate policies extension specifying the policy OID
|
||
2.16.840.1.101.3.2.1.48.9; and
|
||
|
||
(j) the certificate includes a critical key usage extension
|
||
specifying that the public key is intended for verification of
|
||
digital signatures.
|
||
|
||
0 910: SEQUENCE {
|
||
4 846: SEQUENCE {
|
||
8 3: [0] {
|
||
10 1: INTEGER 2
|
||
: }
|
||
13 2: INTEGER 256
|
||
17 9: SEQUENCE {
|
||
19 7: OBJECT IDENTIFIER dsaWithSha1 (1 2 840 10040 4 3)
|
||
: }
|
||
28 71: SEQUENCE {
|
||
30 19: SET {
|
||
32 17: SEQUENCE {
|
||
34 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
46 3: IA5String 'com'
|
||
: }
|
||
: }
|
||
51 23: SET {
|
||
53 21: SEQUENCE {
|
||
55 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
67 7: IA5String 'example'
|
||
: }
|
||
: }
|
||
76 23: SET {
|
||
78 21: SEQUENCE {
|
||
80 3: OBJECT IDENTIFIER commonName (2 5 4 3)
|
||
85 14: PrintableString 'Example DSA CA'
|
||
: }
|
||
: }
|
||
: }
|
||
101 30: SEQUENCE {
|
||
103 13: UTCTime 02/05/2004 16:47:38 GMT
|
||
118 13: UTCTime 02/05/2005 16:47:38 GMT
|
||
: }
|
||
133 71: SEQUENCE {
|
||
135 19: SET {
|
||
137 17: SEQUENCE {
|
||
139 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 144]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
151 3: IA5String 'com'
|
||
: }
|
||
: }
|
||
156 23: SET {
|
||
158 21: SEQUENCE {
|
||
160 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
172 7: IA5String 'example'
|
||
: }
|
||
: }
|
||
181 23: SET {
|
||
183 21: SEQUENCE {
|
||
185 3: OBJECT IDENTIFIER commonName (2 5 4 3)
|
||
190 14: PrintableString 'DSA End Entity'
|
||
: }
|
||
: }
|
||
: }
|
||
206 439: SEQUENCE {
|
||
210 300: SEQUENCE {
|
||
214 7: OBJECT IDENTIFIER dsa (1 2 840 10040 4 1)
|
||
223 287: SEQUENCE {
|
||
227 129: INTEGER
|
||
: 00 B6 8B 0F 94 2B 9A CE A5 25 C6 F2 ED FC FB 95
|
||
: 32 AC 01 12 33 B9 E0 1C AD 90 9B BC 48 54 9E F3
|
||
: 94 77 3C 2C 71 35 55 E6 FE 4F 22 CB D5 D8 3E 89
|
||
: 93 33 4D FC BD 4F 41 64 3E A2 98 70 EC 31 B4 50
|
||
: DE EB F1 98 28 0A C9 3E 44 B3 FD 22 97 96 83 D0
|
||
: 18 A3 E3 BD 35 5B FF EE A3 21 72 6A 7B 96 DA B9
|
||
: 3F 1E 5A 90 AF 24 D6 20 F0 0D 21 A7 D4 02 B9 1A
|
||
: FC AC 21 FB 9E 94 9E 4B 42 45 9E 6A B2 48 63 FE
|
||
: 43
|
||
359 21: INTEGER
|
||
: 00 B2 0D B0 B1 01 DF 0C 66 24 FC 13 92 BA 55 F7
|
||
: 7D 57 74 81 E5
|
||
382 129: INTEGER
|
||
: 00 9A BF 46 B1 F5 3F 44 3D C9 A5 65 FB 91 C0 8E
|
||
: 47 F1 0A C3 01 47 C2 44 42 36 A9 92 81 DE 57 C5
|
||
: E0 68 86 58 00 7B 1F F9 9B 77 A1 C5 10 A5 80 91
|
||
: 78 51 51 3C F6 FC FC CC 46 C6 81 78 92 84 3D F4
|
||
: 93 3D 0C 38 7E 1A 5B 99 4E AB 14 64 F6 0C 21 22
|
||
: 4E 28 08 9C 92 B9 66 9F 40 E8 95 F6 D5 31 2A EF
|
||
: 39 A2 62 C7 B2 6D 9E 58 C4 3A A8 11 81 84 6D AF
|
||
: F8 B4 19 B4 C2 11 AE D0 22 3B AA 20 7F EE 1E 57
|
||
: 18
|
||
: }
|
||
: }
|
||
514 132: BIT STRING, encapsulates {
|
||
518 128: INTEGER
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 145]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
: 30 B6 75 F7 7C 20 31 AE 38 BB 7E 0D 2B AB A0 9C
|
||
: 4B DF 20 D5 24 13 3C CD 98 E5 5F 6C B7 C1 BA 4A
|
||
: BA A9 95 80 53 F0 0D 72 DC 33 37 F4 01 0B F5 04
|
||
: 1F 9D 2E 1F 62 D8 84 3A 9B 25 09 5A 2D C8 46 8E
|
||
: 2B D4 F5 0D 3B C7 2D C6 6C B9 98 C1 25 3A 44 4E
|
||
: 8E CA 95 61 35 7C CE 15 31 5C 23 13 1E A2 05 D1
|
||
: 7A 24 1C CB D3 72 09 90 FF 9B 9D 28 C0 A1 0A EC
|
||
: 46 9F 0D B8 D0 DC D0 18 A6 2B 5E F9 8F B5 95 BE
|
||
: }
|
||
: }
|
||
649 202: [3] {
|
||
652 199: SEQUENCE {
|
||
655 57: SEQUENCE {
|
||
657 3: OBJECT IDENTIFIER subjectAltName (2 5 29 17)
|
||
662 50: OCTET STRING, encapsulates {
|
||
664 48: SEQUENCE {
|
||
666 46: [6]
|
||
: 'http://www.example.com/users/DSAendentity.'
|
||
: 'html'
|
||
: }
|
||
: }
|
||
: }
|
||
714 33: SEQUENCE {
|
||
716 3: OBJECT IDENTIFIER issuerAltName (2 5 29 18)
|
||
721 26: OCTET STRING, encapsulates {
|
||
723 24: SEQUENCE {
|
||
725 22: [6] 'http://www.example.com'
|
||
: }
|
||
: }
|
||
: }
|
||
749 29: SEQUENCE {
|
||
751 3: OBJECT IDENTIFIER subjectKeyIdentifier (2 5 29 14)
|
||
756 22: OCTET STRING, encapsulates {
|
||
758 20: OCTET STRING
|
||
: DD 25 66 96 43 AB 78 11 43 44 FE 95 16 F9 D9 B6
|
||
: B7 02 66 8D
|
||
: }
|
||
: }
|
||
780 31: SEQUENCE {
|
||
782 3: OBJECT IDENTIFIER
|
||
: authorityKeyIdentifier (2 5 29 35)
|
||
787 24: OCTET STRING, encapsulates {
|
||
789 22: SEQUENCE {
|
||
791 20: [0]
|
||
: 86 CA A5 22 81 62 EF AD 0A 89 BC AD 72 41 2C
|
||
: 29 49 F4 86 56
|
||
: }
|
||
: }
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 146]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
: }
|
||
813 23: SEQUENCE {
|
||
815 3: OBJECT IDENTIFIER certificatePolicies (2 5 29 32)
|
||
820 16: OCTET STRING, encapsulates {
|
||
822 14: SEQUENCE {
|
||
824 12: SEQUENCE {
|
||
826 10: OBJECT IDENTIFIER '2 16 840 1 101 3 2 1 48 9'
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
838 14: SEQUENCE {
|
||
840 3: OBJECT IDENTIFIER keyUsage (2 5 29 15)
|
||
845 1: BOOLEAN TRUE
|
||
848 4: OCTET STRING, encapsulates {
|
||
850 2: BIT STRING 7 unused bits
|
||
: '1'B (bit 0)
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
854 9: SEQUENCE {
|
||
856 7: OBJECT IDENTIFIER dsaWithSha1 (1 2 840 10040 4 3)
|
||
: }
|
||
865 47: BIT STRING, encapsulates {
|
||
868 44: SEQUENCE {
|
||
870 20: INTEGER
|
||
: 65 57 07 34 DD DC CA CC 5E F4 02 F4 56 42 2C 5E
|
||
: E1 B3 3B 80
|
||
892 20: INTEGER
|
||
: 60 F4 31 17 CA F4 CF FF EE F4 08 A7 D9 B2 61 BE
|
||
: B1 C3 DA BF
|
||
: }
|
||
: }
|
||
: }
|
||
|
||
C.4. Certificate Revocation List
|
||
|
||
This appendix contains an annotated hex dump of a version 2 CRL with
|
||
two extensions (cRLNumber and authorityKeyIdentifier). The CRL was
|
||
issued by cn=Example CA,dc=example,dc=com on February 5, 2005; the
|
||
next scheduled issuance was February 6, 2005. The CRL includes one
|
||
revoked certificate: serial number 18, which was revoked on November
|
||
19, 2004 due to keyCompromise. The CRL itself is number 12, and it
|
||
was signed with RSA and SHA-1.
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 147]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
0 352: SEQUENCE {
|
||
4 202: SEQUENCE {
|
||
7 1: INTEGER 1
|
||
10 13: SEQUENCE {
|
||
12 9: OBJECT IDENTIFIER
|
||
: sha1withRSAEncryption (1 2 840 113549 1 1 5)
|
||
23 0: NULL
|
||
: }
|
||
25 67: SEQUENCE {
|
||
27 19: SET {
|
||
29 17: SEQUENCE {
|
||
31 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
43 3: IA5String 'com'
|
||
: }
|
||
: }
|
||
48 23: SET {
|
||
50 21: SEQUENCE {
|
||
52 10: OBJECT IDENTIFIER
|
||
: domainComponent (0 9 2342 19200300 100 1 25)
|
||
64 7: IA5String 'example'
|
||
: }
|
||
: }
|
||
73 19: SET {
|
||
75 17: SEQUENCE {
|
||
77 3: OBJECT IDENTIFIER commonName (2 5 4 3)
|
||
82 10: PrintableString 'Example CA'
|
||
: }
|
||
: }
|
||
: }
|
||
94 13: UTCTime 05/02/2005 12:00:00 GMT
|
||
109 13: UTCTime 06/02/2005 12:00:00 GMT
|
||
124 34: SEQUENCE {
|
||
126 32: SEQUENCE {
|
||
128 1: INTEGER 18
|
||
131 13: UTCTime 19/11/2004 15:57:03 GMT
|
||
146 12: SEQUENCE {
|
||
148 10: SEQUENCE {
|
||
150 3: OBJECT IDENTIFIER cRLReason (2 5 29 21)
|
||
155 3: OCTET STRING, encapsulates {
|
||
157 1: ENUMERATED 1
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
160 47: [0] {
|
||
162 45: SEQUENCE {
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 148]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
164 31: SEQUENCE {
|
||
166 3: OBJECT IDENTIFIER
|
||
: authorityKeyIdentifier (2 5 29 35)
|
||
171 24: OCTET STRING, encapsulates {
|
||
173 22: SEQUENCE {
|
||
175 20: [0]
|
||
: 08 68 AF 85 33 C8 39 4A 7A F8 82 93 8E 70 6A
|
||
: 4A 20 84 2C 32
|
||
: }
|
||
: }
|
||
: }
|
||
197 10: SEQUENCE {
|
||
199 3: OBJECT IDENTIFIER cRLNumber (2 5 29 20)
|
||
204 3: OCTET STRING, encapsulates {
|
||
206 1: INTEGER 12
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
: }
|
||
209 13: SEQUENCE {
|
||
211 9: OBJECT IDENTIFIER
|
||
: sha1withRSAEncryption (1 2 840 113549 1 1 5)
|
||
222 0: NULL
|
||
: }
|
||
224 129: BIT STRING
|
||
: 22 DC 18 7D F7 08 CE CC 75 D0 D0 6A 9B AD 10 F4
|
||
: 76 23 B4 81 6E B5 6D BE 0E FB 15 14 6C C8 17 6D
|
||
: 1F EE 90 17 A2 6F 60 E4 BD AA 8C 55 DE 8E 84 6F
|
||
: 92 F8 9F 10 12 27 AF 4A D4 2F 85 E2 36 44 7D AA
|
||
: A3 4C 25 38 15 FF 00 FD 3E 7E EE 3D 26 12 EB D8
|
||
: E7 2B 62 E2 2B C3 46 80 EF 78 82 D1 15 C6 D0 9C
|
||
: 72 6A CB CE 7A ED 67 99 8B 6E 70 81 7D 43 42 74
|
||
: C1 A6 AF C1 55 17 A2 33 4C D6 06 98 2B A4 FC 2E
|
||
: }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 149]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Authors' Addresses
|
||
|
||
David Cooper
|
||
National Institute of Standards and Technology
|
||
100 Bureau Drive, Mail Stop 8930
|
||
Gaithersburg, MD 20899-8930
|
||
USA
|
||
EMail: david.cooper@nist.gov
|
||
|
||
Stefan Santesson
|
||
Microsoft
|
||
One Microsoft Way
|
||
Redmond, WA 98052
|
||
USA
|
||
EMail: stefans@microsoft.com
|
||
|
||
Stephen Farrell
|
||
Distributed Systems Group
|
||
Computer Science Department
|
||
Trinity College Dublin
|
||
Ireland
|
||
EMail: stephen.farrell@cs.tcd.ie
|
||
|
||
Sharon Boeyen
|
||
Entrust
|
||
1000 Innovation Drive
|
||
Ottawa, Ontario
|
||
Canada K2K 3E7
|
||
EMail: sharon.boeyen@entrust.com
|
||
|
||
Russell Housley
|
||
Vigil Security, LLC
|
||
918 Spring Knoll Drive
|
||
Herndon, VA 20170
|
||
USA
|
||
EMail: housley@vigilsec.com
|
||
|
||
Tim Polk
|
||
National Institute of Standards and Technology
|
||
100 Bureau Drive, Mail Stop 8930
|
||
Gaithersburg, MD 20899-8930
|
||
USA
|
||
EMail: wpolk@nist.gov
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 150]
|
||
|
||
RFC 5280 PKIX Certificate and CRL Profile May 2008
|
||
|
||
|
||
Full Copyright Statement
|
||
|
||
Copyright (C) The IETF Trust (2008).
|
||
|
||
This document is subject to the rights, licenses and restrictions
|
||
contained in BCP 78, and except as set forth therein, the authors
|
||
retain all their rights.
|
||
|
||
This document and the information contained herein are provided on an
|
||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
|
||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
|
||
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
|
||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
|
||
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
|
||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
Intellectual Property
|
||
|
||
The IETF takes no position regarding the validity or scope of any
|
||
Intellectual Property Rights or other rights that might be claimed to
|
||
pertain to the implementation or use of the technology described in
|
||
this document or the extent to which any license under such rights
|
||
might or might not be available; nor does it represent that it has
|
||
made any independent effort to identify any such rights. Information
|
||
on the procedures with respect to rights in RFC documents can be
|
||
found in BCP 78 and BCP 79.
|
||
|
||
Copies of IPR disclosures made to the IETF Secretariat and any
|
||
assurances of licenses to be made available, or the result of an
|
||
attempt made to obtain a general license or permission for the use of
|
||
such proprietary rights by implementers or users of this
|
||
specification can be obtained from the IETF on-line IPR repository at
|
||
http://www.ietf.org/ipr.
|
||
|
||
The IETF invites any interested party to bring to its attention any
|
||
copyrights, patents or patent applications, or other proprietary
|
||
rights that may cover technology that may be required to implement
|
||
this standard. Please address the information to the IETF at
|
||
ietf-ipr@ietf.org.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Cooper, et al. Standards Track [Page 151]
|
||
|