Certificate Profile
Certificate Profile
14 May 2021
Corda Network Certificate Profile 1.0.
Purpose
This document provides the reference for the Certificate Profile, as a component part of the Certificate Policy for the Corda Network.
Certificate Hierarchy
The diagram below illustrates the certificate hierarchy of the Corda Network. The PKI (Public Key Infrastructure) is separated into two components:
- Corda Network certificates which are issued and operated by the Corda Network Foundation (currently R3).
- Corda Node certificates which are issued by the node and controlled by the Node Operator.
Certificate Cipher Suite and Algorithms
The table below lists the cipher suite and algorithms required by each certificate in the Corda certificate hierarchy.
Certificate | Cipher Suite | Signature Hash | Parameters | Lifetime | Notes |
---|---|---|---|---|---|
Corda Foundation Root CA | ECDSA with SHA-256 | SHA-256 | ECDSA_P256 | 20 years | Permanently offline |
Subordinate (Issuing) CA | ECDSA with SHA-256 | SHA-256 | ECDSA_P256 | 20 years | Online subordinate root |
Doorman CA | ECDSA with SHA-256 | SHA-256 | ECDSA_P256 | 20 years | Network CA (Issues Node certificates) |
Network Map | ECDSA with SHA-256 | SHA-256 | ECDSA_P256 | 20 years | Signs the Network Map & Network Parameters |
Service Identity | ECDSA with SHA-256 | SHA-256 | ECDSA_P256 | 20 years | Notary Signing Key |
Node CA | ECDSA with SHA-256 | SHA-256 | ECDSA_P256 | 20 years | Must contain Name Constraint extension |
Legal Identity | ECDSA with SHA-256 | SHA-256 | ECDSA_P256 | 20 years* | |
Node TLS | ECDSA with SHA-256 | SHA-256 | ECDSA_P256 | 20 years* | Expiration defined by node operator |
Confidential Identity | ECDSA with SHA-256 | SHA-256 | ECDSA_P256 | - | Deprecated |
Node Legal Identity and TLS certificates are issued by the Node CA. The lifespan of these certificates is defined by the node operator, but by default will have the same lifespan as the issuing NodeCA.
Certificate Profiles
The following section provides the certificate profiles of all certificates in the Corda Network.
Extension | Status | Constraints |
---|---|---|
basicConstraints | CRITICAL | (1) This extension MUST appear as a CRITICAL extension. (2) The CA field MUST be set TRUE. (3) the pathLenConstraint field SHOULD NOT be present. |
keyUsage | CRITICAL | (1) This extension MUST appear as a CRITICAL extension. (2) Bit positions for keyCertSign and cRLSign MUST be set. (3) if the Root CA Private key is used for signing OCSP responses, then the digitalSignature bit MUST be set. |
certificatePolicies | NOT PRESENT | This extension SHOULD NOT be present. |
extendedKeyUsage | NOT PRESENT | This extension MUST NOT be present. |
Subordinate CA Certificate
Field | Status | Constraints |
---|---|---|
certificatePolicies | REQUIRED | (1)This extension MUST be present and SHOULD NOT be marked as CRITICAL. (2) REQUIRED certificatePolicies: policyIdentifier. (3) OPTIONAL certificatePolicies: policyQualifiers: policyQualifierID. (4) OPTIONAL certificatePolicies: policyQualifiers: qualifier: cPSuri. |
cRLDistributionPoints | REQUIRED | (1) This extension MUST be present and SHOULD NOT be marked as CRITICAL. (2) It MUST contain the HTTP URL of the CA’s CRL service |
authorityInformationAccess | REQUIRED | (1) With the exception of stapling, which is noted below, this extension MUST be present. (2) It MUST NOT be marked as CRITICAL. (3) It MUST contain the URL of the issuing CA’s OCSP responder (accessMethod = 1.3.6.1.5.5.7.48.1). (4) It SGOULD also contain the HTTP URL of the Issuing CA’s certificate (accessMethod = 1.3.6.1.5.5.7.48.2). (5) The HTTP URL of the Issuing CA’s OCSP responder MAY be omitted, provided that the Subscriber “staples” the OCSP response for the Certificate in its TLS handshakes [RFC4366] |
basicConstraints | CRITICAL | (1) This extension MUST appear as a CRITICAL extension. (2) The CA field MUST be set true. (3) The pathLenConstraint field SHOULD NOT be present. |
keyUsage | CRITICAL | (1) This extension MUST be present and MUST be marked CRITICAL. (2) Bit positions for keyCertSign and cRLSign MUST be set. (3) If Issuing CA Private Key is used for signing OCSP responses, then the digitalSignature bit MUST be set. |
nameConstraints | OPTIONAL | If present, this extension SHOULD be marked CRITICAL. |
extkeyUsage | OPTIONAL | For Subordinate CA Certificates to be technically constrained in line with section 7.1.5, then either the value id-kp-serverAuth [RFC5280] or id-kp-clientAuth [RFC5280] or both values MUST be present. |
All Certificates
All certificates issued under a Corda Subordinate CA must have the following common property:
Field | Status | Constraint |
---|---|---|
certRole (1.3.6.1.4.1.50530.1.1) | REQUIRED | (1) This extension MUST be present and SHOULD NOT be marked as CRITICAL. (2) certRole is a custom X.509 extension. It has been registered with OID 1.3.6.1.4.1.50530.1.1. |
Corda uses a custom X.509 extension to represent the purpose of each certificate in the Corda PKI. This extension is referred to as the Certificate Role and has an OID of 1.3.6.1.4.1.50530.1.1. The extension contains a single ASN.1 integer which defines the certificate’s role.
Certificate Role | Value | ASN.1 encoding |
---|---|---|
Doorman CA | 1 | 02 01 01 |
Network Map | 2 | 02 01 02 |
Service Identity | 3 | 02 01 03 |
Node CA | 4 | 02 01 04 |
TLS | 5 | 02 01 05 |
Legal Identity | 6 | 02 01 06 |
Confidential Identity | 7 | 02 01 07 |
Doorman CA
Field | Status | Constraint |
---|---|---|
basicConstraints | CRITICAL | (1) This extension MUST appear as a CRITICAL extension. (2) This CA field MUST be set true. (3) The pathLenConstraint field MAY be set to 2. |
keyUsage | CRITICAL | (1) This extension MUST be present and MUST be market CRITICAL. (2) Bit positions for keyCertSign and cRLSign Must be set. (3) If the Doorman CA Private Key is used for signing OCSP responses, then the digitalSignature bit MUST be set. |
certRole (1.3.6.1.4.1.50530.1.1) | REQUIRED | (1) This extension MUST be present and SHOULD NOT be marked as CRITICAL. (2) certRole is a custom extension with OID 1.3.6.1.4.1.50530.1.1. (3) It SHOULD contain the value 02 01 01 which corresponds to Doorman_CA. |
Network Map
Field | Status | Constraint |
---|---|---|
basicConstraints | OPTIONAL | If present, the CA field MUST be set to false. |
keyUsage | CRITICAL | (1) This extension MUST be present and MUST be market CRITICAL. (2) The Bit positions for digitalSignature MUST be set. |
certRole (1.3.6.1.4.1.50530.1.1) | REQUIRED | (1) This extension MUST be present and SHOULD NOT be marked as CRITICAL. (2) certRole is a custom extension with OID 1.3.6.1.4.1.50530.1.1. (3) It SHOULD contain the value 02 01 02 which corresponds to NETWORK_MAP. |
Service Identity
Field | Status | Constraint |
---|---|---|
basicConstraints | OPTIONAL | If present, the CA field MUST be set to false. |
keyUsage | CRITICAL | (1) This extension MUST be present and MUST be market CRITICAL. (2) The Bit positions for digitalSignature MUST be set. |
certRole (1.3.6.1.4.1.50530.1.1) | REQUIRED | (1) This extension MUST be present and MUST be marked as CRITICAL. (2) certRole is a custom extension with OID 1.3.6.1.4.1.50530.1.1. (3) It SHOULD contain the value 02 01 03 which corresponds to SERVICE_IDENTITY. |
Node CA
Field | Status | Constraint |
---|---|---|
basicConstraints | CRITICAL | (1) This extension MUST appear as a CRITICAL extension. (2) The CA field MUST be set true. (3) The pathLenConstraint field MAY be set to 1. |
keyUsage | CRITICAL | (1) This extension MUST be present and MUST be marked CRITICAL. (2) Bit positions for keyCertSIgn and cRLSign MUST be set. (3) If the Node CA Private Key is used for signing OCSP responses, then the digitalSignature bit MUST be set. |
nameConstraints | CRITICAL | (1) This extension MUST be present and MUST be marked CRITICAL. (2) Permitted subtree MUST be present. (3) REQUIRED DirectoryName MUST be present and should contain the X.500 distinguished name of the node - it’s ‘Legal Identity’ in the Corda Network. (4) Excluded subtree SHOULD NOT be present. |
certRole (1.3.6.1.4.1.50530.1.1) | REQUIRED | (1) This extension MUST be present and SHOULD NOT be marked as CRITICAL. (2) certRole is a custom extension with OID 1.3.6.1.4.1.50530.1.1. (3) It SHOULD contain the value 02 01 04 which corresponds to NODE_CA. |