I have a pki infrastructure for internal company use. In this pki there are multiple registration authorities whose responsibility is to.
- receive certificate issuance requests
- verify the identity of the user/device/entity requesting the certificate
- forward the certificate signing request to the CA if the verification is successful.
The CA hierarchy is made of a RootCA, under which there are multiple intermediate CAs. Intermediate CAs are in a 1:1 mapping with Registration authorities. For each Registration Authority onboarded on the system there will be a corresponding Intermediate CA . The certificates requested through a given Registration Authority will be issued by the Intermediate CA that corresponds to it.
Each CA, will publish a CRL of the revoked certificates.
Under the model above a given entity can request and receive certificates through multiple RAs. Es. An entity X could “own” multiple certificates to attest its identity (es. CN: entity A Issuer: Intermediate CA RA 1, CN: entity A Issuer: Intermediate CA RA 2).
Since Registration authorities can apply distinct criteria, procedures and security standards for the end entity verification, a service that wants to authenticate entities based on the certificates issued by this pki infrastructure might want to trust only the certificate issued through some specific Registration Authorities and not others.
What is the best approach (best= most common/most secure/most supported) to allow relying parties to selectively trust only the certificates issued by a given RA?
The relying party keeps in its trust store and treats as trust anchors only the intermediate CA certificates corresponding to the RAs that it trusts. the RP does not keep in its trust store the RootCA certificate. The RP trusts any end certificates that has a chain that connects the ceritificate to any of the trusted intermediate CAs
Consequences:
1. In this case the RP, not trusting the rootCA will not be able to validate if the given Intermediate CA certificate was revoked, assuming the CRL is signed by the root CA.
2. this implies that a mechanism exists for the CA infrastructure to communicate to relying parties the Intermediate CAs certificate that are “valid” and can be trusted for a given use cases
3. what is the purpose of having a root CA at all if the trust anchors are always the intermediate CAs ?The relying party keeps only the root ca in its trust store, and it trusts any end certificate that has a valid chain that
- connects the certificate to that root ca and
- whose content satisfies a set of additional constraints.
As an example the RP could verify that:
- the Issuer of the end certificate is the intended Intermediate CA (based on a convention on the name of the CA)
- the end certificate subject fields contain specific information, such as the Organisational Unit subfield matches a pattern or has a specific value. In this case there would need to be a 1:1 mapping between the RA/CA and the OUs in the certificates. So that given the OU of the certificate the RP can know which RA/CA issued it. (https://docs.oracle.com/cd/E24191_01/common/tutorials/authz_cert_attributes.html)
- the end certificate contains a specific Certificate Policy Extension (https://www.ietf.org/rfc/rfc5280.txt 4.2.1.4. Certificate Policies) In this case there would need to be a 1:1 mapping between RA/CAs and Certificate policies. We would need to reserve one new Certificate policy OID per each CA/RA. This seems to be what Windows/AD does with their own pki solution, calling these “application policies” (https://www.pkisolutions.com/object-identifiers-oid-in-pki/)
Consequences:
1. this implies there is a governance model for the pki infrastructure that guarantees that the certificates produced by each RA/CA pair can be distinguished based on some "intrinsic" properties from the certificates produced by any other RA/CA pair....are there other alternatives?