Hi Christian, The purpose of this mail is to give you a *brief* tour of important aspects of the sub-CAs feature and its implementation, and provide some orientation for implementing the Python API for subcas, for reviewing and testing the feature, or for helping with development. Full(er) details are in the design proposal: http://pki.fedoraproject.org/wiki/Lightweight_sub-CAs I have copied pki-devel@ because this overview is likely to be of interest to anyone reviewing or testing the sub-CAs feature. On with the details: - The initial release of sub-CAs is exclusively to support sub-CAs in FreeIPA, and will not initially be supported as a general feature. As such, some features (such as Dogtag web-UI for dealing with sub-CAs) are deferred. - Sub-CAs can be created underneath the "top-level CA" (which may or may not be a root CA), or underneath other sub-CAs. Eventually we will support hosting unrelated CAs but this is not an immediate requirement, and is implemented. - class SubCAService implements the SubCAResource interface. This is the REST API that the Python subca API will abstract. It currently provides two methods - createCA and getCA. For now, we are not intending to provide a delete method, but we may need to implement disable/enable and list/search methods. - Submitting certificate or revocation requests and other interactions with the web servlets involve a new URL query parameter - `?caRef=<subca-handle>'. When testing the feature, you only need to do this on the first page of the workflow - it will then be propagated through subsequent pages (if it is not propagated, that is a bug) - The main `CertificateAuthority' class grew a `getSubCA(handle)' method. This splits the handle apart and recursively searches for the appointed sub-CA. - Signing keys are stored in the same NSSDB as the top-level CA's signing key; the key nickname is suffixed with the ca's handle. - All CAs/Sub-CAs in an instance share a single, flat request queue, but certificates are stored in nested certificate repositories. - The caRef (if any) is stored with each request (which has 'objectclass: extensibleObject') for locating the appointed sub-CA or certificate repository when the request is processed. The key is "req_authority_ref". See `IEnrollProfile.java' - The sub-CA signing key is used for OCSP signing as well. OSCP/CRL signing delegation could be implemented later. For the Python API, it will probably follow a similar pattern to the existing modules, e.g. `pki.cert' or `pki.profile'. The Python API lives under `base/common/python/'. OK, let me know your questions! Cheers, Fraser
participants (1)
-
Fraser Tweedale