14.9. Configuration for Server-Side Key Generation for Certificate Enrollment using the CA EE Portal This section describes how to configure Server-Side Key Generation for Certificate Enrollment using the CA EE Portal. 14.9.1. Installation Configuration Note A KRA instance is required in addition to the CA for setting up Server-Side Keygen. Note In case the CA and KRA are sharing a Tomcat instance, you do not need to execute the below step to import the transport certificate. After installing the CA and KRA instances, in case of stand-alone Tomcat web server instances, you would need to add the KRA transport certificate to the nssdb of the CA. First, stop the CA: For example: Add the below line to the CA's CS.cfg : For example: where topology-02-KRA is the name of the KRA's instance. Find and export the KRA transport certificate into a file: For example: Import the KRA transport certificate into the nssdb of the CA, using the nickname specified in the CA's CS.cfg file: List the transport certificate nickname: For example: Import the certificate using the nickname listed from the step: For example: Start the CA: For example: 14.9.2. Profile Configuration Two default profiles, caServerKeygen_UserCert and caServerKeygen_DirUserCert , are provided by default to allow for certificate enrollments where keys are generated on the server side. However, any profile with the right input, output, and policy set could be turned into a server-side keygen profile. A Server-Side Keygen profile must contain the following components. Input Output Policyset Key type and key size parameters can be configured as exemplified below: Authentication The two default server-side keygen enrollment profiles differ in the authentication mechanism, where caServerKeygen_UserCert.cfg contains an empty value to "auth.class_id=" , meaning that enrollment requests through this profile will require approval from a CA agent. caServerKeygen_DirUserCert.cfg contains "auth.instance_id=UserDirEnrollment" , meaning that the user is required to pass LDAP uid/password authentication; such authentication mechanism is considered as an automatic certificate issuance as it does not require per-request approval from a CA agent. Automatic approval could be configured by setting the auth.instance_id directive to any compatible authentication plugin class, as examplified in the caServerKeygen_DirUserCert.cfg profile mentioned above. Here is an example of such a configuration in the CS.cfg file:

Commands:
systemctl stop pki-tomcatd@ ca_instance_name .service
systemctl stop pki-tomcatd@pki-ca.service
ca.connector.KRA.transportCertNickname= KRA transport cert
ca.connector.KRA.transportCertNickname=transportCert cert-topology-02-KRA KRA
grep "kra.transport.cert=" /var/lib/pki/ kra_instance_name /kra/conf/CS.cfg | sed 's/kra.transport.cert=//' > kra transport cert file
grep "kra.transport.cert=" /var/lib/pki/pki-kra/kra/conf/CS.cfg | sed 's/kra.transport.cert=//' > /tmp/kraTransport.cert
grep "ca.connector.KRA.transportCertNickname" /var/lib/pki/ ca_instance_name /ca/conf/CS.cfg
grep "ca.connector.KRA.transportCertNickname" /var/lib/pki/pki-ca/ca/conf/CS.cfg ca.connector.KRA.transportCertNickname=KRA transport cert
certutil -d /var/lib/pki/ ca_instance_name /alias -A -t ",," -n transportNickName -i kra transport cert file
certutil -d /var/lib/pki/pki-ca/alias -A -t ",," -n "KRA transport cert" -i /tmp/kraTransport.cert
systemctl start pki-tomcatd@ ca_instance_name .service
systemctl start pki-tomcatd@pki-ca.service
input.i1.class_id=serverKeygenInputImpl
output.o1.class_id=pkcs12OutputImpl
policyset.userCertSet.3.constraint.class_id=keyConstraintImpl policyset.userCertSet.3.constraint.name=Key Constraint policyset.userCertSet.3.constraint.params.keyType=- policyset.userCertSet.3.constraint.params.keyParameters=1024,2048,3072,4096,nistp256,nistp384,nistp521 policyset.userCertSet.3.default.class_id=serverKeygenUserKeyDefaultImpl policyset.userCertSet.3.default.name=Server-Side Keygen Default policyset.userCertSet.3.default.params.keyType=RSA policyset.userCertSet.3.default.params.keySize=2048 policyset.userCertSet.3.default.params.enableArchival=true
auths.instance.UserDirEnrollment.dnpattern= auths.instance.UserDirEnrollment.ldap.basedn=ou=People,dc=example,dc=com auths.instance.UserDirEnrollment.ldap.ldapconn.host=host.example.com auths.instance.UserDirEnrollment.ldap.ldapconn.port=389 auths.instance.UserDirEnrollment.ldap.ldapconn.secureConn=false auths.instance.UserDirEnrollment.ldap.maxConns= auths.instance.UserDirEnrollment.ldap.minConns= auths.instance.UserDirEnrollment.ldapByteAttributes= auths.instance.UserDirEnrollment.ldapStringAttributes=mail auths.instance.UserDirEnrollment.pluginName=UidPwdDirAuth