Configure pkispawn
Modifying the sample pkispawn configuration file
Hostnames
Set these values as appropriate for your system. If you run multiple instances on the same server, it is not recommended to use the system FQDN as the RHCS server hostname.
-
RHCS server:
pki_hostname=pki.domain.com -
RHDS server:
pki_ds_url=ldap://ldap.domain.com:389
Differences between a root CA and a subordinate CA
For a root CA, the caSigningCert is self-signed in pkispawn phase 1.
-
pki_external=False
For a subordinate CA, phase 1 completes the basic setup and creates the caSigningCert key and certificate request.
Phase 2 imports the signed CA certificate chain and finishes the setup.
-
pki_external=True -
Phase 1:
pki_external_step_two=False -
Phase 2:
pki_external_step_two=True
Ports
The defaults work for a single instance on the host. If you are using multiple instances on the same host, it is recommended to use high ports, for example in the 63000 range.
-
pki_security_domain_https_port=8443 -
pki_http_port=8080 -
pki_https_port=8443 -
pki_ajp_port=8009 -
pki_tomcat_server_port=8005
Certificate distinguished names (DNs)
The six certificate DNs, especially the DN of the CA’s own certificate, are important to an enterprise-class PKI.
Change each *_subject_dn= value to the DN required by your policy.
-
pki_ca_signing_subject_dn=cn=<CA Common Name>,OU=Group,OU=Division,O=Company,C=US -
pki_sslserver_subject_dn=cn=<server FQDN>,OU=Group,OU=Division,O=Company,C=US -
pki_subsystem_subject_dn=cn=<CA Common Name> Subsystem Certificate,OU=Group,OU=Division,O=Company,C=US -
pki_admin_subject_dn=cn=<CA Common Name> Agent Certificate,OU=Group,OU=Division,O=Company,C=US -
pki_audit_signing_subject_dn=cn=<CA Common Name> Audit Certificate,OU=Group,OU=Division,O=Company,C=US -
pki_ocsp_signing_subject_dn=cn=<CA Common Name> OCSP Certificate,OU=Group,OU=Division,O=Company,C=US
Algorithms and key size
Five key pairs are created during installation. For policy reasons, the keys should match.
For all keys, change all *_key_algorithm=, *_key_size=, and *_key_type= parameters to match your key configuration.
-
CA signing key (
pki_ca_signing_key_*) -
Instance subsystem key (
pki_subsystem_key_*) -
SSL/TLS web server key (
pki_sslserver_key_*) -
Internal OCSP (
pki_ocsp_signing_key_*) -
Instance audit signing key (
pki_audit_signing_key_*)
Example for the CA’s signing key using RSA2048 and SHA-256:
-
pki_ca_signing_key_algorithm=SHA256withRSA -
pki_ca_signing_key_size=2048 -
pki_ca_signing_key_type=rsa
Example for the CA’s signing key using ECC (nistp256) and SHA-256:
-
pki_ca_signing_key_algorithm=SHA256withEC -
pki_ca_signing_key_size=nistp256 -
pki_ca_signing_key_type=ecc
Example for the CA’s signing key using a post-quantum algorithm (ML-DSA):
-
pki_ca_signing_key_algorithm=ML-DSA-44 -
pki_ca_signing_key_size=44 -
pki_ca_signing_key_type=mldsa
nShield HSM
Change all *_token= variables to match the name of your OCS or Softcard token.
-
pki_audit_signing_token=OCS1 -
pki_sslserver_token=OCS1 -
pki_subsystem_token=OCS1 -
pki_token_name=OCS1 -
pki_ca_signing_token=OCS1 -
pki_ocsp_signing_token=OCS1
Account passwords
Change all applicable *_password= variables from the defaults.
pki_replication_password is used only for cloning CAs.
-
For the RHCS security domain, to join additional subsystems to the CA’s security domain (
pki_security_domain_password) -
For the RHCS instance’s NSS database (
pki_server_database_password) -
For the LDAP directory server (
pki_ds_password) -
For the HSM token (
pki_token_password)
The following default administrator passwords should match:
-
Administrator credential, for example for logging in to pkiconsole (
pki_admin_password) -
Default administrator credential in an NSS database (
pki_client_database_password) -
Default administrator credential in a PKCS #12 file (
pki_client_pkcs12_password)
Default agent credential
Load this PKCS #12 file into Firefox, or another web browser on any system, to access the agent web page and issue certificates or CRLs.
After the installation completes, this file is located in /etc/pki/<instance>/agent_alias.
<instance> is the pki_instance_name variable in the pkispawn configuration file.
Post-quantum limitation
The SSL server certificate (pki_sslserver_*) cannot use a post-quantum algorithm (ML-DSA).
All other system certificates (CA signing, OCSP signing, audit signing, and subsystem) can use ML-DSA.
When the SSL server certificate is configured with ML-DSA:
pki_sslserver_key_algorithm=ML-DSA-44
pki_sslserver_key_size=44
pki_sslserver_key_type=mldsa
pki_sslserver_signing_algorithm=ML-DSA-44
pkispawn generates the keys and certificates and starts Tomcat, but fails when it checks the server status over HTTPS:
INFO: Waiting for PKI server to start (1s)
DEBUG: Starting new HTTPS connection (1): pki.domain.com:8443
ERROR: Exception: Server unreachable due to SSL error: [SSL: BAD_SIGNATURE] bad signature (_ssl.c:998)
File "/usr/lib/python3.12/site-packages/pki/server/pkispawn.py", line 594, in main
deployer.spawn()
File "/usr/lib/python3.12/site-packages/pki/server/deployment/__init__.py", line 6330, in spawn
scriptlet.spawn(self)
File "/usr/lib/python3.12/site-packages/pki/server/deployment/scriptlets/configuration.py", line 247, in spawn
instance.start(
File "/usr/lib/python3.12/site-packages/pki/server/__init__.py", line 536, in start
raise Exception('Server unreachable due to SSL error: %s' % reason) from e
Installation failed: Server unreachable due to SSL error: [SSL: BAD_SIGNATURE] bad signature (_ssl.c:998)
-
Cause: The
pkispawnclient (Python 3.12ssl, backed by the system OpenSSL) rejects the ML-DSA-44 signature that the server produces during the TLS handshake (signed through JSS/NSS and the nShield PKCS #11 library). ML-DSA works for certificate signatures, but ML-DSA TLS server authentication between these components does not work in this configuration. Most browsers also do not yet support ML-DSA TLS server certificates. -
Workaround: Use a classical algorithm for the SSL server key only. The server certificate is still signed by the ML-DSA CA. The
pkispawn.cfgfiles use the following settings:
pki_sslserver_key_algorithm=SHA256withRSA
pki_sslserver_key_size=2048
pki_sslserver_key_type=rsa
-
Result:
sslserver key=rsaEncryption sig=ML-DSA-44 OK