Planning, Installation, and Deployment Guide
This manual covers all aspects of installing, configuring, and managing Certificate System subsystems.
Abstract
Part I. Planning How to Deploy Red Hat Certificate System
Chapter 1. Introduction to Public-Key Cryptography
- Eavesdropping
- Information remains intact, but its privacy is compromised. For example, someone could gather credit card numbers, record a sensitive conversation, or intercept classified information.
- Tampering
- Information in transit is changed or replaced and then sent to the recipient. For example, someone could alter an order for goods or change a person's resume.
- Impersonation
- Information passes to a person who poses as the intended recipient. Impersonation can take two forms:
- Spoofing. A person can pretend to be someone else. For example, a person can pretend to have the email address
jdoe@example.net
or a computer can falsely identify itself as a site calledwww.example.net
. - Misrepresentation. A person or organization can misrepresent itself. For example, a site called
www.example.net
can purport to be an on-line furniture store when it really receives credit-card payments but never sends any goods.
- Encryption and decryption
- Encryption and decryption allow two communicating parties to disguise information they send to each other. The sender encrypts, or scrambles, information before sending it. The receiver decrypts, or unscrambles, the information after receiving it. While in transit, the encrypted information is unintelligible to an intruder.
- Tamper detection
- Tamper detection allows the recipient of information to verify that it has not been modified in transit. Any attempts to modify or substitute data are detected.
- Authentication
- Authentication allows the recipient of information to determine its origin by confirming the sender's identity.
- Nonrepudiation
- Nonrepudiation prevents the sender of information from claiming at a later date that the information was never sent.
1.1. Encryption and Decryption
1.1.1. Symmetric-Key Encryption

Figure 1.1. Symmetric-Key Encryption
1.1.2. Public-Key Encryption

Figure 1.2. Public-Key Encryption
1.1.3. Key Length and Encryption Strength
1.2. Digital Signatures
- The value of the hash is unique for the hashed data. Any change in the data, even deleting or altering a single character, results in a different value.
- The content of the hashed data cannot be deduced from the hash.

Figure 1.3. Using a Digital Signature to Validate Data Integrity
1.3. Certificates and Authentication
1.3.1. A Certificate Identifies Someone or Something
1.3.2. Authentication Confirms an Identity
- Password-based authentication
- Certificate-based authentication
1.3.2.1. Password-Based Authentication
- The user has already trusted the server, either without authentication or on the basis of server authentication over SSL/TLS.
- The user has requested a resource controlled by the server.
- The server requires client authentication before permitting access to the requested resource.

Figure 1.4. Using a Password to Authenticate a Client to a Server
- When the server requests authentication from the client, the client displays a dialog box requesting the user name and password for that server.
- The client sends the name and password across the network, either in plain text or over an encrypted SSL/TLS connection.
- The server looks up the name and password in its local password database and, if they match, accepts them as evidence authenticating the user's identity.
- The server determines whether the identified user is permitted to access the requested resource and, if so, allows the client to access it.
1.3.2.2. Certificate-Based Authentication

Figure 1.5. Using a Certificate to Authenticate a Client to a Server
Note
- The client software maintains a database of the private keys that correspond to the public keys published in any certificates issued for that client. The client asks for the password to this database the first time the client needs to access it during a given session, such as the first time the user attempts to access an SSL/TLS-enabled server that requires certificate-based client authentication.After entering this password once, the user does not need to enter it again for the rest of the session, even when accessing other SSL/TLS-enabled servers.
- The client unlocks the private-key database, retrieves the private key for the user's certificate, and uses that private key to sign data randomly-generated from input from both the client and the server. This data and the digital signature are evidence of the private key's validity. The digital signature can be created only with that private key and can be validated with the corresponding public key against the signed data, which is unique to the SSL/TLS session.
- The client sends both the user's certificate and the randomly-generated data across the network.
- The server uses the certificate and the signed data to authenticate the user's identity.
- The server may perform other authentication tasks, such as checking that the certificate presented by the client is stored in the user's entry in an LDAP directory. The server then evaluates whether the identified user is permitted to access the requested resource. This evaluation process can employ a variety of standard authorization mechanisms, potentially using additional information in an LDAP directory or company databases. If the result of the evaluation is positive, the server allows the client to access the requested resource.
1.3.3. Uses for Certificates
1.3.3.1. SSL/TLS
1.3.3.2. Signed and Encrypted Email
1.3.3.3. Single Sign-on
1.3.3.4. Object Signing
1.3.4. Types of Certificates
https
://server.example.com:8443/ca/ee/ca
.
Certificate Type | Use | Example |
---|---|---|
Client SSL/TLS certificates | Used for client authentication to servers over SSL/TLS. Typically, the identity of the client is assumed to be the same as the identity of a person, such as an employee. See Section 1.3.2.2, “Certificate-Based Authentication” for a description of the way SSL/TLS client certificates are used for client authentication. Client SSL/TLS certificates can also be used as part of single sign-on. |
A bank gives a customer an SSL/TLS client certificate that allows the bank's servers to identify that customer and authorize access to the customer's accounts.
A company gives a new employee an SSL/TLS client certificate that allows the company's servers to identify that employee and authorize access to the company's servers.
|
Server SSL/TLS certificates | Used for server authentication to clients over SSL/TLS. Server authentication may be used without client authentication. Server authentication is required for an encrypted SSL/TLS session. For more information, see Section 1.3.3.1, “SSL/TLS”. | Internet sites that engage in electronic commerce usually support certificate-based server authentication to establish an encrypted SSL/TLS session and to assure customers that they are dealing with the web site identified with the company. The encrypted SSL/TLS session ensures that personal information sent over the network, such as credit card numbers, cannot easily be intercepted. |
S/MIME certificates | Used for signed and encrypted email. As with SSL/TLS client certificates, the identity of the client is assumed to be the same as the identity of a person, such as an employee. A single certificate may be used as both an S/MIME certificate and an SSL/TLS certificate; see Section 1.3.3.2, “Signed and Encrypted Email”. S/MIME certificates can also be used as part of single sign-on. | A company deploys combined S/MIME and SSL/TLS certificates solely to authenticate employee identities, thus permitting signed email and SSL/TLS client authentication but not encrypted email. Another company issues S/MIME certificates solely to sign and encrypt email that deals with sensitive financial or legal matters. |
CA certificates | Used to identify CAs. Client and server software use CA certificates to determine what other certificates can be trusted. For more information, see Section 1.3.6, “How CA Certificates Establish Trust”. | The CA certificates stored in Mozilla Firefox determine what other certificates can be authenticated. An administrator can implement corporate security policies by controlling the CA certificates stored in each user's copy of Firefox. |
Object-signing certificates | Used to identify signers of Java code, JavaScript scripts, or other signed files. | Software companies frequently sign software distributed over the Internet to provide users with some assurance that the software is a legitimate product of that company. Using certificates and digital signatures can also make it possible for users to identify and control the kind of access downloaded software has to their computers. |
1.3.4.1. CA Signing Certificates
Note
1.3.4.2. Other Signing Certificates
Note
1.3.4.3. SSL/TLS Server and Client Certificates
Note
1.3.4.4. User Certificates
1.3.4.5. Dual-Key Pairs
1.3.4.6. Cross-Pair Certificates
crossCertificatePair
entry.
1.3.5. Contents of a Certificate
1.3.5.1. Certificate Data Formats
1.3.5.1.1. Binary
- DER-encoded certificate. This is a single binary DER-encoded certificate.
- PKCS #7 certificate chain. This is a PKCS #7
SignedData
object. The only significant field in theSignedData
object is the certificates; the signature and the contents, for example, are ignored. The PKCS #7 format allows multiple certificates to be downloaded at a single time. - Netscape Certificate Sequence. This is a simpler format for downloading certificate chains in a PKCS #7
ContentInfo
structure, wrapping a sequence of certificates. The value of thecontentType
field should benetscape-cert-sequence
, while the content field has the following structure:CertificateSequence ::= SEQUENCE OF Certificate
This format allows multiple certificates to be downloaded at the same time.
1.3.5.1.2. Text
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
1.3.5.2. Distinguished Names
uid=doe
, that uniquely identify an entity. This is also called the certificate subject name.
uid=doe, cn=John Doe,o=Example Corp.,c=US
uid
is the user name, cn
is the user's common name, o
is the organization or company name, and c
is the country.
1.3.5.3. A Typical Certificate
- The data section
- This section includes the following information:
- The version number of the X.509 standard supported by the certificate.
- The certificate's serial number. Every certificate issued by a CA has a serial number that is unique among the certificates issued by that CA.
- Information about the user's public key, including the algorithm used and a representation of the key itself.
- The DN of the CA that issued the certificate.
- The period during which the certificate is valid; for example, between 1:00 p.m. on November 15, 2004, and 1:00 p.m. November 15, 2022.
- The DN of the certificate subject, which is also called the subject name; for example, in an SSL/TLS client certificate, this is the user's DN.
- Optional certificate extensions, which may provide additional data used by the client or server. For example:
- the Netscape Certificate Type extension indicates the type of certificate, such as an SSL/TLS client certificate, an SSL/TLS server certificate, or a certificate for signing email
- the Subject Alternative Name (SAN) extension links a certificate to one or more host names
Certificate extensions can also be used for other purposes.
- The signature section
- This section includes the following information:
- The cryptographic algorithm, or cipher, used by the issuing CA to create its own digital signature.
- The CA's digital signature, obtained by hashing all of the data in the certificate together and encrypting it with the CA's private key.
Certificate: Data: Version: v3 (0x2) Serial Number: 3 (0x3) Signature Algorithm: PKCS #1 MD5 With RSA Encryption Issuer: OU=Example Certificate Authority, O=Example Corp, C=US Validity: Not Before: Fri Oct 17 18:36:25 1997 Not After: Sun Oct 17 18:36:25 1999 Subject: CN=Jane Doe, OU=Finance, O=Example Corp, C=US Subject Public Key Info: Algorithm: PKCS #1 RSA Encryption Public Key: Modulus: 00:ca:fa:79:98:8f:19:f8:d7:de:e4:49:80:48:e6:2a:2a:86: ed:27:40:4d:86:b3:05:c0:01:bb:50:15:c9:de:dc:85:19:22: 43:7d:45:6d:71:4e:17:3d:f0:36:4b:5b:7f:a8:51:a3:a1:00: 98:ce:7f:47:50:2c:93:36:7c:01:6e:cb:89:06:41:72:b5:e9: 73:49:38:76:ef:b6:8f:ac:49:bb:63:0f:9b:ff:16:2a:e3:0e: 9d:3b:af:ce:9a:3e:48:65:de:96:61:d5:0a:11:2a:a2:80:b0: 7d:d8:99:cb:0c:99:34:c9:ab:25:06:a8:31:ad:8c:4b:aa:54: 91:f4:15 Public Exponent: 65537 (0x10001) Extensions: Identifier: Certificate Type Critical: no Certified Usage: TLS Client Identifier: Authority Key Identifier Critical: no Key Identifier: f2:f2:06:59:90:18:47:51:f5:89:33:5a:31:7a:e6:5c:fb:36: 26:c9 Signature: Algorithm: PKCS #1 MD5 With RSA Encryption Signature: 6d:23:af:f3:d3:b6:7a:df:90:df:cd:7e:18:6c:01:69:8e:54:65:fc:06: 30:43:34:d1:63:1f:06:7d:c3:40:a8:2a:82:c1:a4:83:2a:fb:2e:8f:fb: f0:6d:ff:75:a3:78:f7:52:47:46:62:97:1d:d9:c6:11:0a:02:a2:e0:cc: 2a:75:6c:8b:b6:9b:87:00:7d:7c:84:76:79:ba:f8:b4:d2:62:58:c3:c5: b6:c1:43:ac:63:44:42:fd:af:c8:0f:2f:38:85:6d:d6:59:e8:41:42:a5: 4a:e5:26:38:ff:32:78:a1:38:f1:ed:dc:0d:31:d1:b0:6d:67:e9:46:a8: d:c4
-----BEGIN CERTIFICATE----- MIICKzCCAZSgAwIBAgIBAzANBgkqhkiG9w0BAQQFADA3MQswCQYDVQQGEwJVUzER MA8GA1UEChMITmV0c2NhcGUxFTATBgNVBAsTDFN1cHJpeWEncyBDQTAeFw05NzEw MTgwMTM2MjVaFw05OTEwMTgwMTM2MjVaMEgxCzAJBgNVBAYTAlVTMREwDwYDVQQK EwhOZXRzY2FwZTENMAsGA1UECxMEUHViczEXMBUGA1UEAxMOU3Vwcml5YSBTaGV0 dHkwgZ8wDQYJKoZIhvcNAQEFBQADgY0AMIGJAoGBAMr6eZiPGfjX3uRJgEjmKiqG 7SdATYazBcABu1AVyd7chRkiQ31FbXFOGD3wNktbf6hRo6EAmM5/R1AskzZ8AW7L iQZBcrXpc0k4du+2Q6xJu2MPm/8WKuMOnTuvzpo+SGXelmHVChEqooCwfdiZywyZ NMmrJgaoMa2MS6pUkfQVAgMBAAGjNjA0MBEGCWCGSAGG+EIBAQQEAwIAgDAfBgNV HSMEGDAWgBTy8gZZkBhHUfWJM1oxeuZc+zYmyTANBgkqhkiG9w0BAQQFAAOBgQBt I6/z07Z635DfzX4XbAFpjlRl/AYwQzTSYx8GfcNAqCqCwaSDKvsuj/vwbf91o3j3 UkdGYpcd2cYRCgKi4MwqdWyLtpuHAH18hHZ5uvi00mJYw8W2wUOsY0RC/a/IDy84 hW3WWehBUqVK5SY4/zJ4oTjx7dwNMdGwbWfpRqjd1A== -----END CERTIFICATE-----
1.3.6. How CA Certificates Establish Trust
1.3.6.1. CA Hierarchies

Figure 1.6. Example of a Hierarchy of Certificate Authorities
1.3.6.2. Certificate Chains

Figure 1.7. Example of a Certificate Chain
- Each certificate is followed by the certificate of its issuer.
- Each certificate contains the name (DN) of that certificate's issuer, which is the same as the subject name of the next certificate in the chain.In Figure 1.7, “Example of a Certificate Chain”, the
Engineering CA
certificate contains the DN of the CA,USA CA
, that issued that certificate.USA CA
's DN is also the subject name of the next certificate in the chain. - Each certificate is signed with the private key of its issuer. The signature can be verified with the public key in the issuer's certificate, which is the next certificate in the chain.In Figure 1.7, “Example of a Certificate Chain”, the public key in the certificate for the
USA CA
can be used to verify theUSA CA
's digital signature on the certificate for theEngineering CA
.
1.3.6.3. Verifying a Certificate Chain
- The certificate validity period is checked against the current time provided by the verifier's system clock.
- The issuer's certificate is located. The source can be either the verifier's local certificate database on that client or server or the certificate chain provided by the subject, as with an SSL/TLS connection.
- The certificate signature is verified using the public key in the issuer's certificate.
- The host name of the service is compared against the Subject Alternative Name (SAN) extension. If the certificate has no such extension, the host name is compared against the subject's CN.
- The system verifies the Basic Constraint requirements for the certificate, that is, whether the certificate is a CA and how many subsidiaries it is allowed to sign.
- If the issuer's certificate is trusted by the verifier in the verifier's certificate database, verification stops successfully here. Otherwise, the issuer's certificate is checked to make sure it contains the appropriate subordinate CA indication in the certificate type extension, and chain verification starts over with this new certificate. Figure 1.8, “Verifying a Certificate Chain to the Root CA” presents an example of this process.

Figure 1.8. Verifying a Certificate Chain to the Root CA
Engineering CA
, is found in the verifier's local database, verification stops with that certificate, as shown in Figure 1.9, “Verifying a Certificate Chain to an Intermediate CA”.

Figure 1.9. Verifying a Certificate Chain to an Intermediate CA

Figure 1.10. A Certificate Chain That Cannot Be Verified
1.3.7. Certificate Status
1.4. Certificate Life Cycle
1.4.1. Certificate Issuance
1.4.2. Certificate Expiration and Renewal
- Verify if the certificate is present in the directory
- Servers can be configured so that the authentication process checks the directory for the presence of the certificate being presented. When an administrator revokes a certificate, the certificate can be automatically removed from the directory, and subsequent authentication attempts with that certificate will fail, even though the certificate remains valid in every other respect.
- Certificate revocation list (CRL)
- A list of revoked certificates, a CRL, can be published to the directory at regular intervals. The CRL can be checked as part of the authentication process.
- Real-time status checking
- The issuing CA can also be checked directly each time a certificate is presented for authentication. This procedure is sometimes called real-time status checking.
- Online Certificate Status Protocol
- The Online Certificate Status Protocol (OCSP) service can be configured to determine the status of certificates.
1.5. Key Management
Chapter 2. Introduction to Red Hat Certificate System
2.1. A Review of Certificate System Subsystems
- A certificate authority called Certificate Manager. The CA is the core of the PKI; it issues and revokes all certificates. The Certificate Manager is also the core of the Certificate System. By establishing a security domain of trusted subsystems, it establishes and manages relationships between the other subsystems.
- A key recovery authority (KRA). Certificates are created based on a specific and unique key pair. If a private key is ever lost, then the data which that key was used to access (such as encrypted emails) is also lost because it is inaccessible. The KRA stores key pairs, so that a new, identical certificate can be generated based on recovered keys, and all of the encrypted data can be accessed even after a private key is lost or damaged.
Note
In previous versions of Certificate System, KRA was also referred to as the data recovery manager (DRM). Some code, configuration file entries, web panels, and other resources might still use the term DRM instead of KRA. - An online certificate status protocol (OCSP) responder. The OCSP verifies whether a certificate is valid and not expired. This function can also be done by the CA, which has an internal OCSP service, but using an external OCSP responder lowers the load of the issuing CA.
- A token key service (TKS). The TKS derives keys based on the token CCID, private information, and a defined algorithm. These derived keys are used by the TPS to format tokens and enroll certificates on the token.
- A token processing system (TPS). The TPS interacts directly with external tokens, like smart cards, and manages the keys and certificates on those tokens through a local client, the Enterprise Security Client (ESC). The ESC contacts the TPS when there is a token operation, and the TPS interacts with the CA, KRA, or TKS, as required, then send the information back to the token by way of the Enterprise Security Client.
- A token management system or TMS environment, which manages smart cards. This requires a CA, TKS, and TPS, with an optional KRA for server-side key generation.
- A traditional non token management system or non-TMS environment, which manages certificates used in an environment other than smart cards, usually in software databases. At a minimum, a non-TMS requires only a CA, but a non-TMS environment can use OCSP responders and KRA instances as well.
2.2. Overview of Certificate System Subsystems
2.2.2. Instance Installation Prerequisites
2.2.2.1. Directory Server Instance Availability
2.2.2.2. PKI Packages
- The following base packages form the core of Certificate System, and are available in base Red Hat Enterprise Linux repositories:
- pki-core
- pki-base
- pki-base-java
- pki-ca
- pki-javadoc
- pki-kra
- pki-server
- pki-symkey
- pki-tools
- The packages listed below are not available in the base Red Hat Enterprise Linux subscription channel. To install these packages, you must attach a Red Hat Certificate System subscription pool and enable the RHCS repository. For more information, see Section 6.8, “Attaching a Red Hat Subscription and Enabling the Certificate System Package Repository”.
- pki-core
- pki-console
- pki-ocsp
- pki-tks
- pki-tps
- redhat-pki
- redhat-pki: contains all the packages of the pki-core module. If you wish to pick redhat-pki packages individually, it is advised to disable the pki-core module.
- redhat-pki-console-theme
- redhat-pki-server-theme
#
dnf install redhat-pki
Note
2.2.2.3. Instance Installation and Configuration
pkispawn
command line tool is used to install and configure a new PKI instance. It eliminates the need for separate installation and configuration steps, and may be run either interactively, as a batch process, or a combination of both (batch process with prompts for passwords). The utility does not provide a way to install or configure the browser-based graphical interface.
pkispawn --help
command.
pkispawn
command:
- Reads in its default
name=value
pairs from a plain text configuration file (/etc/pki/default.cfg
). - Interactively or automatically overrides any pairs as specified and stores the final result as a Python dictionary.
- Executes an ordered series of scriptlets to perform subsystem and instance installation.
- The configuration scriptlet packages the Python dictionary as a JavaScript Object Notation (JSON) data object, which is then passed to the Java-based configuration servlet.
- The configuration servlet utilizes this data to configure a new PKI subsystem, and then passes control back to the
pkispawn
executable, which finalizes the PKI setup. A copy of the final deployment file is stored in/var/lib/pki/instance_name/<subsystem>/registry/<subsystem>/deployment.cfg
pkispawn
man page for additional information.
/etc/pki/default.cfg
, is a plain text file containing the default installation and configuration values which are read at the beginning of the process described above. It consists of name=value
pairs divided into [DEFAULT]
, [Tomcat]
, [CA]
, [KRA]
, [OCSP]
, [TKS]
, and [TPS]
sections.
-s
option with pkispawn
and specify a subsystem name, then only the section for that subsystem will be read.
name=value
pair specified in a subsystem section will override the pair in the [Tomcat]
section, which in turn override the pair in the [DEFAULT]
section. Default pairs can further be overriden by interactive input, or by pairs in a specified PKI instance configuration file.
Note
name=value
pairs, they may be stored in any location and specified at any time. These files are referred to as myconfig.txt
in the pkispawn
man pages, but they are also often referred to as .ini
files, or more generally as PKI instance configuration override files.
pki_default.cfg
man page for more information.
/usr/share/java/pki/pki-certsrv.jar
as com/netscape/certsrv/system/ConfigurationRequest.class
. The servlet processes data passed in as a JSON object from the configuration scriptlet using pkispawn
, and then returns to pkispawn
using Java bytecode served in the same file as com/netscape/certsrv/system/ConfigurationResponse.class
.
pkispawn
command on a command line as root
:
#
pkispawn
Important
#
mkdir -p /root/pki
- Use a text editor such as vim to create a configuration file named
/root/pki/ca.cfg
with the following contents:[DEFAULT] pki_admin_password=<password> pki_client_pkcs12_password=<password> pki_ds_password=<password>
#
pkispawn -s CA -f /root/pki/ca.cfg
pkispawn
man page for various configuration examples.
2.2.2.4. Instance Removal
pkidestroy
command. It can be run interactively or as a batch process. Use pkidestroy -h
to display detailed usage inforamtion on the command line.
pkidestroy
command reads in a PKI subsystem deployment configuration file which was stored when the subsystem was created (/var/lib/pki/instance_name/<subsystem>/registry/<subsystem>/deployment.cfg
), uses the read-in file in order to remove the PKI subsystem, and then removes the PKI instance if it contains no additional subsystems. See the pkidestroy
man page for more information.
pkidestroy
may look similar to the following:
#
pkidestroy
Subsystem (CA/KRA/OCSP/TKS/TPS) [CA]: Instance [pki-tomcat]: Begin uninstallation (Yes/No/Quit)? Yes Log file: /var/log/pki/pki-ca-destroy.20150928183547.log Loading deployment configuration from /var/lib/pki/pki-tomcat/ca/registry/ca/deployment.cfg. Uninstalling CA from /var/lib/pki/pki-tomcat. rm '/etc/systemd/system/multi-user.target.wants/pki-tomcatd.target' Uninstallation complete.
#
pkidestroy -s CA -i pki-tomcat
Log file: /var/log/pki/pki-ca-destroy.20150928183159.log Loading deployment configuration from /var/lib/pki/pki-tomcat/ca/registry/ca/deployment.cfg. Uninstalling CA from /var/lib/pki/pki-tomcat. rm '/etc/systemd/system/multi-user.target.wants/pki-tomcatd.target' Uninstallation complete.
2.2.3. Execution Management (systemctl)
2.2.3.1. Starting, Stopping, Restarting, and Obtaining Status
systemctl
execution management system tool on Red Hat Enterprise Linux 8:
#
systemctl start <unit-file>@instance_name.service
#
systemctl status <unit-file>@instance_name.service
#
systemctl stop <unit-file>@instance_name.service
#
systemctl restart <unit-file>@instance_name.service
pki-tomcatd
Withwatchdog
disabledpki-tomcatd-nuxwdog
Withwatchdog
enabled
watchdog
service, refer to the Section 2.3.10, “Passwords and Watchdog (nuxwdog)” and Section 14.3.2, “Using the Certificate System Watchdog Service”.
Note
systemctl
actions support the pki-server
alias: pki-server <command> subsystem_instance_name
is the alias for systemctl <command> pki-tomcatd@<instance>.service
.
2.2.3.2. Starting the Instance Automatically
systemctl
utility in Red Hat Enterprise Linux manages the automatic startup and shutdown settings for each process on the server. This means that when a system reboots, some services can be automatically restarted. System unit files control service startup to ensure that services are started in the correct order. The systemd
service and systemctl
utility are described in the Configuring basic system settings guide for Red Hat Enterprise Linux 8.
systemctl
, so this utility can set whether to restart instances automatically. After a Certificate System instance is created, it is enabled on boot. This can be changed by using systemctl
:
#
systemctl disable pki-tomcatd@instance_name.service
#
systemctl enable pki-tomcatd@instance_name.service
Note
systemctl enable
and systemctl disable
commands do not immediately start or stop Certificate System.
2.2.4. Process Management (pki-server and pkidaemon)
2.2.4.1. The pki-server Command Line Tool
pki-server
. Use the pki-server --help
command and see the pki-server
man page for usage information.
pki-server
command-line interface (CLI) manages local server instances (for example server configuration or system certificates). Invoke the CLI as follows:
$
pki-server [CLI options] <command> [command parameters]
$
pki-server
$
pki-server ca
$
pki-server ca-audit
--help
option:
$
pki-server
--help
$
pki-server ca-audit-event-find
--help
2.2.4.2. Enabling and Disabling an Installed Subsystem Using pki-server
pki-server
utility.
#
pki-server subsystem-disable -i instance_id subsystem_id
#
pki-server subsystem-enable -i instance_id subsystem_id
ca
, kra
, tks
, ocsp
, or tps
.
Note
pki-tomcat
:
#
pki-server subsystem-disable -i pki-tomcat ocsp
#
pki-server subsystem-find -i instance_id
#
pki-server subsystem-find -i instance_id subsystem_id
2.2.4.3. The pkidaemon Command Line Tool
pkidaemon
tool:
pkidaemon {start|status} instance-type [instance_name]
pkidaemon status tomcat
- Provides status information such as on/off, ports, URLs of each PKI subsystem of all PKI instances on the system.pkidaemon status tomcat instance_name
- Provides status information such as on/off, ports, URLs of each PKI subsystem of a specific instance.pkidaemon start tomcat instance_name.service
- Used internally usingsystemctl
.
pkidaemon
man page for additional information.
2.2.4.4. Finding the Subsystem Web Services URLs
https://server.example.com:8443/ca/services
Note
pkidaemon status instance_name
https://server.example.com:8443/ca/ee/ca
https://192.0.2.1:8443/ca/services https://[2001:DB8::1111]:8443/ca/services
Note
Port | Used for SSL/TLS | Used for Client Authentication[a] | Web Services | Web Service Location |
---|---|---|---|---|
Certificate Manager | ||||
8080 | No | End Entities | ca/ee/ca | |
8443 | Yes | No | End Entities | ca/ee/ca |
8443 | Yes | Yes | Agents | ca/agent/ca |
8443 | Yes | No | Services | ca/services |
8443 | Yes | No | Console | pkiconsole https://host:port/ca |
Key Recovery Authority | ||||
8080 | No | End Entities[b] | kra/ee/kra | |
8443 | Yes | No | End Entities[b] | kra/ee/kra |
8443 | Yes | Yes | Agents | kra/agent/kra |
8443 | Yes | No | Services | kra/services |
8443 | Yes | No | Console | pkiconsole https://host:port/kra |
Online Certificate Status Manager | ||||
8080 | No | End Entities[c] | ocsp/ee/ocsp | |
8443 | Yes | No | End Entities[c] | ocsp/ee/ocsp |
8443 | Yes | Yes | Agents | ocsp/agent/ocsp |
8443 | Yes | No | Services | ocsp/services |
8443 | Yes | No | Console | pkiconsole https://host:port/ocsp |
Token Key Service | ||||
8080 | No | End Entities[b] | tks/ee/tks | |
8443 | Yes | No | End Entities[b] | tks/ee/tks |
8443 | Yes | Yes | Agents | tks/agent/tks |
8443 | Yes | No | Services | tks/services |
8443 | Yes | No | Console | pkiconsole https://host:port/tks |
Token Processing System | ||||
8080 | No | Unsecure Services | tps/tps | |
8443 | Yes | Secure Services | tps/tps | |
8080 | No | Enterprise Security Client Phone Home | tps/phoneHome | |
8443 | Yes | Enterprise Security Client Phone Home | tps/phoneHome | |
8443 | Yes | Yes | Admin, Agent, and Operator Services [d] | tps/ui |
[a]
Services with a client authentication value of No can be reconfigured to require client authentication. Services which do not have either a Yes or No value cannot be configured to use client authentication.
[b]
Although this subsystem type does have end entities ports and interfaces, these end-entity services are not accessible through a web browser, as other end-entity services are.
[c]
Although the OCSP does have end entities ports and interfaces, these end-entity services are not accessible through a web browser, as other end-entity services are. End user OCSP services are accessed by a client sending an OCSP request.
[d]
The agent, admin, and operator services are all accessed through the same web services page. Each role can only access specific sections which are only visible to the members of that role.
|
2.2.4.5. Starting the Certificate System Console
Important
pkiconsole
utility. This utility uses the format:
pkiconsole https://server.example.com:admin_port/subsystem_type
ca
, kra
, ocsp
, or tks
. For example, this opens the KRA console:
pkiconsole https://server.example.com:8443/kra
https://192.0.2.1:8443/ca https://[2001:DB8::1111]:8443/ca
2.3. Certificate System Architecture Overview
2.3.1. Java Application Server
server.xml
. The following link provides more information about Tomcat configuration: https://tomcat.apache.org/tomcat-8.0-doc/config/.
web.xml
file, which is defined in Java Servlet 3.1 specification. See https://www.jcp.org/en/jsr/detail?id=340 for details.
CS.cfg
.
2.3.2. Java Security Manager

pki_security_manager=false
option under its own Tomcat section.
# pki-server stop instance_name
or (if using thenuxwdog
watchdog)# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- Open the
/etc/sysconfig/instance_name
file, and setSECURITY_MANAGER="false"
# pki-server start instance_name
or (if using thenuxwdog
watchdog)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
pkidaemon
from the following files:
/usr/share/pki/server/conf/catalina.policy /usr/share/tomcat/conf/catalina.policy /var/lib/pki/$PKI_INSTANCE_NAME/conf/pki.policy /var/lib/pki/$PKI_INSTANCE_NAME/conf/custom.policy
/var/lib/pki/instance_name/conf/catalina.policy
.
2.3.3. Interfaces
2.3.3.1. Servlet Interface
web.xml
file. The same file also defines the URL of each servlet and the security requirements to access the servlets. See Section 2.3.1, “Java Application Server” for more information.
2.3.3.2. Administrative Interface

2.3.3.3. End-Entity Interface

2.3.3.4. Operator Interface

2.3.4. REST Interface
web.xml
of the corresponding subsystem. More information about RESTEasy can be found at http://resteasy.jboss.org/.
- CA certificate service:
http://<host_name>:<port>/ca/rest/certs/
- KRA key service:
http://<host_name>:<port>/kra/rest/agent/keys/
- TKS user service:
http://<host_name>:<port>/tks/rest/admin/users/
- TPS group service:
http://<host_name>:<port>/tps/rest/admin/groups/
{ "id":"admin", "UserID":"admin", "FullName":"Administrator", "Email":"admin@example.com", ... }
- user name and password
- client certificate
/usr/share/pki/ca/conf/auth-method.properties
.
/usr/share/pki/<subsystem>/conf/acl.properties
.
2.3.5. JSS
2.3.6. Tomcatjss
tomcatjss
as a bridge between the Tomcat Server HTTP engine and JSS, the Java interface for security operations performed by NSS. Tomcatjss is a Java Secure Socket Extension (JSSE) implementation using Java Security Services (JSS) for Tomcat.
- The server is started.
- Tomcat gets to the point where it needs to create the listening sockets for the Certificate System installation.
- The
server.xml
file is processed. Configuration in this file tells the system to use a socket factory implemented by Tomcatjss. - For each requested socket, Tomcajss reads and processes the included attributes when it creates the socket. The resulting socket will behave as it has been asked to by those parameters.
- Once the server is running, we have the required set of listening sockets waiting for incoming connections to the Tomcat-based Certificate System.
server.xml
file, see Section 14.4, “Configuration Files for the Tomcat Engine and Web Services”.
2.3.7. PKCS #11

2.3.7.1. NSS Soft Token (internal token)
Note
/var/lib/pki/instance_name/alias
directory.
- The default internal PKCS #11 module, which comes with two tokens:
- The internal crypto services token, which performs all cryptographic operations such as encryption, decryption, and hashing.
- The internal key storage token ("Certificate DB token"), which handles all communication with the certificate and key database files that store certificates and keys.
- The FIPS 140 module. This module complies with the FIPS 140 government standard for cryptographic module implementations. The FIPS 140 module includes a single, built-in FIPS 140 certificate database token, which handles both cryptographic operations and communication with the certificate and key database files.
2.3.7.2. Hardware Security Module (HSM, external token)
Note
pkcs11.txt
database for the subsystem. The modutil
utility is used to modify this file when there are changes to the system, such as installing a hardware accelerator to use for signing operations. For more information on modutil
, see Network Security Services (NSS) at Mozilla Developer webpage.
2.3.8. Certificate System Serial Number Management
2.3.8.1. Serial Number Ranges
- Current serial number management is based on assigning ranges of sequential serial numbers.
- Instances request new ranges when crossing below a defined threshold.
- Instances store information about a newly acquired range once it is assigned to the instance.
- Instances continue using old ranges until all numbers are exhausted from it, and then it moves to the new range.
- Cloned subsystems synchronize their range assignment through replication conflicts.
- Part of the current range of the master is transferred to a new clone in the process of cloning.
- New clones may request a new range if the transferred range is below the defined threshold.
[CA]
section to the PKI instance override configuration file, and adding the following name=value
pairs under that section as needed. Default values which already exist in /etc/pki/default.cfg
are shown in the following example:
[CA] pki_serial_number_range_start=1 pki_serial_number_range_end=10000000 pki_request_number_range_start=1 pki_request_number_range_end=10000000 pki_replica_number_range_start=1 pki_replica_number_range_end=100
2.3.8.2. Random Serial Number Management
[CA]
section to the PKI instance override file and adding the following name=value
pair under that section:
[CA] pki_random_serial_numbers_enable=True
2.3.9. Security Domain
2.3.10. Passwords and Watchdog (nuxwdog)
<instance_dir>/conf/password.conf
. At the same time, an identifying string is stored in the main configuration file CS.cfg
as part of the parameter cms.passwordlist
.
CS.cfg
, is protected by Red Hat Enterprise Linux, and only accessible by the PKI administrators. No passwords are stored in CS.cfg
.
password.conf
.
password.conf
. LDAP publishing is one example where the newly configured Directory Manager password for the publishing directory is entered into password.conf
.
Note
password.conf
file altogether. On restart, the nuxwdog watchdog program will prompt the administrator for the required passwords, using the parameter cms.passwordlist
(and cms.tokenList
if an HSM is used) as a list of passwords for which to prompt. The passwords are then cached by nuxwdog in the kernel keyring to allow automated recovery from a server crash. This automated recovery (automatic subsystem restart) happens in case of uncontrolled shutdown (crash). In case of a controlled shutdown by the administrator, administrators are prompted for passwords again.
2.3.11. Internal LDAP Database
pkispawn
options will also be needed for installing such Certificate System instance.
2.3.12. Security-Enhanced Linux (SELinux)

Figure 2.1. CA SELinux Port Policy
- Files and directories for each subsystem instance are labeled with a specific SELinux context.
- The ports for each subsystem instance are labeled with a specific SELinux context.
- All Certificate System processes are constrained within a subsystem-specific domain.
- Each domain has specific rules that define what actions that are authorized for the domain.
- Any access not specified in the SELinux policy is denied to the Certificate System instance.
pkispawn
is run to configure a Certificate System subsystem, files and ports associated with that subsystem are labeled with the required SELinux contexts. These contexts are removed when the particular subsystems are removed using pkidestroy
.
pki_tomcat_t
domain. Certificate System instances are Tomcat servers, and the pki_tomcat_t
domain extends the policies for a standard tomcat_t
Tomcat domain. All Certificate System instances on a server share the same domain.
unconfined_t
) and then transitions into the pki_tomcat_t
domain. This process then has certain access permissions, such as write access to log files labeled pki_tomcat_log_t
, read and write access to configuration files labeled pki_tomcat_etc_rw_t
, or the ability to open and write to http_port_t
ports.
2.3.13. Self-tests
#
pki-server subsystem-enable <subsystem>
2.3.14. Logs
pki_subsystem_log_path
when the instance was created with pkispawn
. Regular audit logs are located in the log directory with other types of logs, while signed audit logs are written to /var/log/pki/instance_name/subsystem_name/signedAudit
. The default location for logs can be changed by modifying the configuration.
2.3.14.1. Audit Log
Note
2.3.14.2. Debug Logs
[date:time] [processor]: servlet: message
[10/Jun/2022:05:14:51][main]: Established LDAP connection using basic authentication to host localhost port 389 as cn=Directory Manager
main
, and the message is the message from the server about the LDAP connection, and there is no servlet.
[06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requestowner$ value=KRA-server.example.com-8443
Example 2.1. CA Certificate Request Log Messages
[06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.profileapprovedby$ value=admin [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.cert_request$ value=MIIBozCCAZ8wggEFAgQqTfoHMIHHgAECpQ4wDDEKMAgGA1UEAxMBeKaBnzANBgkqhkiG9w0BAQEFAAOB... [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.profile$ value=true [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.cert_request_type$ value=crmf [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requestversion$ value=1.0.0 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.req_locale$ value=en [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requestowner$ value=KRA-server.example.com-8443 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.dbstatus$ value=NOT_UPDATED [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.subject$ value=uid=jsmith, e=jsmith@example.com [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requeststatus$ value=begin [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.user$ value=uid=KRA-server.example.com-8443,ou=People,dc=example,dc=com [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.req_key$ value=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDreuEsBWq9WuZ2MaBwtNYxvkLP^M HcN0cusY7gxLzB+XwQ/VsWEoObGldg6WwJPOcBdvLiKKfC605wFdynbEgKs0fChV^M k9HYDhmJ8hX6+PaquiHJSVNhsv5tOshZkCfMBbyxwrKd8yZ5G5I+2gE9PUznxJaM^M HTmlOqm4HwFxzy0RRQIDAQAB [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.authmgrinstname$ value=raCertAuth [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.uid$ value=KRA-server.example.com-8443 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.userid$ value=KRA-server.example.com-8443 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requestor_name$ value= [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.profileid$ value=caUserCert [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.userdn$ value=uid=KRA-server.example.com-4747,ou=People,dc=example,dc=com [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.requestid$ value=20 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.auth_token.authtime$ value=1212782378071 [06/Jun/2022:14:59:38][http-8443;-Processor24]: ProfileSubmitServlet: key=$request.req_x509info$ value=MIICIKADAgECAgEAMA0GCSqGSIb3DQEBBQUAMEAxHjAcBgNVBAoTFVJlZGJ1ZGNv^M bXB1dGVyIERvbWFpbjEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4X^M DTA4MDYwNjE5NTkzOFoXDTA4MTIwMzE5NTkzOFowOzEhMB8GCSqGSIb3DQEJARYS^M anNtaXRoQGV4YW1wbGUuY29tMRYwFAYKCZImiZPyLGQBARMGanNtaXRoMIGfMA0G^M CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDreuEsBWq9WuZ2MaBwtNYxvkLPHcN0cusY^M 7gxLzB+XwQ/VsWEoObGldg6WwJPOcBdvLiKKfC605wFdynbEgKs0fChVk9HYDhmJ^M 8hX6+PaquiHJSVNhsv5tOshZkCfMBbyxwrKd8yZ5G5I+2gE9PUznxJaMHTmlOqm4^M HwFxzy0RRQIDAQABo4HFMIHCMB8GA1UdIwQYMBaAFG8gWeOJIMt+aO8VuQTMzPBU^M 78k8MEoGCCsGAQUFBwEBBD4wPDA6BggrBgEFBQcwAYYuaHR0cDovL3Rlc3Q0LnJl^M ZGJ1ZGNvbXB1dGVyLmxvY2FsOjkwODAvY2Evb2NzcDAOBgNVHQ8BAf8EBAMCBeAw^M HQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMCQGA1UdEQQdMBuBGSRyZXF1^M ZXN0LnJlcXVlc3Rvcl9lbWFpbCQ=
[07/Jul/2022:06:25:40][http-11180-Processor25]: OCSPServlet: OCSP Request: [07/Jul/2022:06:25:40][http-11180-Processor25]: OCSPServlet: MEUwQwIBADA+MDwwOjAJBgUrDgMCGgUABBSEWjCarLE6/BiSiENSsV9kHjqB3QQU
2.3.14.3. Installation Logs
pkispawn
, an installation file with the complete debug output from the installation, including any errors and, if the installation is successful, the URL and PIN to the configuration interface for the instance. The file is created in the /var/log/pki/
directory for the instance with a name in the form pki-subsystem_name-spawn.timestamp.log
.
Example 2.2. CA Install Log
========================================================================== INSTALLATION SUMMARY ========================================================================== Administrator's username: caadmin Administrator's PKCS #12 file: /root/.dogtag/pki-tomcat/ca_admin_cert.p12 Administrator's certificate nickname: caadmin Administrator's certificate database: /root/.dogtag/pki-tomcat/ca/alias To check the status of the subsystem: systemctl status pki-tomcatd@pki-tomcat.service To restart the subsystem: systemctl restart pki-tomcatd@pki-tomcat.service The URL for the subsystem is: https://localhost.localdomain:8443/ca PKI instances will be enabled upon system boot ==========================================================================
2.3.14.4. Tomcat Error and Access Logs
- admin.timestamp
- catalina.timestamp
- catalina.out
- host-manager.timestamp
- localhost.timestamp
- localhost_access_log.timestamp
- manager.timestamp
2.3.14.5. Self-Tests Log
CS.cfg
file. The information about logs in this section does not pertain to this log. See Section 2.6.5, “Self-Tests” for more information about self-tests.
2.3.14.6. journalctl
Logs
systemd
and exposed via the journalctl
utility.
# journalctl -u pki-tomcatd@instance_name.service
nuxwdog
service:
# journalctl -u pki-tomcatd-nuxwdog@instance_name.service
# journalctl -f -u pki-tomcatd@instance_name.service
nuxwdog
service:
# journalctl -f -u pki-tomcatd-nuxwdog@instance_name.service
2.3.15. Instance Layout
/etc/pki/instance_name/server.xml
, which is instance-specific, but the CA servlets are defined in /usr/share/pki/ca/webapps/ca/WEB-INF/web.xml
, which is shared by all server instances on the system.
2.3.15.1. File and Directory Locations for Certificate System
pki-tomcat
; the true value is whatever is specified at the time the subsystem is created with pkispawn
.
Setting | Value |
---|---|
Main Directory | /var/lib/pki/pki-tomcat |
Configuration Directory | /etc/pki/pki-tomcat |
Configuration File |
/etc/pki/pki-tomcat/server.xml
/etc/pki/pki-tomcat/password.conf
|
Security Databases | /var/lib/pki/pki-tomcat/alias |
Subsystem Certificates |
SSL server certificate
Subsystem certificate [a]
|
Log Files | /var/log/pki/pki-tomcat |
Web Services Files |
/usr/share/pki/server/webapps/ROOT - Main page
/usr/share/pki/server/webapps/pki/admin - Admin templates
/usr/share/pki/server/webapps/pki/js - JavaScript libraries
|
[a]
The subsystem certificate is always issued by the security domain so that domain-level operations that require client authentication are based on this subsystem certificate.
|
Note
/var/lib/pki/instance_name/conf/
directory is a symbolic link to the /etc/pki/instance_name/
directory.
2.3.15.2. CA Subsystem Information
pki-tomcat
; the true value is whatever is specified at the time the subsystem is created with pkispawn
.
Setting | Value |
---|---|
Main Directory | /var/lib/pki/pki-tomcat/ca |
Configuration Directory | /etc/pki/pki-tomcat/ca |
Configuration File | /etc/pki/pki-tomcat/ca/CS.cfg |
Subsystem Certificates |
CA signing certificate
OCSP signing certificate (for the CA's internal OCSP service)
Audit log signing certificate
|
Log Files | /var/log/pki/pki-tomcat/ca |
Install Logs | /var/log/pki/pki-ca-spawn.YYYYMMDDhhmmss.log |
Profile Files | /var/lib/pki/pki-tomcat/ca/profiles/ca |
Email Notification Templates | /var/lib/pki/pki-tomcat/ca/emails |
Web Services Files |
/usr/share/pki/ca/webapps/ca/agent - Agent services
/usr/share/pki/ca/webapps/ca/admin - Admin services
/usr/share/pki/ca/webapps/ca/ee - End user services
|
2.3.15.3. KRA Subsystem Information
pki-tomcat
; the true value is whatever is specified at the time the subsystem is created with pkispawn
.
Setting | Value |
---|---|
Main Directory | /var/lib/pki/pki-tomcat/kra |
Configuration Directory | /etc/pki/pki-tomcat/kra |
Configuration File | /etc/pki/pki-tomcat/kra/CS.cfg |
Subsystem Certificates |
Transport certificate
Storage certificate
Audit log signing certificate
|
Log Files | /var/log/pki/pki-tomcat/kra |
Install Logs | /var/log/pki/pki-kra-spawn.YYYYMMDDhhmmss.log |
Web Services Files |
/usr/share/pki/kra/webapps/kra/agent - Agent services
/usr/share/pki/kra/webapps/kra/admin - Admin services
|
2.3.15.4. OCSP Subsystem Information
pki-tomcat
; the true value is whatever is specified at the time the subsystem is created with pkispawn
.
Setting | Value |
---|---|
Main Directory | /var/lib/pki/pki-tomcat/ocsp |
Configuration Directory | /etc/pki/pki-tomcat/ocsp |
Configuration File | /etc/pki/pki-tomcat/ocsp/CS.cfg |
Subsystem Certificates |
OCSP signing certificate
Audit log signing certificate
|
Log Files | /var/log/pki/pki-tomcat/ocsp |
Install Logs | /var/log/pki/pki-ocsp-spawn.YYYYMMDDhhmmss.log |
Web Services Files |
/usr/share/pki/ocsp/webapps/ocsp/agent - Agent services
/usr/share/pki/ocsp/webapps/ocsp/admin - Admin services
|
2.3.15.5. TKS Subsystem Information
pki-tomcat
; the true value is whatever is specified at the time the subsystem is created with pkispawn
.
Setting | Value |
---|---|
Main Directory | /var/lib/pki/pki-tomcat/tks |
Configuration Directory | /etc/pki/pki-tomcat/tks |
Configuration File | /etc/pki/pki-tomcat/tks/CS.cfg |
Subsystem Certificates | Audit log signing certificate |
Log Files | /var/log/pki/pki-tomcat/tks |
Install Logs | /var/log/pki/pki-tomcat/pki-tks-spawn.YYYYMMDDhhmmss.log |
2.3.15.6. TPS Subsystem Information
pki-tomcat
; the true value is whatever is specified at the time the subsystem is created with pkispawn
.
Setting | Value |
---|---|
Main Directory | /var/lib/pki/pki-tomcat/tps |
Configuration Directory | /etc/pki/pki-tomcat/tps |
Configuration File | /etc/pki/pki-tomcat/tps/CS.cfg |
Subsystem Certificates | Audit log signing certificate |
Log Files | /var/log/pki/pki-tomcat/tps |
Install Logs | /var/log/pki/pki-tps-spawn.YYYYMMDDhhhmmss.log |
Web Services Files | /usr/share/pki/tps/webapps/tps - TPS services |
2.3.15.7. Shared Certificate System Subsystem File Locations
Directory Location | Contents |
---|---|
/usr/share/pki | Contains common files and templates used to create Certificate System instances. Along with shared files for all subsystems, there are subsystem-specific files in subfolders:
|
/usr/bin | Contains the pkispawn and pkidestroy instance configuration scripts and tools (Java, native, and security) shared by the Certificate System subsystems. |
/usr/share/java/pki | Contains Java archive files shared by local Tomcat web applications and shared by the Certificate System subsystems. |
2.4. PKI with Certificate System
Note
2.4.1. Issuing Certificates
2.4.1.1. The Enrollment Process
2.4.1.1.1. Enrollment Using the User Interface
- The end entity provides the information in one of the enrollment forms and submits a request.The information gathered from the end entity is customizable in the form depending on the information collected to store in the certificate or to authenticate against the authentication method associated with the form. The form creates a request that is then submitted to the Certificate Manager.
- The enrollment form triggers the creation of the public and private keys or for dual-key pairs for the request.
- The end entity provides authentication credentials before submitting the request, depending on the authentication type. This can be LDAP authentication, PIN-based authentication, or certificate-based authentication.
- The request is submitted either to an agent-approved enrollment process or an automated process.
- The agent-approved process, which involves no end-entity authentication, sends the request to the request queue in the agent services interface, where an agent must processes the request. An agent can then modify parts of the request, change the status of the request, reject the request, or approve the request.Automatic notification can be set up so an email is sent to an agent any time a request appears in the queue. Also, an automated job can be set to send a list of the contents of the queue to agents on a pre configured schedule.
- The automated process, which involves end-entity authentication, processes the certificate request as soon as the end entity successfully authenticates.
- The form collects information about the end entity from an LDAP directory when the form is submitted. For certificate profile-based enrollment, the defaults for the form can be used to collect the user LDAP ID and password.
- The certificate profile associated with the form determine aspects of the certificate that is issued. Depending on the certificate profile, the request is evaluated to determine if the request meets the constraints set, if the required information is provided, and the contents of the new certificate.
- The form can also request that the user export the private encryption key. If the KRA subsystem is set up with this CA, the end entity's key is requested, and an archival request is sent to the KRA. This process generally requires no interaction from the end entity.
- The certificate request is either rejected because it did not meet the certificate profile or authentication requirements, or a certificate is issued.
- The certificate is delivered to the end entity.
- In automated enrollment, the certificate is delivered to the user immediately. Since the enrollment is normally through an HTML page, the certificate is returned as a response on another HTML page.
- In agent-approved enrollment, the certificate can be retrieved by serial number or request Id in the end-entity interface.
- If the notification feature is set up, the link where the certificate can be obtained is sent to the end user.
- An automatic notice can be sent to the end entity when the certificate is issued or rejected.
- The new certificate is stored in the Certificate Manager's internal database.
- If publishing is set up for the Certificate Manager, the certificate is published to a file or an LDAP directory.
- The internal OCSP service checks the status of certificates in the internal database when a certificate status request is received.
2.4.1.1.2. Enrollment Using the Command Line
2.4.1.1.2.1. Enrolling Using the pki
Utility
- The pki-cert(1) man page
- The Command-Line Interfaces section in the Red Hat Certificate System Administration Guide.
2.4.1.1.2.2. Enrolling with CMC
- Generate a PKCS #10 or CRMF certificate signing request (CSR) using a utility, such as
PKCS10Client
orCRMFPopClient
.Note
If key archival is enabled in the Key Recovery Agent (KRA), use theCRMFPopClient
utility with the KRA's transport certificate in Privacy Enhanced Mail (PEM) format set in thekra.transport
file. - Use the
CMCRequest
utility to convert the CSR into a CMC request. TheCMCRequest
utility uses a configuration file as input. This file contains, for example, the path to the CSR and the CSR's format.For further details and examples, see the CMCRequest(1) man page. - Use the
HttpClient
utility to send the CMC request to the CA.HttpClient
uses a configuration file with settings, such as the path to the CMC request file and the servlet.If theHttpClient
command succeeds, the utility receives a PKCS #7 chain with CMC status controls from the CA.For details about what parameters the utility provides, enter theHttpClient
command without any parameters. - Use the
CMCResponse
utility to check the issuance result of the PKCS #7 file generated byHttpClient
. If the request is successful,CMCResponse
displays the certificate chain in a readable format.For further details, see the CMCResponse(1) man page. - Import the new certificate into the application. For details, follow the instructions of the application to which you want to import the certificate.
Note
The certificate retrieved byHttpClient
is in PKCS #7 format. If the application supports only Base64-encoded certificates, use theBtoA
utility to convert the certificate.Additionally, certain applications require a header and footer for certificates in Privacy Enhanced Mail (PEM) format. If these are required, add them manually to the PEM file after you converted the certificate.
2.4.1.1.2.2.1. CMC Enrollment without POP
HttpClient
utility receives an EncryptedPOP
CMC status, which is displayed by the CMCResponse
command. In this case, enter the CMCRequest
command again with different parameters in the configuration file.
2.4.1.1.2.2.2. Signed CMC Requests
- If an agent signs the request, set the authentication method in the profile to
CMCAuth
. - If a user signs the request, set the authentication method in the profile to
CMCUserSignedAuth
.
2.4.1.1.2.2.3. Unsigned CMC Requests
CMCUserSignedAuth
authentication plug-in is configured in the profile, you must use an unsigned CMC request in combination with the Shared Secret authentication mechanism.
Note
self-signed CMC requests
.
2.4.1.1.2.2.5. Simple CMC Requests
HttpClient
utility's configuration file:
servlet=/ca/ee/ca/profileSubmitCMCSimple?profileId=caECSimpleCMCUserCert
2.4.1.2. Certificate Profiles
- Certificates that are X.509 version 3-compliant
- Unicode support for the certificate subject name and issuer name
- Support for empty certificate subject names
- Support for customized subject name components
- Support for customized extensions
<instance directory>/ca/profiles/ca
with names in the format of <profile id>.cfg
. LDAP-based profiles are possible with proper pkispawn
configuration parameters.
2.4.1.3. Authentication for Certificate Enrollment
2.4.1.4. Cross-Pair Certificates
2.4.2. Renewing Certificates
2.4.3. Publishing Certificates and CRLs
2.4.4. Revoking Certificates and Checking Status
2.4.4.1. Revoking Certificates
- The end-entity pages. For details, see the Certificate Revocation Pages section in the Red Hat Certificate System Administration Guide.
- The
CMCRequest
utility on the command line. For details, see the Performing a CMC Revocation section in the Red Hat Certificate System Administration Guide. - The
pki
utility on the command line. For details, see pki-cert(1) man page.
2.4.4.2. Certificate Status
2.4.4.2.1. CRLs
2.4.4.2.2. OCSP Services
- A CA is set up to issue certificates that include the Authority Information Access extension, which identifies an OCSP responder that can be queried for the status of the certificate.
- The CA periodically publishes CRLs to an OCSP responder.
- The OCSP responder maintains the CRL it receives from the CA.
- An OCSP-compliant client sends requests containing all the information required to identify the certificate to the OCSP responder for verification. The applications determine the location of the OCSP responder from the value of the Authority Information Access extension in the certificate being validated.
- The OCSP responder determines if the request contains all the information required to process it. If it does not or if it is not enabled for the requested service, a rejection notice is sent. If it does have enough information, it processes the request and sends back a report stating the status of the certificate.
2.4.4.2.2.1. OCSP Response Signing
- The CA that issued the certificate whose status is being checked.
- A responder with a public key trusted by the client. Such a responder is called a trusted responder.
- A responder that holds a specially marked certificate issued to it directly by the CA that revokes the certificates and publishes the CRL. Possession of this certificate by a responder indicates that the CA has authorized the responder to issue OCSP responses for certificates revoked by the CA. Such a responder is called a CA-designated responder or a CA-authorized responder.
2.4.4.2.2.2. OCSP Responses
- Good or Verified . Specifies a positive response to the status inquiry, meaning the certificate has not been revoked. It does not necessarily mean that the certificate was issued or that it is within the certificate's validity interval. Response extensions may be used to convey additional information on assertions made by the responder regarding the status of the certificate.
- Revoked . Specifies that the certificate has been revoked, either permanently or temporarily.
Note
2.4.4.2.2.3. OCSP Services
- The OCSP built into the Certificate Manager
- The Online Certificate Status Manager subsystem
Note
2.4.5. Archiving, Recovering, and Rotating Keys
2.4.5.1. Archiving Keys
- Client-side key generation: With this mechanism, clients are to generate CSRs in CRMF format, and submit the requests to the CA (with proper KRA setup) for enrollment and key archival. See the Creating a CSR Using CRMFPopClient section in the Red Hat Certificate System Administration Guide.
- Server-side key generation: With this mechanism, the properly equipped certificate enrollment profiles would trigger the PKI keys to be generated on KRA and thereby optionally archived along with newly issued certificates. See the Generating CSRs Using Server-Side Key Generation section in the Red Hat Certificate System Administration Guide.
- When the key recovery agents search by the key ID, only the key that corresponds to that ID is returned.
- When the agents search by username, all stored keys belonging to that owner are returned.
- When the agents search by the public key in a certificate, only the corresponding private key is returned.
- A transport key pair and corresponding certificate.
- A storage key pair.

Figure 2.2. How the Key Archival Process Works in Client-Side Key Generation
- The client generates a CRMF request and submits it through the CA’s enrollment portal.
- The client’s private key is wrapped within the CRMF request and can only be unwrapped by the KRA.
- Detecting that it’s a CRMF request with key archival option, CA forwards the request to KRA for private key archival.
- The KRA decrypts / unwraps the user private key, and after confirming that the private key corresponds to the public key, the KRA encrypts / wraps it again before storing it in its internal LDAP database.
- Once the private encryption key has been successfully stored, the KRA responds to CA confirming that the key has been successfully archived.
- The CA sends the request down its Enrollment Profile Framework for certificate information content creation as well as validation. When everything passes, it then issues the certificate and sends it back to the end entity in its response.
2.4.5.2. Recovering Keys

Figure 2.3. Asynchronous Recovery
Warning
Important
pki
utility to replicate this behavior. For more information, see the pki(1) and pki-key(1) man pages or run CRMFPopClient --help and man CMCRequest.
pki
utility supports options that enable storing and retrieving these other types of secrets.
2.4.5.3. KRA Transport Key Rotation
- Generate a new KRA transport key and certificate
- Transfer the new transport key and certificate to KRA clones
- Update the CA configuration with the new KRA transport certificate
- Update the KRA configuration to use only the new transport key and certificate
- Generating the new KRA transport key and certificate
- Request the KRA transport certificate.
- Stop the KRA:
# pki-server stop pki-kra
OR (if using thenuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@pki-kra.service
- Go to the KRA NSS database directory:
# cd /etc/pki/pki-kra/alias
- Create a subdirectory and save all the NSS database files into it. For example:
mkdir nss_db_backup cp *.db nss_db_backup
- Create a new request by using the
PKCS10Client
utility. For example:# PKCS10Client -p password -d '.' -o 'req.txt' -n 'CN=KRA Transport 2 Certificate,O=example.com Security Domain'
Alternatively, use thecertutil
utility. For example:# certutil -d . -R -k rsa -g 2048 -s 'CN=KRA Transport 2 Certificate,O=example.com Security Domain' -f password-file -a -o transport-certificate-request-file
- Submit the transport certificate request on the Manual Data Recovery Manager Transport Certificate Enrollment page of the CA End-Entity page.
- Wait for the agent approval of the submitted request to retrieve the certificate by checking the request status on the End-Entity retrieval page.
- Approve the KRA transport certificate through the CA Agent Services interface.
- Retrieve the KRA transport certificate.
- Go to the KRA NSS database directory:
# cd /etc/pki/pki-kra/alias
- Wait for the agent approval of the submitted request to retrieve the certificate by checking the request status on the End-Entity retrieval page.
- Once the new KRA transport certificate is available, paste its Base64-encoded value into a text file, for example a file named
cert-serial_number.txt
. Do not include the header (-----BEGIN CERTIFICATE-----
) or the footer (-----END CERTIFICATE-----
).
- Import the KRA transport certificate.
- Go to the KRA NSS database directory:
# cd /etc/pki/pki-kra/alias
- Import the transport certificate into the KRA NSS database:
# certutil -d . -A -n 'transportCert-serial_number cert-pki-kra KRA' -t 'u,u,u' -a -i cert-serial_number.txt
- Update the KRA transport certificate configuration.
- Go to the KRA NSS database directory:
# cd /etc/pki/pki-kra/alias
- Verify that the new KRA transport certificate is imported:
# certutil -d . -L # certutil -d . -L -n 'transportCert-serial_number cert-pki-kra KRA'
- Open the
/var/lib/pki/pki-kra/kra/conf/CS.cfg
file and add the following line:kra.transportUnit.newNickName=transportCert-serial_number cert-pki-kra KRA
- Propagating the new transport key and certificate to KRA clones
- Start the KRA:
# pki-server start pki-kra
or (if using thenuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@pki-kra.service
- Extract the new transport key and certificate for propagation to clones.
- Go to the KRA NSS database directory:
# cd /etc/pki/pki-kra/alias
- Stop the KRA:
# pki-server stop pki-kra
or (if using thenuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@pki-kra.service
- Verify that the new KRA transport certificate is present:
# certutil -d . -L # certutil -d . -L -n 'transportCert-serial_number cert-pki-kra KRA'
- Export the KRA new transport key and certificate:
# pk12util -o transport.p12 -d . -n 'transportCert-serial_number cert-pki-kra KRA'
- Verify the exported KRA transport key and certificate:
# pk12util -l transport.p12
- Perform these steps on each KRA clone:
- Copy the
transport.p12
file, including the transport key and certificate, to the KRA clone location. - Go to the clone NSS database directory:
# cd /etc/pki/pki-kra/alias
- Stop the KRA clone:
# pki-server stop pki-kra
or (if using thenuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@pki-kra.service
- Check the content of the clone NSS database:
# certutil -d . -L
- Import the new transport key and certificate of the clone:
# pk12util -i transport.p12 -d .
- Add the following line to the
/var/lib/pki/pki-kra/kra/conf/CS.cfg
file on the clone:kra.transportUnit.newNickName=transportCert-serial_number cert-pki-kra KRA
- Start the KRA clone:
# pki-server start pki-kra
or (if using thenuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@pki-kra.service
- Updating the CA configuration with the new KRA transport certificate
- Format the new KRA transport certificate for inclusion in the CA.
- Obtain the
cert-serial_number.txt
KRA transport certificate file created when retrieving the KRA transport certificate in the previous procedure. - Convert the Base64-encoded certificate included in
cert-serial_number.txt
to a single-line file:# tr -d '\n' < cert-serial_number.txt > cert-one-line-serial_number.txt
- Do the following for the CA and all its clones corresponding to the KRA above:
- Stop the CA:
# pki-server stop pki-ca
or (if using thenuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@pki-ca.service
- In the
/var/lib/pki/pki-ca/ca/conf/CS.cfg
file, locate the certificate included in the following line:ca.connector.KRA.transportCert=certificate
Replace that certificate with the one contained incert-one-line-serial_number.txt
. - Start the CA:
# pki-server start pki-ca
or (if using thenuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@pki-ca.service
Note
While the CA and all its clones are being updated with the new KRA transport certificate, the CA instances that have completed the transition use the new KRA transport certificate, and the CA instances that have not yet been updated continue to use the old KRA transport certificate. Because the corresponding KRA and its clones have already been updated to use both transport certificates, no downtime occurs.- Updating the KRA configuration to use only the new transport key and certificate
- For the KRA and each of its clones, do the following:
- Go to the KRA NSS database directory:
# cd /etc/pki/pki-kra/alias
- Stop the KRA:
# pki-server stop pki-kra
or (if using thenuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@pki-kra.service
- Verify that the new KRA transport certificate is imported:
# certutil -d . -L # certutil -d . -L -n 'transportCert-serial_number cert-pki-kra KRA'
- Open the
/var/lib/pki/pki-kra/kra/conf/CS.cfg
file, and look for thenickName
value included in the following line:kra.transportUnit.nickName=transportCert cert-pki-kra KRA
Replace thenickName
value with thenewNickName
value included in the following line:kra.transportUnit.newNickName=transportCert-serial_number cert-pki-kra KRA
As a result, theCS.cfg
file includes this line:kra.transportUnit.nickName=transportCert-serial_number cert-pki-kra KRA
- Remove the following line from
/var/lib/pki/pki-kra/kra/conf/CS.cfg
:kra.transportUnit.newNickName=transportCert-serial_number cert-pki-kra KRA
- Start the KRA:
# pki-server start pki-kra
or (if using thenuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@pki-kra.service
2.5. Smart Card Token Management with Certificate System

Figure 2.4. How the TMS Manages Smart Cards
2.5.1. Token Key Service (TKS)
Note
2.5.1.1. Master Keys and Key Sets
CS.cfg
). Each TPS profile contains a configuration to direct its enrollment to the proper TKS keySet for the matching key derivation process that would essentially be responsible for establishing the Secure Channel secured by a set of session-specific keys between TMS and the smart card token.
2.5.1.3. Key Update (Key Changeover)
Important
2.5.1.4. APDUs and Secure Channels
- Command APDUs, sent by the TPS to smart cards
- Response APDUs, sent by smart cards to the TPS as response to command APDUs
2.5.2. Token Processing System (TPS)
2.5.2.1. Coolkey Applet
2.5.2.2. Token Operations
- Token Format - The format operation is responsible for installing the proper Coolkey applet onto the token. The applet provides a platform where subsequent cryptographic keys and certificates can be later placed.
- Token Enrollment - The enrollment operation results in a smart card populated with required cryptographic keys and cryptographic certificates. This material allows the user of the smart card to participate in operations such as secure web site access and secure mail. Two types of enrollments are supported, which is configured globally:
- Internal Registration - Enrollment by TPS profiles determined by the profile Mapping Resolver.
- External Registration - Enrollment by TPS profiles determined by the entries in the user’s LDAP record.
- Token PIN Reset - The token PIN reset operation allows the user of the token to specify a new PIN that is used to log into the token, making it available for performing cryptographic operations.
- Key Generation - Each PKI certificate is comprised of a public/private key pair. In Red Hat Certificate System, the generation of the keys can be done in two ways, depending on the TPS profile configuration:
- Token Side Key Generation - The PKI key pairs are generated on the smart card token. Generating the key pairs on the token side does not allow for key archival.
- Server Side Key Generation - The PKI key pairs are generated on the TMS server side. The key pairs are then sent back to the token using Secure Channel. Generating the key pairs on the server side allows for key archival.
- Certificate Renewal - This operation allows a previously enrolled token to have the certificates currently on the token reissued while reusing the same keys. This is useful in situations where the old certificates are due to expire and you want to create new ones but maintain the original key material.
- Certificate Revocation - Certificate revocation can be triggered based on TPS profile configuration or based on token state.Normally, only the CA which issued a certificate can revoke it, which could mean that retiring a CA would make it impossible to revoke certain certificates. However, it is possible to route revocation requests for tokens to the retired CA while still routing all other requests such as enrollment to a new, active CA. This mechanism is called Revocation Routing.
- Token Key Changeover - The key changeover operation, triggered by a format operation, results in the ability to change the internal keys of the token from the default developer key set to a new key set controlled by the deployer of the Token Processing System. This is usually done in any real deployment scenario since the developer key set is better suited to testing situations.
- Applet Update - During the course of a TMS deployment, the Coolkey smart card applet can be updated or downgraded if required.
2.5.2.3. TPS Profiles
- The steps taken to Format or Enroll a token.
- The attributes contained within the finished token after the operation has been successfully completed.
- How does the TPS connect to the user's authentication LDAP database?
- Will user authentication be required for this token operation? If so, what authentication manager will be used?
- How does the TPS connect to a Certificate System CA from which it will obtain certificates?
- How are the private and public keys generated on this token? Are they generated on the token side or on the server side?
- What key size (in bits) is to be used when generating private and public keys?
- Which certificate enrollment profile (provisioned by the CA) is to be used to generate the certificates on this token?
Note
This setting will determine the final structure of the certificates to be written to the token. Different certificates can be created for different uses, based on extensions included in the certificate. For example, one certificate can specialize in data encryption, and another one can be used for signature operations. - What version of the Coolkey applet will be required on the token?
- How many certificates will be placed on this token for an enrollment operation?
- Internal Registration - In this case, the TPS profile (
tokenType
) is determined by the profile Mapping Resolver. This filter-based resolver can be configured to take any of the data provided by the token into account and determine the target profile. - External Registration - When using external registration, the profile (in name only - actual profiles are still defined in the TPS in the same fashion as those used by the internal registration) is specified in each user's LDAP record, which is obtained during authentication. This allows the TPS to obtain key enrollment and recovery information from an external registration Directory Server where user information is stored. This gives you the control to override the enrollment, revocation, and recovery policies that are inherent to the TPS internal registration mechanism. The user LDAP record attribute names relevant to external registration are configurable.External registration can be useful when the concept of a "group certificate" is required. In that case, all users within a group can have a special record configured in their LDAP profiles for downloading a shared certificate and keys.
2.5.2.4. Token Database
2.5.2.4.1. Token States and Transitions
2.5.2.4.1.1. Token States
Name | Code | Label |
---|---|---|
FORMATTED | 0 | Formatted (uninitialized) |
DAMAGED | 1 | Physically damaged |
PERM_LOST | 2 | Permanently lost |
SUSPENDED | 3 | Suspended (temporarily lost) |
ACTIVE | 4 | Active |
TERMINATED | 6 | Terminated |
UNFORMATTED | 7 | Unformatted |
Note
5
, which previously belonged to a state that was removed.
2.5.2.4.1.2. Token State Transitions Done Using the Graphical or Command Line Interface
FORMATTED
to ACTIVE
or DAMAGED
, but it can never transition from FORMATTED
to UNFORMATTED
.
tokendb.allowedTransitions
property, and the tps.operations.allowedTransitions
property controls allowed transitions triggered by token operations.
/usr/share/pki/tps/conf/CS.cfg
configuration file.
2.5.2.4.1.2.1. Token State Transitions Using the Command Line or Graphical Interface
tokendb.allowedTransitions
property:
tokendb.allowedTransitions=0:1,0:2,0:3,0:6,3:2,3:6,4:1,4:2,4:3,4:6,6:7
<current code>:<new code>
. The codes are described in Table 2.9, “Possible Token States”. The default configuration is preserved in /usr/share/pki/tps/conf/CS.cfg
.
Transition | Current State | Next State | Description |
---|---|---|---|
0:1 | FORMATTED | DAMAGED | This token has been physically damaged. |
0:2 | FORMATTED | PERM_LOST | This token has been permanently lost. |
0:3 | FORMATTED | SUSPENDED | This token has been suspended (temporarily lost). |
0:6 | FORMATTED | TERMINATED | This token has been terminated. |
3:2 | SUSPENDED | PERM_LOST | This suspended token has been permanently lost. |
3:6 | SUSPENDED | TERMINATED | This suspended token has been terminated. |
4:1 | ACTIVE | DAMAGED | This token has been physically damaged. |
4:2 | ACTIVE | PERM_LOST | This token has been permanently lost. |
4:3 | ACTIVE | SUSPENDED | This token has been suspended (temporarily lost). |
4:6 | ACTIVE | TERMINATED | This token has been terminated. |
6:7 | TERMINATED | UNFORMATTED | Reuse this token. |
FORMATTED
and then became SUSPENDED
, it can only return to the FORMATTED
state. If a token was originally ACTIVE
and then became SUSPENDED
, it can only return to the ACTIVE
state.
Transition | Current State | Next State | Description |
---|---|---|---|
3:0 | SUSPENDED | FORMATTED | This suspended (temporarily lost) token has been found. |
3:4 | SUSPENDED | ACTIVE | This suspended (temporarily lost) token has been found. |
2.5.2.4.1.3. Token State Transitions using Token Operations
tokendb.allowedTransitions
property:
tps.operations.allowedTransitions=0:0,0:4,4:4,4:0,7:0
<current code>:<new code>
. The codes are described in Table 2.9, “Possible Token States”. The default configuration is preserved in /usr/share/pki/tps/conf/CS.cfg
.
Transition | Current State | Next State | Description |
---|---|---|---|
0:0 | FORMATTED | FORMATTED | This allows reformatting a token or upgrading applet/key in a token. |
0:4 | FORMATTED | ACTIVE | This allows enrolling a token. |
4:4 | ACTIVE | ACTIVE | This allows re-enrolling an active token. May be useful for external registration. |
4:0 | ACTIVE | FORMATTED | This allows formatting an active token. |
7:0 | UNFORMATTED | FORMATTED | This allows formatting a blank or previously used token. |
2.5.2.4.1.4. Token State and Transition Labels
/usr/share/pki/tps/conf/token-states.properties
configuration file. By default, the file has the following contents:
# Token states UNFORMATTED = Unformatted FORMATTED = Formatted (uninitialized) ACTIVE = Active SUSPENDED = Suspended (temporarily lost) PERM_LOST = Permanently lost DAMAGED = Physically damaged TEMP_LOST_PERM_LOST = Temporarily lost then permanently lost TERMINATED = Terminated # Token state transitions FORMATTED.DAMAGED = This token has been physically damaged. FORMATTED.PERM_LOST = This token has been permanently lost. FORMATTED.SUSPENDED = This token has been suspended (temporarily lost). FORMATTED.TERMINATED = This token has been terminated. SUSPENDED.ACTIVE = This suspended (temporarily lost) token has been found. SUSPENDED.PERM_LOST = This suspended (temporarily lost) token has become permanently lost. SUSPENDED.TERMINATED = This suspended (temporarily lost) token has been terminated. SUSPENDED.FORMATTED = This suspended (temporarily lost) token has been found. ACTIVE.DAMAGED = This token has been physically damaged. ACTIVE.PERM_LOST = This token has been permanently lost. ACTIVE.SUSPENDED = This token has been suspended (temporarily lost). ACTIVE.TERMINATED = This token has been terminated. TERMINATED.UNFORMATTED = Reuse this token.
2.5.2.4.1.5. Customizing Allowed Token State Transitions
/var/lib/pki/instance_name/tps/conf/CS.cfg
:
tokendb.allowedTransitions
to customize the list of allowed transitions performed using the command line or graphical interfacetps.operations.allowedTransitions
to customize the list of allowed transitions using token operations
/usr/share/pki/tps/conf/CS.cfg
.
2.5.2.4.1.6. Customizing Token State and Transition Labels
/usr/share/pki/tps/conf/token-states.properties
into your instance folder (/var/lib/pki/instance_name/tps/conf/CS.cfg
), and change the labels listed inside as needed.
token-states.properties
file from your instance folder.
2.5.2.4.1.7. Token Activity Log
Activity | Description |
---|---|
add | A token was added. |
format | A token was formatted. |
enrollment | A token was enrolled. |
recovery | A token was recovered. |
renewal | A token was renewed. |
pin_reset | A token PIN was reset. |
token_status_change | A token status was changed using the command line or graphical interface. |
token_modify | A token was modified. |
delete | A token was deleted. |
cert_revocation | A token certificate was revoked. |
cert_unrevocation | A token certificate was unrevoked. |
2.5.2.4.2. Token Policies
RE_ENROLL=YES;RENEW=NO;FORCE_FORMAT=NO;PIN_RESET=NO;RESET_PIN_RESET_TO_NO=NO;RENEW_KEEP_OLD_ENC_CERTS=YES
2.5.2.5. Mapping Resolver
Note
FilterMappingResolver
is the only mapping resolver implementation provided with the TPS by default. It allows you to define a set of mappings and a target result for each mapping. Each mapping contains a set of filters, where:
- If the input filter parameters pass all filters within a mapping, the
target
value is assigned. - If the input parameters fail a filter, that mapping is skipped and the next one in order is tried.
- If a filter has no specified value, it always passes.
- If a filter does have a specified value, then the input parameters must match exactly.
- The order in which mappings are defined is important. The first mapping which passes is considered resolved and is returned to the caller.
FilterMappingResolver
according to the above rules. The following input filter parameters are supported by FilterMappingResolver
:
appletMajorVersion
- The major version of the Coolkey applet on the token.appletMinorVersion
- The minor version of the Coolkey applet on the token.keySet
ortokenType
keySet
- can be set as an extension in the client request. Must match the value in the filter if the extension is specified. The keySet mapping resolver is meant for determining keySet value when using external registration. The Key Set Mapping Resolver is necessary in the external registration environment when multiple key sets are supported (for example, different smart card token vendors). The keySet value is needed for identifying the master key on TKS, which is crucial for establishing Secure Channel. When a user's LDAP record is populated with a set tokenType (TPS profile), it does not know which card will end up doing the enrollment, and therefore keySet cannot be predetermined. ThekeySetMappingResolver
helps solve the issue by allowing the keySet to be resolved before authentication.tokenType
- okenType can be set as an extension in the client request. It must match the value in the filter if the extension is specified. tokenType (also referred to as TPS Profile) is determined at this time for the internal registration environment.
tokenATR
- The token's Answer to Reset (ATR).tokenCUID
- "start" and "end" define the range the Card Unique IDs (CUID) of the token must fall in to pass this filter.
2.5.2.6. TPS Roles
- TPS Administrator - this role is allowed to:
- Manage TPS tokens
- View TPS certificates and activities
- Manage TPS users and groups
- Change general TPS configuration
- Manage TPS authenticators and connectors
- Configure TPS profiles and profile mappings
- Configure TPS audit logging
- TPS Agent - this role is allowed to:
- Configure TPS tokens
- View TPS certificates and activities
- Change the status of TPS profiles
- TPS Operator - this role is allowed to:
- View TPS tokens, certificates, and activities
2.5.4. Enterprise Security Client (ESC)
2.6. Red Hat Certificate System Services
2.6.1. Notifications
2.6.2. Jobs
2.6.3. Logging
2.6.4. Auditing
2.6.5. Self-Tests
2.6.6. Users, Authorization, and Access Controls
2.6.6.1. Default Administrative Roles
Note
- Administrators, who can perform any administrative or configuration task for a subsystem.
- Agents, who perform PKI management tasks, like approving certificate requests, managing token enrollments, or recovering keys.
- Auditors, who can view and configure audit logs.
Note
pkispawn
utility. This bootstrap administrator uses the caadmin
user name by default but can be overridden by the pki_admin_uid
parameter in the configuration file passed to the pkispawn
command. The purpose of the bootstrap administrator is to create the first administrator and agent user. This operation requires the administrator privilege to mange user and groups, and the agent privilege to issue certificates.
2.6.6.2. Built-in Subsystem Trust Roles
2.7. Cloning
2.7.1. About Cloning
Note

Figure 2.5. Cloning Example
- DNS round-robin, a feature for managing network congestion that distributes load across several different servers.
- Sticky SSL/TLS, which makes it possible for a user returning to the system to be routed the same host used previously.
[Tomcat]
section to the PKI instance override configuration file and adding the following two name=value
pairs under that section:
[Tomcat] pki_clone_setup_replication=False pki_clone_reindex_data=False
Important
pkispawn
is invoked when specifying this kind of installation.
2.7.2. Preparing Clones
p12
file which can then be used while installing a clone subsystem. This command does not install or setup a clone subsystem, but prepares it for installation. Here is an example how to export subsystem certificates using the pki-server SUBSYSTEM-clone-prepare
command.
Example 2.3. Exporting Subsystem Certificates
[root@pki1 ~]$
pki-server ca-clone-prepare --i topology-02-CA --pkcs12-file /tmp/caclone.p12 --pkcs12-password SECret.123
----------------------------------------------------- Added certificate "subsystemCert cert-topology-02-CA" ----------------------------------------------------- -------------------------------------------------------- Added certificate "caSigningCert cert-topology-02-CA CA" -------------------------------------------------------- ---------------------------------------------------------- Added certificate "ocspSigningCert cert-topology-02-CA CA" ---------------------------------------------------------- ----------------------------------------------------------- Added certificate "auditSigningCert cert-topology-02-CA CA" -----------------------------------------------------------
p12
file contains the certificates. In the following example, the output of the pki pkcs12-cert-find
returns four certificates:
[root@pki1 ~]$
pki pkcs12-cert-find --pkcs12-file /tmp/caclone.p12 --pkcs12-password SECret.123
--------------- 4 entries found --------------- Certificate ID: 4649cef11b90c78d126874b91654de98ded54073 Serial Number: 0x4 Nickname: subsystemCert cert-topology-02-CA Subject DN: CN=Subsystem Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org Issuer DN: CN=CA Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org Trust Flags: u,u,u Has Key: true Certificate ID: a304cf107abd79fbda06d887cd279fb02cefe438 Serial Number: 0x1 Nickname: caSigningCert cert-topology-02-CA CA Subject DN: CN=CA Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org Issuer DN: CN=CA Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org Trust Flags: CTu,Cu,Cu Has Key: true Certificate ID: 4a09e057c1edfee40f412551db1959831abe117d Serial Number: 0x2 Nickname: ocspSigningCert cert-topology-02-CA CA Subject DN: CN=CA OCSP Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org Issuer DN: CN=CA Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org Trust Flags: u,u,u Has Key: true Certificate ID: 3f42f88026267f90f59631d38805cc60ee4c711a Serial Number: 0x5 Nickname: auditSigningCert cert-topology-02-CA CA Subject DN: CN=CA Audit Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org Issuer DN: CN=CA Signing Certificate,OU=topology-02-CA,O=topology-02_Foobarmaster.org Trust Flags: u,u,Pu Has Key: true
p12
file, you can now set up a clone subsystem.
2.7.3. Cloning for CAs
begin*Number
and end*Number
attributes, with separate ranges defined for requests and certificate serial numbers. For example:
dbs.beginRequestNumber=1 dbs.beginSerialNumber=1 dbs.enableSerialManagement=true dbs.endRequestNumber=9980000 dbs.endSerialNumber=ffe0000 dbs.replicaCloneTransferNumber=5
Note
Important
CS.cfg
file — such as adding a KRA connection or creating a custom profile — are not copied into a clone's configuration if the change occurs after the clone is created.
2.7.4. Cloning for KRAs
Important
2.7.5. Cloning for Other Subsystems
2.7.6. Cloning and Key Stores
pki_backup_keys
and pki_backup_password
parameters in the pkispawn
configuration file. See the BACKUP PARAMETERS
section in the pki_default.cfg(5) man page for more details.
PKCS12Export
utility, as described in Section 10.1, “Backing up Subsystem Keys from a Software Database”.
pkispawn
configuration file using the pki_clone_pkcs12_password
and pki_clone_pkcs12_path
parameters For more information, see the Installing a Clone
section in the pkispawn(8) man page. In particular, make sure that the PKCS#12 file is accessible by the pkiuser
user and that it has the correct SELinux label.
- Duplicate all the required keys and certificates, except the SSL/TLS server key and certificate to the clone instance. Keep the nicknames for those certificates the same. Additionally, copy all the necessary trusted root certificates from the master instance to the clone instance, such as chains or cross-pair certificates.
- If the token is network-based, then the keys and certificates simply need to be available to the token; the keys and certificates do not need to be copied.
- When using a network-based hardware token, make sure the high-availability feature is enabled on the hardware token to avoid single point of failure.
2.7.7. LDAP and Port Considerations
Note
- If the master uses SSL/TLS to connect to its database, then the clone uses SSL/TLS, and the master/clone Directory Server databases use SSL/TLS connections for replication.
- If the master uses a standard connection to its database, then the clone must use a standard connection, and the Directory Server databases can use unencrypted connections for replication.
- If the master uses a standard connection to its database, then the clone must use a standard connection, but there is an option to use Start TLS for the master/clone Directory Server databases for replication. Start TLS opens a secure connection over a standard port.
Note
To use Start TLS, the Directory Server must still be configured to accept SSL/TLS connections. This means that prior to configuring the clone, a server certificate and a CA certificate must be installed on the Directory Server, and SSL/TLS must be enabled.
Important
2.7.8. Replica ID Numbers
dbs.beginReplicaNumber=1 dbs.endReplicaNumber=95
2.7.9. Custom Configuration and Clones
CS.cfg
file — outside the replicated database.
CS.cfg
file, but this connector information is not added to the clone CA configuration. If a certificate request that includes a key archival is submitted to the master CA, then the key archival is forwarded to the KRA using the CA-KRA connector information. If the request is submitted to the clone CA, no KRA is recognized, and the key archival request is disallowed.
Note
Chapter 3. Supported Standards and Protocols
3.1. TLS, ECC, and RSA
Note
3.1.1. Supported Cipher Suites
3.1.1.1. Recommended TLS Cipher Suites
ECC
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
RSA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
3.2. Allowed Key Algorithms and Their Sizes
- Allowed RSA key sizes:
- 2048 bits or greater
- Allowed EC curves or equivalent as defined in the FIPS PUB 186-4 standard:
- nistp256
- nistp384
- nistp521
3.3. Allowed Hash Functions
- SHA-256
- SHA-384
- SHA-512
- SHA-256
- SHA-384
- SHA-512
3.4. IPv4 and IPv6 Addresses
- Communications between subsystems, including between the TPS, TKS, and CA and for joining security domains
- Token operations between the TPS and the Enterprise Security Client
- Subsystem logging
- Access control instructions
- Operations performed with Certificate System tools, including the
pki
utility, the Subject Alt Name Extension tool, HttpClient, and the Bulk Issuance Tool - Client communications, including both the
pkiconsole
utility and IPv6-enabled browsers for web services - Certificate request names and certificate subject names, including user, server, and router certificates
- Publishing
- Connecting to LDAP databases for internal databases and authentication directories
- An IPv4 address must be in the format
n.n.n.n
orn.n.n.n,m.m.m.m
. For example,128.21.39.40
or128.21.39.40,255.255.255.00
. - An IPv6 address uses a 128-bit namespace, with the IPv6 address separated by colons and the netmask separated by periods. For example, 0:0:0:0:0:0:13.1.68.3, FF01::43, or 0:0:0:0:0:0:13.1.68.3,FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:255.255.255.0.
https://ipv6host.example.com:8443/ca/services pkiconsole https://ipv6host.example.com:8443/ca
[]
). For example:
https://[00:00:00:00:123:456:789:00:]:8443/ca/services pkiconsole https://[00:00:00:00:123:456:789:00:]:8443/ca
3.5. Supported PKIX Formats and Protocols
Format or Protocol | RFC or Draft | Description |
---|---|---|
X.509 version 1 and version 3 | Digital certificate formats recommended by the International Telecommunications Union (ITU). | |
Certificate Request Message Format (CRMF) | RFC 4211 | A message format to send a certificate request to a CA. |
Certificate Management Message Formats (CMMF) | Message formats to send certificate requests and revocation requests from end entities to a CA and to return information to end entities. CMMF has been subsumed by another standard, CMC. | |
Certificate Management Messages over CS (CMC) | RFC 5274 | A general interface to public-key certification products based on CS and PKCS #10, including a certificate enrollment protocol for RSA-signed certificates with Diffie-Hellman public-keys. CMC incorporates CRMF and CMMF. |
Cryptographic Message Syntax (CMS) | RFC 2630 | A superset of PKCS #7 syntax used for digital signatures and encryption. |
PKIX Certificate and CRL Profile | RFC 5280 | A standard developed by the IETF for a public-key infrastructure for the Internet. It specifies profiles for certificates and CRLs. |
Online Certificate Status Protocol (OCSP) | RFC 6960 | A protocol useful in determining the current status of a digital certificate without requiring CRLs. |
Chapter 4. Supported Platforms
4.1. General Requirements
4.2. Server Support
Note
4.3. Supported Web Browsers
Platform | Agent Services | End User Pages |
---|---|---|
Red Hat Enterprise Linux | Firefox 60 and later [a] | Firefox 60 and later [a] |
[a]
This Firefox version no longer supports the crypto web object used to generate and archive keys from the browser. As a result, expect limited functionality in this area.
|
Note
4.4. Supported Hardware Security Modules
HSM | Firmware | Appliance Software | Client Software |
---|---|---|---|
nCipher nShield Connect XC (High) | nShield_HSM_Firmware-12.72.1 | 12.71.0 | SecWorld_Lin64-12.71.0 |
Thales TCT Luna Network HSM Luna-T7 | lunafw_update-7.11.1-4 | 7.11.0-25 | 610-500244-001_LunaClient-7.11.1-5 |
Chapter 5. Planning the Certificate System
5.1. Deciding on the Required Subsystems
- It is requested and issued.
- It is valid.
- It expires.
- What if an employee leaves the company before the certificate expires?
- When a CA signing certificate expires, all of the certificates issued and signed using that certificate also expire. So will the CA signing certificate be renewed, allowing its issued certificates to remain valid, or will it be reissued?
- What if an employee loses a smart card or leaves it at home. Will a replacement certificate be issued using the original certificates keys? Will the other certificates be suspended or revoked? Are temporary certificates allowed?
- When a certificate expires, will a new certificate be issued or will the original certificate be renewed?
5.1.1. Using a Single Certificate Manager

Figure 5.1. CA Only Certificate System

5.1.2. Planning for Lost Keys: Key Archival and Recovery

Figure 5.2. CA and KRA
Note
5.1.3. Balancing Certificate Request Processing
5.1.4. Balancing Client OCSP Requests

Figure 5.3. CA and OCSP
5.1.5. Using Smart Cards

5.2. Defining the Certificate Authority Hierarchy
Note
5.2.1. Subordination to a Public CA
5.2.2. Subordination to a Certificate System CA
5.2.3. Linked CA
5.2.4. CA Cloning
Note
pk12util
or the PKCS12Export
commands.
5.3. Planning Security Domains
Example Corp Intranet PKI
. All other subsystems — KRA, TPS, TKS, OCSP, and other CAs — must become members of the security domain by supplying the security domain URL when configuring the subsystem.
ou=Security Domain,dc=server.example.com-pki-ca
pkiSecurityGroup
) to identify the group type:
cn=KRAList,ou=Security Domain,o=pki-tomcat-CA objectClass: top objectClass: pkiSecurityGroup cn: KRAList
pkiSubsystem
object class to identify the entry type:
dn: cn=kra.example.com:8443,cn=KRAList,ou=Security Domain,o=pki-tomcat-CA objectClass: top objectClass: pkiSubsystem cn: kra.example.com:8443 host: server.example.com UnSecurePort: 8080 SecurePort: 8443 SecureAdminPort: 8443 SecureAgentPort: 8443 SecureEEClientAuthPort: 8443 DomainManager: false Clone: false SubsystemName: KRA kra.example.com 8443
- The CA hosting the security domain can be signed by an external authority.
- Multiple security domains can be set up within an organization. However, each subsystem can belong to only one security domain.
- Subsystems within a domain can be cloned. Cloning subsystem instances distributes the system load and provides failover points.
- The security domain streamlines configuration between the CA and KRA; the KRA can push its KRA connector information and transport certificates automatically to the CA instead of administrators having to manually copy the certificates over to the CA.
- The Certificate System security domain allows an offline CA to be set up. In this scenario, the offline root has its own security domain. All online subordinate CAs belong to a different security domain.
- The security domain streamlines configuration between the CA and OCSP. The OCSP can push its information to the CA for the CA to set up OCSP publishing and also retrieve the CA certificate chain from the CA and store it in the internal database.
5.4. Determining the Requirements for Subsystem Certificates
5.4.1. Determining Which Certificates to Install
Subsystem | Certificates |
---|---|
Certificate Manager |
|
OCSP |
|
KRA |
|
TKS |
|
TPS |
|
- Generating new key pairs when creating a new self-signed CA certificate for a root CA will invalidate all certificates issued under the previous CA certificate.This means none of the certificates issued or signed by the CA using its old key will work; subordinate Certificate Managers, KRAs, OCSPs, TKSs, and TPSs will no longer function, and agents can no longer to access agent interfaces.This same situation occurs if a subordinate CA's CA certificate is replaced by one with a new key pair; all certificates issued by that CA are invalidated and will no longer work.Instead of creating new certificates from new key pairs, consider renewing the existing CA signing certificate.
- If the CA is configured to publish to the OCSP and it has a new CA signing certificate or a new CRL signing certificate, the CA must be identified again to the OCSP.
- If a new transport certificate is created for the KRA, the KRA information must be updated in the CA's configuration file,
CS.cfg
. The existing transport certificate must be replaced with the new one in theca.connector.KRA.transportCert
parameter. - If a CA is cloned, then when creating a new SSL/TLS server certificate for the master Certificate Manager, the clone CAs' certificate databases all need updated with the new SSL/TLS server certificate.
- If the Certificate Manager is configured to publish certificates and CRLs to an LDAP directory and uses the SSL/TLS server certificate for SSL/TLS client authentication, then the new SSL/TLS server certificate must be requested with the appropriate extensions. After installing the certificate, the publishing directory must be configured to use the new server certificate.
- Any number of SSL/TLS server certificates can be issued for a subsystem instance, but it really only needs one SSL/TLS certificate. This certificate can be renewed or replaced as many times as necessary.
5.4.2. Planning the CA Distinguished Name
cn=demoCA, o=Example Corporation, ou=Engineering, c=US
5.4.3. Setting the CA Signing Certificate Validity Period
5.4.4. Choosing the Signing Key Type and Length
- SHA256withRSA
- SHA512withRSA
- SHA256withEC
- SHA512withEC
Note
5.4.5. Using Certificate Extensions
- Trust. The X.500 specification establishes trust by means of a strict directory hierarchy. By contrast, Internet and extranet deployments frequently involve distributed trust models that do not conform to the hierarchical X.500 approach.
- Certificate use. Some organizations restrict how certificates are used. For example, some certificates may be restricted to client authentication only.
- Multiple certificates. It is not uncommon for certificate users to possess multiple certificates with identical subject names but different key material. In this case, it is necessary to identify which key and certificate should be used for what purpose.
- Alternate names. For some purposes, it is useful to have alternative subject names that are also bound to the public key in the certificate.
- Additional attributes. Some organizations store additional information in certificates, such as when it is not possible to look up information in a directory.
- Relationship with CA. When certificate chaining involves intermediate CAs, it is useful to have information about the relationships among CAs embedded in their certificates.
- CRL checking. Since it is not always possible to check a certificate's revocation status against a directory or with the original certificate authority, it is useful for certificates to include information about where to check CRLs.
5.4.5.1. Structure of Certificate Extensions
Extension ::= SEQUENCE { extnID OBJECT IDENTIFIER, critical BOOLEAN DEFAULT FALSE, extnValue OCTET STRING }
- The object identifier (OID) for the extension. This identifier uniquely identifies the extension. It also determines the ASN.1 type of value in the value field and how the value is interpreted. When an extension appears in a certificate, the OID appears as the extension ID field (
extnID
) and the corresponding ASN.1 encoded structure appears as the value of the octet string (extnValue
). - A flag or Boolean field called
critical
.The value, which can be eithertrue
orfalse
, assigned to this field indicates whether the extension is critical or noncritical to the certificate.- If the extension is critical and the certificate is sent to an application that does not understand the extension based on the extension's ID, the application must reject the certificate.
- If the extension is not critical and the certificate is sent to an application that does not understand the extension based on the extension's ID, the application can ignore the extension and accept the certificate.
- An octet string containing the DER encoding of the value of the extension.
- Authority Key Identifier extension, which identifies the CA's public key, the key used to sign the certificate.
- Subject Key Identifier extension, which identifies the subject's public key, the key being certified.
Note
5.4.6. Using and Customizing Certificate Profiles
Certificate Profiles
Modifying the Certificate Profile Parameters
Certificate Profile Administration
Guidelines for Customizing Certificate Profiles
- Decide which certificate profiles are needed in the PKI. There should be at least one profile for each type of certificate issued. There can be more than one certificate profile for each type of certificate to set different authentication methods or different defaults and constraints for a particular type of certificate type. Any certificate profile available in the administrative interface can be approved by an agent and then used by an end entity to enroll.
- Delete any certificate profiles that will not be used.
- Modify the existing certificate profiles for specific characteristics for the company's certificates.
- Change the defaults set up in the certificate profile, the values of the parameters set in the defaults, or the constraints that control the certificate content.
- Change the constraints set up by changing the value of the parameters.
- Change the authentication method.
- Change the inputs by adding or deleting inputs in the certificate profile, which control the fields on the input page.
- Add or delete the output.
5.4.6.1. Adding SAN Extensions to the SSL Server Certificate
/usr/share/pki/ca/profiles/ca/caInternalAuthServerCert.cfg
file and add the following parameters to the configuration file supplied to the pkispawn
utility:
pki_san_inject
- Set the value of this parameter to
True
. pki_san_for_server_cert
- Provide a list of the required SAN extensions separated by commas (,).
pki_san_inject=True pki_san_for_server_cert=intca01.example.com,intca02.example.com,intca.example.com
5.4.7. Planning Authentication Methods
- In agent-approved enrollment, end-entity requests are sent to an agent for approval. The agent approves the certificate request.
- In automatic enrollment, end-entity requests are authenticated using a plug-in, and then the certificate request is processed; an agent is not involved in the enrollment process.
- In CMC enrollment, a third party application can create a request that is signed by an agent and then automatically processed.
- An end entity submits a request for enrollment. The form used to submit the request identifies the method of authentication and enrollment. All HTML forms are dynamically-generated by the profiles, which automatically associate the appropriate authentication method with the form.
- If the authentication method is an agent-approved enrollment, the request is sent to the request queue of the CA agent. If the automated notification for a request in queue is set, an email is sent to the appropriate agent that a new request has been received. The agent can modify the request as allowed for that form and the profile constraints. Once approved, the request must pass the certificate profiles set for the Certificate Manager, and then the certificate is issued. When the certificate is issued, it is stored in the internal database and can be retrieved by the end entity from the end-entities page by serial number or by request ID.
- If the authentication method is automated, the end entity submits the request along with required information to authenticate the user, such as an LDAP user name and password. When the user is successfully authenticated, the request is processed without being sent to an agent's queue. If the request passes the certificate profile configuration of the Certificate Manager, the certificate is issued and stored in the internal database. It is delivered to the end entity immediately through the HTML forms.
5.4.8. Publishing Certificates and CRLs
- If certificates are published to the directory, than every user or server to which a certificate is issued must have a corresponding entry in the LDAP directory.
- If CRLs are published to the directory, than they must be published to an entry for the CA which issued them.
- For SSL/TLS, the directory service has to be configured in SSL/TLS and, optionally, be configured to allow the Certificate Manager to use certificate-based authentication.
- The directory administrator should configure appropriate access control rules to control DN (entry name) and password based authentication to the LDAP directory.
5.4.9. Renewing or Reissuing CA Signing Certificates
- Renewing a CA certificate involves issuing a new CA certificate with the same subject name and public and private key material as the old CA certificate, but with an extended validity period. As long as the new CA certificate is distributed to all users before the old CA certificate expires, renewing the certificate allows certificates issued under the old CA certificate to continue working for the full duration of their validity periods.
- Reissuing a CA certificate involves issuing a new CA certificate with a new name, public and private key material, and validity period. This avoids some problems associated with renewing a CA certificate, but it requires more work for both administrators and users to implement. All certificates issued by the old CA, including those that have not yet expired, must be renewed by the new CA.
Note
authorityKeyIdentifier
extension, can affect the transition from an old CA certificate to a new one.
5.5. Planning for Network and Physical Security
5.5.1. Considering Firewalls
- Protecting sensitive subsystems from unauthorized access
- Allowing appropriate access to other subsystems and clients outside of the firewall
389
for LDAP and 636
for LDAPS, by default) need to be open in the firewall to allow traffic to the directory service. Without access to the LDAP database, all subsystem operations can fail.
5.5.2. Considering Physical Security and Location
5.5.3. Planning Ports
- A non-secure HTTP port for end entity services that do not require authentication
- A secure HTTP port for end entity services, agent services, administrative console, and admin services that require authentication
- A Tomcat Server Management port
- A Tomcat AJP Connector Port
https://server.example.com:8443/ca/ee/ca
pkiconsole https://server.example.com:8443/ca
server.xml
file. If a port is not used, it can be disabled in that file. For example:
<Service name="Catalina">
<!--Connector port="8080"
... /--> unused standard port
<Connector port="8443" ... />
services
. On Red Hat Enterprise Linux, it is also helpful to confirm that a port is not assigned by SELinux, by running the command semanage port -l
to list all ports which currently have an SELinux context.
5.6. Tokens for Storing Certificate System Subsystem Keys and Certificates
cert9.db
) and key database (key4.db
), that the Certificate System uses to generate and store its key pairs and certificates. The Certificate System automatically generates these files in the filesystem of its host machine when first using the internal token. These files are created during the Certificate System subsystem configuration if the internal token was selected for key-pair generation.
/var/lib/pki/instance_name/alias
directory.
- All system keys for a subsystem must be generated on the same token.
- The subsystem must be installed in an empty HSM slot. If the HSM slot has previously been used to store other keys, then use the HSM vendor's utilities to delete the contents of the slot. The Certificate System has to be able to create certificates and keys on the slot with default nicknames. If not properly cleaned up, the names of these objects may collide with previous instances.
- Fast SSL/TLS connections. Speed is important to accommodate a high number of simultaneous enrollment or service requests.
- Hardware protection of private keys. These devices behave like smart cards by not allowing private keys to be copied or removed from the hardware token. This is important as a precaution against key theft from an active attack of an online Certificate Manager.
pkcs11.txt
database with modutil
during the pre-configuration stage of the installation, if the PKCS #11 library modules are in the default installation paths.
5.7. A Checklist for Planning the PKI
- Q: How many security domains will be created, and what subsystem instances will be placed in each domain?
- Q: What ports should be assigned for each subsystem? Is it necessary to have a single SSL/TLS port, or is it better to have port separation for extra security?
- Q: What subsystems should be placed behind firewalls? What clients or other subsystems need to access those firewall-protected subsystems and how will access be granted? Is firewall access allowed for the LDAP database?
- Q: What subsystems need to be physically secured? How will access be granted, and who will be granted access?
- Q: What is the physical location of all agents and administrators? What is the physical location of the subsystems? How will administrators or agents access the subsystem services in a timely-manner? Is it necessary to have subsystems in each geographical location or time zone?
- Q: How many subsystems do you need to install?
- Q: Will any subsystems need to be cloned and, if so, what are the methods for securely storing their key materials?
- Q: Will the subsystem certificates and keys be stored on the internal software token in Certificate System or on an external hardware token?
- Q: What are the requirements for the CA signing certificate? Does the Certificate System need control over attributes like the validity period? How will the CA certificates be distributed?
- Q: What kinds of certificates will be issued? What characteristics do they need to have, and what profile settings are available for those characteristics? What restrictions need to be placed on the certificates?
- Q: What are the requirements for approving a certificate request? How does the requester authenticate himself, and what kind of process is required to approve the request?
- Q: Will many external clients need to validate certificate status? Can the internal OCSP in the Certificate Manager handle the load?
- Q: Will the PKI allow replacement keys? Will it require key archival and recovery?
- Q: Will the organization use smart cards? If so, will temporary smart cards be allowed if smart cards are mislaid, requiring key archival and recovery?
- Q: Where will certificates and CRLs be published? What configuration needs to be done on the receiving end for publishing to work? What kinds of certificates or CRLs need to be published and how frequently?
5.8. Optional Third-party Services
5.8.1. Load Balancers
5.8.2. Backup Hardware and Software
Part II. Installing Red Hat Certificate System
Chapter 6. Prerequisites and Preparation for Installation
6.1. Installing Red Hat Enterprise Linux
Important
# sysctl crypto.fips_enabled
1
, FIPS mode is enabled.
6.2. Securing the System Using SELinux
enforcing
mode. If a procedure in the Certificate System documentation requires to manually set SELinux-related settings, such as when using a Hardware Security Module (HSM), it is mentioned in the corresponding section.
6.2.1. Verifying if SELinux is Running in Enforcing Mode
enforcing
mode and no further actions are required.
# getenforce
6.3. Firewall Configuration
Service
|
Port
|
Protocol
|
---|---|---|
HTTP
|
8080
|
TCP
|
HTTPS
|
8443
|
TCP
|
Tomcat Management
|
8005
|
TCP
|
pkispawn
utility, you can customize the port numbers. If you use different ports than the defaults listed above, open them correspondingly in the firewall as described in Section 6.3.1, “Opening the Required Ports in the Firewall”. For further details about ports, see Section 5.5.3, “Planning Ports”.
6.3.1. Opening the Required Ports in the Firewall
- Make sure the
firewalld
service is running.# systemctl status firewalld
- To start
firewalld
and configure it to start automatically when the system boots:# systemctl start firewalld # systemctl enable firewalld
- Open the required ports using the
firewall-cmd
utility. For example, to open the Certificate System default ports in the default firewall zone:# firewall-cmd --permanent --add-port={8080/tcp,8443/tcp,8009/tcp,8005/tcp}
For details on usingfirewall-cmd
to open ports on a system, see the in the Securing Networks or the firewall-cmd(1) man page. - Reload the firewall configuration to ensure that the change takes place immediately:
# firewall-cmd --reload
6.4. Hardware Security Module
6.4.1. Setting up SELinux for an HSM
- nCipher nShield
- After you installed the HSM and before you start installing Certificate System:
- Reset the context of files in the
/opt/nfast/
directory:# restorecon -R /opt/nfast/
- Restart the nfast software.
# /opt/nfast/sbin/init.d-ncipher restart
- Thales Luna HSM
- No SELinux-related actions are required before you start installing Certificate System.
6.4.2. Enabling FIPS Mode on an HSM
Important
- nCipher HSM
- On a nCipher HSM, the FIPS mode can only be enabled when generating the Security World, this cannot be changed afterwards. While there is a variety of ways to generate the Security World, the preferred method is always to use the
new-world
command. For guidance on how to generate a FIPS-compliant Security World, please follow the nCipher HSM vendor's documentation. - LunaSA HSM
- Similarly, enabling the FIPS mode on a Luna HSM must be done during the initial configuration, since changing this policy zeroizes the HSM as a security measure. For details, please refer to the Luna HSM vendor's documentation.
6.4.3. Verifying if FIPS Mode is Enabled on an HSM
6.4.3.1. Verifying if FIPS Mode is Enabled on an nCipher HSM
Note
# /opt/nfast/bin/nfkminfo
StrictFIPS140
is listed in the state flag, the FIPS mode is enabled. In newer vesions, it is however better to check the new mode
line and look for fips1402level3
. In all cases, there should also be an hkfips
key present in the nfkminfo
output.
6.4.3.2. Verifying if FIPS Mode is Enabled on a Luna SA HSM
Note
- Open the
lunash
management console - Use the
hsm show
command and verify that the output contains the textThe HSM is in FIPS 140-2 approved operation mode.
:lunash:> hsm show ... FIPS 140-2 Operation: ===================== The HSM is in FIPS 140-2 approved operation mode. ...
6.4.4. Preparing for Installing Certificate System with an HSM
pkispawn
Utility”, you are instructed to use the following parameters in the configuration file you pass to the pkispawn
utility when installing Certificate System with an HSM:
... [DEFAULT] ########################## # Provide HSM parameters # ########################## pki_hsm_enable=True pki_hsm_libfile=hsm_libfile pki_hsm_modulename=hsm_modulename pki_token_name=hsm_token_name pki_token_password=pki_token_password ######################################## # Provide PKI-specific HSM token names # ######################################## pki_audit_signing_token=hsm_token_name pki_ssl_server_token=hsm_token_name pki_subsystem_token=hsm_token_name ...
- The values of the
pki_hsm_libfile
andpki_token_name
parameter depend on your specific HSM installation. These values allow thepkispawn
utility to set up your HSM and enable Certificate System to connect to it. - The value of the
pki_token_password
depends upon your particular HSM token's password. The password gives thepkispawn
utility read and write permissions to create new keys on the HSM. - The value of the
pki_hsm_modulename
is a name used in laterpkispawn
operations to identify the HSM. The string is an identifier you can set as whatever you like. It allowspkispawn
and Certificate System to refer to the HSM and configuration information by name in later operations.
6.4.4.1. nCipher HSM Parameters
pki_hsm_libfile=/opt/nfast/toolkits/pkcs11/libcknfast.so pki_hsm_modulename=nfast
pki_hsm_modulename
to any value. The above is a suggested value.
Example 6.1. Identifying the Token Name
root
user:
[root@example911 ~]# /opt/nfast/bin/nfkminfo
World
generation 2
...~snip~...
Cardset
name "NHSM-CONN-XC"
k-out-of-n 1/4
flags NotPersistent PINRecoveryRequired(enabled) !RemoteEnabled
timeout none
...~snip~...
name
field in the Cardset
section lists the token name.
pki_token_name=NHSM-CONN-XC
6.4.4.2. SafeNet / Luna SA HSM Parameters
pki_hsm_libfile=/usr/safenet/lunaclient/lib/libCryptoki2_64.so pki_hsm_modulename=lunasa
pki_hsm_modulename
to any value. The above is a suggested value.
Example 6.2. Identifying the Token Name
root
user:
# /usr/safenet/lunaclient/bin/vtl verify
The following Luna SA Slots/Partitions were found:
Slot Serial # Label
==== ================ =====
0 1209461834772 lunasaQE
label
column lists the token name.
pki_token_name=lunasaQE
6.4.5. Backing up Keys on Hardware Security Modules
.p12
file. If such an instance is to be backed-up, contact the manufacturer of your HSM for support.
6.5. Installing Red Hat Directory Server
Important
# sysctl crypto.fips_enabled
1
, FIPS mode is enabled.
6.5.1. Preparing a Directory Server Instance for Certificate System
- Make sure you have attached a subscription that provides Directory Server to the host.
- Enable the Directory Server repository:
#
subscription-manager repos --enable=dirsrv-11.7-for-rhel-8-x86_64-rpms
- Install the Directory Server and the openldap-clients packages:
#
dnf module install redhat-ds
#
dnf install openldap-clients
- Set up a Directory Server instance.
- Generate a DS configuration file; for example,
/tmp/ds-setup.inf
:$
dscreate create-template /tmp/ds-setup.inf
- Customize the DS configuration file as follows:
$ sed -i \ -e "s/;instance_name = .*/instance_name = localhost/g" \ -e "s/;root_password = .*/root_password = Secret.123/g" \ -e "s/;suffix = .*/suffix = dc=example,dc=com/g" \ -e "s/;create_suffix_entry = .*/create_suffix_entry = True/g" \ -e "s/;self_sign_cert = .*/self_sign_cert = False/g" \ /tmp/ds-setup.inf
- Create the instance using the
dscreate
command with thesetup
configuration file:#
dscreate from-file /tmp/ds-setup.inf
For a detailed procedure, see the Red Hat Directory Server Installation Guide.
6.5.2. Preparing for Configuring Certificate System
pkispawn
Utility”, if you chose to set up TLS between Certificate System and Directory Server, use the following parameters in the configuration file you pass to the pkispawn
utility when installing Certificate System:
Note
pki_ds_password
would no longer be relevant.
pki_ds_database=back_end_database_name pki_ds_hostname=host_name pki_ds_secure_connection=True pki_ds_secure_connection_ca_pem_file=path_to_CA_or_self-signed_certificate pki_ds_password=password pki_ds_ldaps_port=port pki_ds_bind_dn=cn=Directory Manager
pki_ds_database
parameter is a name used by the pkispawn
utility to create the corresponding subsystem database on the Directory Server instance.
pki_ds_hostname
parameter depends on the install location of the Directory Server instance. This depends on the values used in Section 6.5.1, “Preparing a Directory Server Instance for Certificate System”.
pki_ds_secure_connection=True
, the following parameters must be set:
pki_ds_secure_connection_ca_pem_file
: Sets the fully-qualified path including the file name of the file which contains an exported copy of the Directory Server's CA certificate. This file must exist prior topkispawn
being able to utilize it.pki_ds_ldaps_port
: Sets the value of the secure LDAPS port Directory Server is listening to. The default is636
.
6.6. Replacing a Temporary Self-Signed Certificate in Directory Server (CA)
6.7. Enabling TLS Client Authentication for the Internal LDAP Server
6.8. Attaching a Red Hat Subscription and Enabling the Certificate System Package Repository
- Attach the Red Hat subscriptions to the system:Skip this step, if your system is already registered or has a subscription that provides Certificate Server attached.
- Register the system to the Red Hat subscription management service.You can use the
--auto-attach
option to automatically apply an available subscription for the operating system.#
subscription-manager register --auto-attach
Username: admin@example.com Password: The system has been registered with id: 566629db-a4ec-43e1-aa02-9cbaa6177c3f Installed Product Current Status: Product Name: Red Hat Enterprise Linux Server Status: Subscribed - List the available subscriptions and note the pool ID providing the Red Hat Certificate System. For example:
#
subscription-manager list --available --all
... Subscription Name: Red Hat Enterprise Linux Developer Suite Provides: ... Red Hat Certificate System ... Pool ID: 7aba89677a6a38fc0bba7dac673f7993 Available: 1 ...In case you have a lot of subscriptions, the output of the command can be very long. You can optionally redirect the output to a file:#
subscription-manager list --available --all > /root/subscriptions.txt
- Attach the Certificate System subscription to the system using the pool ID from the previous step:
#
subscription-manager attach --pool=7aba89677a6a38fc0bba7dac673f7993
Successfully attached a subscription for: Red Hat Enterprise Linux Developer Suite
- Enable the Certificate System repository:
#
subscription-manager repos --enable certsys-10-for-rhel-8-x86_64-eus-rpms
Repository 'certsys-10-for-rhel-8-x86_64-eus-rpms' is enabled for this system. - Enable the Certificate System module stream:
#
dnf module enable redhat-pki
Note
subscription-manager
utility.
6.9. Certificate System Operating System Users and Groups
pkiuser
account and the corresponding pkiuser
group are automatically created. Certificate System uses this account and group to start services.
Chapter 7. Installing and Configuring Certificate System
- Certificate Authority (CA)
- Key Recovery Authority (KRA)
- Online Certificate Status Protocol (OCSP) Responder
- Token Key Service (TKS)
- Token Processing System (TPS)
7.1. Subsystem Configuration Order
- At least one CA running as a security domain is required before any of the other public key infrastructure (PKI) subsystems can be installed.
- Install the OCSP after the CA has been configured.
- The KRA, and TKS subsystems can be installed in any order, after the CA and OCSP have been configured.
- The TPS subsystem depends on the CA and TKS, and optionally on the KRA and OCSP subsystem.
Note
7.2. Certificate System Packages
Important
- pki-ca: Provides the Certificate Authority (CA) subsystem.
- pki-kra: Provides the Key Recovery Authority (KRA) subsystem.
- pki-ocsp: Provides the Online Certificate Status Protocol (OCSP) responder.
- pki-tks: Provides the Token Key Service (TKS).
- pki-tps: Provides the Token Processing Service (TPS).
- pki-console and redhat-pki-console-theme: Provides the Java-based Red Hat PKI console. Both packages must be installed.
- pki-server and redhat-pki-server-theme: Provides the web-based Certificate System interface. Both packages must be installed.This package is installed as a dependency if you install one of the following packages: pki-ca, pki-kra, pki-ocsp, pki-tks, pki-tps
7.2.1. Installing Certificate System Packages
- With the redhat-pki module, you can install all Certificate System subsystem packages and components at once on a RHEL 8 system. The redhat-pki module installs the five subsystems of Red Hat Certificate System: in addition to the pki-core module (CA, KRA) which is part of Red Hat Identity Management (IdM), includes the RHCS-specific subsystems (OCSP, TKS and TPS) as well as the pki-deps module that takes care of the required dependencies.
# yum install redhat-pki
- Alternatively, you can install packages separately. For example, to install the CA subsystem and the optional web interface:
# yum install pki-ca redhat-pki-server-theme
For other subsystems, replace the pki-ca package name with the one of the subsystem you want to install. - If you require the optional PKI console:
# yum install pki-console redhat-pki-console-theme
Note
Thepkiconsole
tool will be deprecated.
7.2.2. Updating Certificate System Packages
- Follow instructions in Section 7.2.3, “Determining Certificate System Product Version” to check the product version.
- Execute
# yum update
The command above updates the whole system including the RHCS packages.Note
We suggest scheduling a maintenance window during which you can take the PKI infrastructure offline to install the update.Important
Updating Certificate System requires the PKI infrastructure to be restarted. - Then check version again by following Section 7.2.3, “Determining Certificate System Product Version”.The version number should confirm that the update was successfully installed.
--downloadonly
option in the above procedure:
yum update --downloadonly
/var/cache/yum/
directory. The yum update
will later use the packages if they are the latest versions.
7.2.3. Determining Certificate System Product Version
/usr/share/pki/CS_SERVER_VERSION
file. To display the version:
# cat /usr/share/pki/CS_SERVER_VERSION Red Hat Certificate System 10.0 (Batch Update 1)
http://host_name:port_number/ca/admin/ca/getStatus
http://host_name:port_number/kra/admin/kra/getStatus
http://host_name:port_number/ocsp/admin/ocsp/getStatus
http://host_name:port_number/tks/admin/tks/getStatus
http://host_name:port_number/tps/admin/tps/getStatus
Note
7.3. Understanding the pkispawn
Utility
pkispawn
utility. During the setup, pkispawn
:
- Reads the default values from the
/usr/share/pki/server/etc/default.cfg
file. For further details, see the pki_default.cfg(5) man page.Important
Do not edit the/usr/share/pki/server/etc/default.cfg
file. Instead, create a configuration file and that overrides the defaults, and pass it to thepkispawn
utility. For details about using a configuration file, see Section 7.7, “Two-step Installation”. - Uses the passwords and other deployment-specific information provided depending on the setup mode:
- Interactive mode: The user is asked for the individual settings during the setup. Use this mode for simple deployments.
- Batch mode: The values are read from a configuration file the user provides. Parameters not set in the configuration file use the defaults.
- Performs the installation of the requested PKI subsystem.
- Passes the settings to a Java servlet that performs the configuration based on the settings.
pkispawn
utility to install:
- A root CA. For details, see Section 7.4, “Setting Up a Root Certificate Authority”.
- A subordinate CA or any other subsystem. For details, see Section 7.6, “Setting up Additional Subsystems”.
Note
pkispawn
utility. For a setup of a subordinate CA or non-CA subsystems, see Section 7.8, “Setting up Subsystems with an External CA”.
pkispawn
and examples, see the pkispawn(8) man page.
7.4. Setting Up a Root Certificate Authority
- Configuration file-based installation:Use this method for high-level customization. This installation method uses a configuration file that overrides the default installation parameters.You can install Certificate System using a configuration file in a single step or in two steps. For details and examples, see:
- The pkispawn(8) man page for the single-step installation.
- Section 7.7, “Two-step Installation” for the two-step installation.
- Interactive installation:
# pkispawn -s CA
Use the interactive installer if you only want to set the minimum of required configuration options.
7.5. Post-Installation
7.6. Setting up Additional Subsystems
Prerequisites
Installing the Subsystem
- Configuration file-based installation:Use this method for high-level customization. This installation method uses a configuration file that overrides the default installation parameters.You can install Certificate System using a configuration file in a single step or in two steps. For details and examples, see:
- The pkispawn(8) man page for the single-step installation.
- Section 7.7, “Two-step Installation” for the two-step installation.
- Interactive installation:Use the interactive installer if you only want to set the minimum of required configuration options.For example:
# pkispawn -s subsystem
Replace subsystem with one of the following subsystems:KRA
,OCSP
,TKS
, orTPS
.The interactive installer does not support installing a subordinate CA. To install a subordinate CA, use the two-step installation. See Section 7.7, “Two-step Installation”.
7.7. Two-step Installation
pkispawn
utility enables you to run the installation of a subsystem in two steps.
7.7.1. When to Use the Two-Step Installation
- Increasing security.
- Customizing subsystem certificates.
- Customizing the cipher list in the
sslRangeCiphers
parameter in the/etc/pki/instance_name/server.xml
file when installing a new Certificate System instance to be connected to an existing Certificate System. - Installing CA clones, KRA, OCSP, TKS and TPS in FIPS mode.
- Installing Certificate System with a Hardware Security Module (HSM) in FIPS mode.
7.7.2. The Two Major Parts of the Two-step Installation
- InstallationDuring this step,
pkispawn
copies configuration files from the/usr/share/pki/
directory to the instance-specific/etc/pki/instance_name/
directory. Additionally,pkispawn
sets the settings based on values defined in the deployment configuration file.This part of the installation contains the following substeps: - ConfigurationDuring this step,
pkispawn
continues the installation based on the configuration files in the instance-specific/etc/pki/instance_name/
directory.This part of the installation contains the following substeps:
7.7.3. Creating the Configuration File for the First Step of the Installation
/root/config.txt
, and fill it with the settings described below.
Important
Subsystem-independent Settings
- Set the passwords of the Certificate System
admin
user, the PKCS #12 file, and Directory Server:[DEFAULT] pki_admin_password=password pki_client_pkcs12_password=password pki_ds_password=password
- To use an LDAPS connection to Directory Server running on the same host, add the following parameters to the
[DEFAULT]
section in the configuration file:pki_ds_secure_connection=True pki_ds_secure_connection_ca_pem_file=path_to_CA_or_self-signed_certificate
Note
For security reasons, Red Hat recommends using an encrypted connection to Directory Server.If you use a self-signed certificate in Directory Server use the following command to export it from the Directory Server's Network Security Services (NSS) database:# certutil -L -d /etc/dirsrv/slapd-instance_name/ \ -n "server-cert" -a -o /root/ds.crt
Important
~/.dogtag/instance_name/subsystem/alias
client database after the installation. For security reasons, Red Hat recommends not enabling the pki_client_database_purge
parameter in the configuration file. If you manually set this parameter to True
, Certificate System does not remove the client database after the installation.
CA Settings
- To increase security, enable random serial numbers by adding the
[CA]
section with the following setting to the configuration file:[CA] pki_random_serial_numbers_enable=true
- Optionally, set the following parameters in the
[CA]
section to specify the data of theadmin
user, which will be automatically created during the installation:pki_admin_nickname=caadmin pki_admin_name=CA administrator account pki_admin_password=password pki_admin_uid=caadmin pki_admin_email=caadmin@example.com
Certificate System assigns administrator privileges to this account. Use this account after the installation to manage Certificate System and to create further user accounts. - To enable Certificate System to generate unique nicknames, set the following parameters in the
[DEFAULT]
section:pki_instance_name=instance_name pki_security_domain_name=example.com Security Domain pki_host=server.example.com
Important
If you install Certificate System with a network-shared Hardware Security Module (HSM), you must use unique certificate nicknames. - Optionally, to use Elliptic Curve Cryptography (ECC) instead of RSA when generating certificates:
- Add the following parameters to the
[DEFAULT]
section:pki_admin_key_algorithm=SHA256withEC pki_admin_key_size=nistp256 pki_admin_key_type=ecc pki_sslserver_key_algorithm=SHA256withEC pki_sslserver_key_size=nistp256 pki_sslserver_key_type=ecc pki_subsystem_key_algorithm=SHA256withEC pki_subsystem_key_size=nistp256 pki_subsystem_key_type=ecc
- Add the following parameters to the
[CA]
section:pki_ca_signing_key_algorithm=SHA256withEC pki_ca_signing_key_size=nistp256 pki_ca_signing_key_type=ecc pki_ca_signing_signing_algorithm=SHA256withEC pki_ocsp_signing_key_algorithm=SHA256withEC pki_ocsp_signing_key_size=nistp256 pki_ocsp_signing_key_type=ecc pki_ocsp_signing_signing_algorithm=SHA256withEC
- Add the following parameters to the
[CA]
section to override the RSA profiles with ECC profiles:pki_source_admincert_profile=/usr/share/pki/ca/conf/eccAdminCert.profile pki_source_servercert_profile=/usr/share/pki/ca/conf/eccServerCert.profile pki_source_subsystemcert_profile=/usr/share/pki/ca/conf/eccSubsystemCert.profile
Settings for Other Subsystems
- Add the following entry to
[DEFAULT]
section of your configuration file:pki_client_database_password=password
- If you are installing a TPS:
- Add the following section with the following section:
[TPS] pki_authdb_basedn=basedn_of_the_TPS_authentication_database
- Optionally, to configure that the TPS use server-side key generation utilizing a KRA that has already been installed in the shared CA instance, add the following entry to the
[TPS]
section:pki_enable_server_side_keygen=True
7.7.4. Starting the Installation Step
# pkispawn -f /root/config.txt -s subsystem --skip-configuration
CA
, KRA
, OCSP
, TKS
, or TPS
.
7.7.5. Customizing the Configuration Between the Installation Steps
7.7.5.1. Configuring Certificate Profiles
7.7.5.2. Enabling Signed Audit Logging
7.7.5.3. Updating the Ciphers List
- To secure the Certificate System instance
- To install a Certificate System instance and to add it to an existing site that supports only specific ciphers
Default FIPS Mode Enabled Ciphers for RSA Encryption
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_256_CBC_SHA256
Default FIPS Mode Enabled Ciphers for ECC Encryption
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_256_CBC_SHA256
Required RSA Ciphers When Running an HSM on System with FIPS Mode Enabled
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
7.7.5.4. Configuring the PKI Console Timeout
7.7.5.5. Setting the KRA into Encryption Mode
7.7.5.6. Enabling OCSP
7.7.5.7. Configuring Ranges for Requests and Serial Numbers
7.7.6. Starting the Configuration Step
# pkispawn -f /root/config.txt -s subsystem --skip-installation
CA
, KRA
, OCSP
, TKS
, or TPS
.
pkispawn
utility displays an installation summary. For example:
================================================================ INSTALLATION SUMMARY ================================================================ Administrator's username: caadmin Administrator's PKCS #12 file: /root/.dogtag/instance_name/ca_admin_cert.p12 To check the status of the subsystem: systemctl status pki-tomcatd@instance_name.service To restart the subsystem: systemctl restart pki-tomcatd@instance_name.service The URL for the subsystem is: https://server.example.com:8443/ca/ PKI instances will be enabled upon system boot ================================================================
7.7.7. Post-Installation
7.8. Setting up Subsystems with an External CA
7.8.1. The Difference Between an Internal and External CA
pkispawn
utility sends subsystem Certificate Signing Requests (CSR) to a previously installed Certificate System, and the resulting issued certificates are received and used by pkispawn
, the CA the CSRs were sent to is called an Internal CA
.
External CA
, by contrast, can be one of the following:
- A non-Red Hat Certificate System CA that issues the signing certificate for a Certificate System subordinate CA.
- A previously installed Red Hat Certificate System CA that does not allow direct submission of CSRs. For example, this is the case if your environment requires CSRs from a subordinate CA, KRA, OCSP, TKS, or TPS to be in other formats than PKCS #10.
7.8.2. Installing a Subsystem with an External CA
Preparing the Configuration File for the External CA Installation
- If you install a subsystem which is integrated into an existing Certificate System installation but which uses a certificate signed by an external CA:
- Create the configuration file for the subsystem. See Section 7.7.3, “Creating the Configuration File for the First Step of the Installation”.
- Add the following settings to your configuration file in the respective [CA], [KRA], or [OCSP] sections:
- For a CA installation:
[CA] pki_external=True pki_external_step_two=False pki_ca_signing_csr_path=path/to/ca_signing.csr pki_ca_signing_cert_path=path/to/ca_signing.crt
- For a KRA installation:
[KRA] pki_external=True pki_external_step_two=False pki_storage_csr_path=/home/user_name/kra_storage.csr pki_transport_csr_path=/home/user_name/kra_transport.csr pki_subsystem_csr_path=/home/user_name/subsystem.csr pki_sslserver_csr_path=/home/user_name/sslserver.csr pki_audit_signing_csr_path=/home/user_name/kra_audit_signing.csr pki_admin_csr_path=/home/user_name/kra_admin.csr
- For an OCSP installation:
[OCSP] pki_external=True pki_external_step_two=False pki_ocsp_signing_csr_path=/home/user_name/ocsp_signing.csr pki_subsystem_csr_path=/home/user_name/subsystem.csr pki_sslserver_csr_path=/home/user_name/sslserver.csr pki_audit_signing_csr_path=/home/user_name/ocsp_audit_signing.csr pki_admin_csr_path=/home/user_name/ocsp_admin.csr
- If you install a standalone KRA or OCSP, which is not integrated into an existing Certificate System installation, execute the steps described in Section 7.9, “Setting up a Standalone KRA or OCSP”.
Starting the Installation of a Subsystem with an External CA
- Use the
pkispawn
utility to start the installation:# pkispawn -f /root/config.txt -s subsystem
Replace subsystem with the subsystem you want to install:CA
,KRA
, orOCSP
.During this step, the setup stores the CSRs in the files specified in the configuration. - Submit the CSRs to the external CA. Proceed after the CA has issued the corresponding certificates.In certain environments, if the external CA is also a Certificate System instance, the CSR in PKCS#10 format needs to be converted into CMC format before being submitted to the CA. See the Issuing Certificates Using CMC section in the Red Hat Certificate System Administration Guide for details about issuing the certificates.
- Optionally, customize the installation. For details, see Section 7.7.5, “Customizing the Configuration Between the Installation Steps”.
- After the external CA has issued the certificates, edit the deployment configuration file:
- Set the
pki_external_step_two
toTrue
:pki_external_step_two=True
- Add the following parameters, based on the subsystem you are installing:
- For a CA, set the path to the certificate file. For example:
pki_ca_signing_cert_path=/home/user_name/ca_signing.crt
If the specified file does not contain the certificate including the certificate chain, additionally specify the path to the certificate chain file and its nickname. For example:pki_cert_chain_path=/home/user_name/cert_chain.p7b pki_cert_chain_nickname=CA Signing Certificate
- For a KRA, set the paths to the certificate files. For example:
pki_storage_cert_path=/home/user_name/kra_storage.crt pki_transport_cert_path=/home/user_name/kra_transport.crt pki_subsystem_cert_path=/home/user_name/subsystem.crt pki_sslserver_cert_path=/home/user_namesslserver.crt pki_audit_signing_cert_path=/home/user_name/kra_audit_signing.crt pki_admin_cert_path=/home/user_name/kra_admin.crt
If the specified files do not contain the certificate including the certificate chain, additionally specify the paths to the signing certificate file and the certificate chain file together with their nicknames. For example:pki_ca_signing_nickname=CA Signing Certificate pki_ca_signing_cert_path=/home/user_name/ca_signing.crt pki_cert_chain_nickname=External Certificate Chain pki_cert_chain_path=/home/user_name/cert_chain.p7b
- For an OCSP, set the paths to the certificate files. For example:
pki_ocsp_signing_cert_path=/home/user_name/ocsp_signing.crt pki_subsystem_cert_path=/home/user_name/subsystem.crt pki_sslserver_cert_path=/home/user_name/sslserver.crt pki_audit_signing_cert_path=/home/user_name/ocsp_audit_signing.crt pki_admin_cert_path=/home/user_name/ocsp_admin.crt
If the specified files do not contain the certificate including the certificate chain, additionally specify the paths to the signing certificate file and the certificate chain file together with their nicknames. For example:pki_ca_signing_nickname=CA Signing Certificate pki_ca_signing_cert_path=/home/user_name/ca_signing.crt pki_cert_chain_nickname=External Certificate Chain pki_cert_chain_path=/home/user_name/cert_chain.p7b
- Optionally, customize the configuration files. For examples, see Section 7.7.5, “Customizing the Configuration Between the Installation Steps”.
- Start the configuration step:
# pkispawn -f /root/config.txt -s subsystem
Replace subsystem with the subsystem you want to install:CA
,KRA
, orOCSP
.
7.8.3. Post-Installation
7.9. Setting up a Standalone KRA or OCSP
- Create a configuration file, such as
/root/config.txt
, with the following content:[DEFAULT] pki_admin_password=password pki_client_database_password=password pki_client_pkcs12_password=password pki_ds_password=password pki_token_password=password pki_client_database_purge=False pki_security_domain_name=EXAMPLE pki_standalone=True pki_external_step_two=False
- For a standalone KRA, add the following section to the configuration file:
[KRA] pki_admin_email=kraadmin@example.com pki_ds_base_dn=dc=kra,dc=example,dc=com pki_ds_database=kra pki_admin_nickname=kraadmin pki_audit_signing_nickname=kra_audit_signing pki_sslserver_nickname=sslserver pki_storage_nickname=kra_storage pki_subsystem_nickname=subsystem pki_transport_nickname=kra_transport pki_standalone=True
- For a standalone OCSP, add the following section to the configuration file:
[OCSP] pki_admin_email=ocspadmin@example.com pki_ds_base_dn=dc=ocsp,dc=example,dc=com pki_ds_database=ocsp pki_admin_nickname=ocspadmin pki_audit_signing_nickname=ocsp_audit_signing pki_ocsp_signing_nickname=ocsp_signing pki_sslserver_nickname=sslserver pki_subsystem_nickname=subsystem pki_standalone=True
- To use an LDAPS connection to Directory Server running on the same host, add the following parameters to the
DEFAULT
section in the configuration file:pki_ds_secure_connection=True pki_ds_secure_connection_ca_pem_file=path_to_CA_or_self-signed_certificate
Note
For security reasons, Red Hat recommends using an encrypted connection to Directory Server.If you use a self-signed certificate in Directory Server, use the following command to export it from the Directory Server's Network Security Services (NSS) database:# certutil -L -d /etc/dirsrv/slapd-instance_name/ \ -n "server-cert" -a -o /root/ds.crt
- Proceed with the steps described in the section called “Starting the Installation of a Subsystem with an External CA”.
7.10. Post-installation Tasks
pkispawn
utility is complete, further steps could be taken to customize the configuration, depending on the site's preferences. These are described in Part III, “Configuring Certificate System”.
7.10.1. Setting Date/Time for RHCS
7.10.2. Replacing the Temporary Certificate
Note
- Obtain a new Directory Server server certificate. Submit the request for the new certificate signed by the CA. To get a new Directory Server certificate using the CMC method, see the Obtaining System and Server Certificates section in the Red Hat Certificate System Administration Guide.In the above section, follow the guidance to create a TLS server certificate. Once the certificate is created, it must be imported back into the Directory Server's certificate database.
- Stop the Directory Server instance before accessing the NSS database:
# systemctl stop dirsrv@instance_name
- Delete the old Directory Server certificate:
# certutil -F -d /etc/dirsrv/slapd-instance_name -f /etc/dirsrv/slapd-instance_name/password.txt -n "DS Certificate"
- Import the CA certificate downloaded earlier:
# PKICertImport -d /etc/dirsrv/slapd-instance_name -f /etc/dirsrv/slapd-instance_name/password.txt -n "CA Certificate" -t "CT,C,C" -a -i ca.crt -u L
- Import the new Directory Server certificate downloaded earlier:
# PKICertImport -d /etc/dirsrv/slapd-instance_name -f /etc/dirsrv/slapd-instance_name/password.txt -n "DS Certificate" -t ",," -a -i ds.crt -u V
- Start the Directory Server instance:
# systemctl start dirsrv@instance_name
- Remove the old Directory Server Certificate from PKI CA:
- Stop the Certificate System instance:
# systemctl stop pki-tomcatd@instance_name.service
- Remove the certificate:
# certutil -D -d /var/lib/pki/instance_name/alias/ -n "DS Certificate"
- Start the Certificate System instance:
# systemctl start pki-tomcatd@instance_name.service
- Verify that the new Directory Server certificate is signed by the CA installed in the NSS database:
- Display the Directory Server certificate
$ certutil -L -d /etc/dirsrv/slapd-instance_name -n "DS Certificate" Issuer: "CN=CA Signing Certificate,O=EXAMPLE" Subject: "CN=server.example.com"
- Verify the old Directory Server certificate no longer exists in the PKI NSS database:
$ certutil -L -d /var/lib/pki/instance_name/alias
- Verify Certificate System can connect to Directory Server using the new certificate:
$ pki cert-find
7.10.3. Enabling TLS Client Authentication
Note
pkispawn
already automatically created apkidbuser
on its internal directory server, where the CS instance's "subsystem certificate" (for examplesubsystemCert cert-pki-ca
) that is used for outbound TLS client authentication is stored in the user entry. Therefore, there is no need to create another LDAP user or another certificate for the TLS client-authentication.- When creating content for
/etc/dirsrv/slapd-instance_name/certmap.conf
, use the following format:certmap rhcs <certificate issuer DN> rhcs:CmapLdapAttr seeAlso rhcs:verifyCert on
For examplecertmap rhcs CN=CA Signing Certificate,OU=pki-tomcat-ca,O=pki-tomcat-ca-SD rhcs:CmapLdapAttr seeAlso rhcs:verifyCert on
- After configuring, restart the Directory Server.
CS.cfg
file located at <instance directory>/<subsystem type>/conf/CS.cfg
. For example /var/lib/pki/instance_name/ca/conf/CS.cfg
CS.cfg
, please add the RHCS instance's subsystem certificate nickname to internaldb.ldapauth.clientCertNickname
, and remove the two unused entries:
internaldb.ldapauth.bindDN internaldb.ldapauth.bindPWPrompt
internaldb._000=## internaldb._001=## Internal Database internaldb._002=## internaldb.basedn=o=pki-tomcat-ca-SD internaldb.database=pki-tomcat-ca internaldb.maxConns=15 internaldb.minConns=3 internaldb.ldapauth.authtype=SslClientAuth internaldb.ldapauth.clientCertNickname=HSM-A:subsystemCert pki-tomcat-ca internaldb.ldapconn.host=example.com internaldb.ldapconn.port=11636 internaldb.ldapconn.secureConn=true
Note
internaldb.basedn
and internaldb.database
parameters must be configured to match your specific LDAP instance.
internaldb.ldapauth.authtype=SslClientAuth
and internaldb.ldapconn.secureConn=true
must be set, and the value of the internaldb.ldapauth.clientCertNickname
must match the nickname of the TLS client certificate to authenticate against LDAP with in the NSS DB.
7.10.4. Configuring Session Timeout
7.10.5. CRL or Certificate Publishing
7.10.6. Configuring Certificate Enrollment Profiles (CA)
7.10.7. Enabling Access Banner
7.10.8. Enabling the Watchdog Service
nuxwdog
) service provides secure system password management. For details, see Section 14.3.2.1, “Enabling the Watchdog Service”.
7.10.9. Configuration for CMC Enrollment and Revocation (CA)
- For details about enabling the CMC Shared Token Feature, see Section 14.8.3, “Enabling the CMC Shared Secret Feature”.
- For details about enabling the
PopLinkWittness
feature, see Section 14.8.2, “Enabling thePopLinkWittnessV2
Feature”. - For details about enabling
CMCRevoke
for the web user interface, see Section 14.8.4, “Enabling CMCRevoke for the Web User Interface”.
7.10.10. TLS client-authentication for the Java Console
pkiconsole
to use TLS Client Certificate Authentication”.
Note
pkiconsole
is being deprecated.
7.10.11. Creating a Role User
7.10.12. Removing the Bootstrap User
7.10.13. Disabling Multi-role Support
7.10.14. KRA Configurations
7.10.14.1. Adding Requirement for Multiple Agent Approval for Key Recovery Authority (KRA)
7.10.14.2. Configuring KRA Encryption Settings
7.10.15. Setting up Users to use User Interfaces
Chapter 8. Using Hardware Security Modules for Subsystem Security Databases
8.1. Installing Certificate System with an HSM
pkispawn
utility when installing Certificate System with an HSM:
[DEFAULT] ########################## # Provide HSM parameters # ########################## pki_hsm_enable=True pki_hsm_libfile=hsm_libfile pki_hsm_modulename=hsm_modulename pki_token_name=hsm_token_name pki_token_password=pki_token_password ######################################## # Provide PKI-specific HSM token names # ######################################## pki_audit_signing_token=hsm_token_name pki_ssl_server_token=hsm_token_name pki_subsystem_token=hsm_token_name
8.2. Using Hardware Security Modules with Subsystems
pkcs11.txt
database with the modutil
command during the pre-configuration stage of the installation, if the PKCS #11 library modules are in the specified installation paths.
Important
8.2.1. Enabling the FIPS Mode on an HSM
Important
- nCipher HSM
- On a nCipher HSM, the FIPS mode can only be enabled when generating the Security World, this cannot be changed afterwards. While there is a variety of ways to generate the Security World, the preferred method is always to use the
new-world
command. For guidance on how to generate a FIPS-compliant Security World, please follow the nCipher HSM vendor's documentation. - LunaSA HSM
- Similarly, enabling the FIPS mode on a Luna HSM must be done during the initial configuration, since changing this policy zeroizes the HSM as a security measure. For details, please refer to the Luna HSM vendor's documentation.
8.2.2. Verifying if FIPS Mode is Enabled on an HSM
8.2.2.1. Verifying if FIPS Mode is Enabled on an nCipher HSM
Note
# /opt/nfast/bin/nfkminfo
StrictFIPS140
is listed in the state flag, the FIPS mode is enabled. In newer vesions, it is however better to check the new mode
line and look for fips1402level3
. In all cases, there should also be an hkfips
key present in the nfkminfo
output.
8.2.2.2. Verifying if FIPS Mode is Enabled on a Luna SA HSM
Note
- Open the
lunash
management console - Use the
hsm show
command and verify that the output contains the textThe HSM is in FIPS 140-2 approved operation mode.
:lunash:> hsm show ... FIPS 140-2 Operation: ===================== The HSM is in FIPS 140-2 approved operation mode. ...
8.2.3. Adding or Managing the HSM Entry for a Subsystem
pkispawn
command, the following parameter is added to the /var/lib/pki/instance_name/conf/password.conf
file for the HSM password:
hardware-HSM_token_name=HSM_token_password
8.2.4. Setting up SELinux for an HSM
enforcing
mode, certain HSMs require that you manually update SELinux settings before you can install Certificate System.
- nCipher nShield Connect XC
- After you installed the HSM and before you start installing Certificate System:
- Reset the context of files in the
/opt/nfast/
directory:# restorecon -R /opt/nfast/
- Restart the nfast software.
# /opt/nfast/sbin/init.d-ncipher restart
- Thales Luna HSM
- No SELinux-related actions are required before you start installing Certificate System.
8.2.5. Installing a Subsystem Using nCipher nShield Connect XC HSM
- Prepare an override file, which corresponds to your particular deployment. The following
default_hms.txt
file is an example of such an override file:Note
This file serves only as an example of an nCipher HSM override configuration file -- numerous other values can be overridden including default hashing algorithms. Also, only one of the [CA], [KRA], [OCSP], [TKS], or [TPS] sections will be utilized depending upon the subsystem invocation specified on thepkispawn
command-line.Example 8.1. An Override File Sample to Use with nCipher HSM
############################################################################### ############################################################################### ############################################################################### ## ## ## EXAMPLE: Configuration File used to override '/etc/pki/default.cfg' ## ## when using an nCipher Hardware Security Module (HSM): ## ## ## ## ## ## # modutil -dbdir . -list ## ## ## ## Listing of PKCS #11 Modules ## ## ----------------------------------------------------------- ## ## 1. NSS Internal PKCS #11 Module ## ## slots: 2 slots attached ## ## status: loaded ## ## ## ## slot: NSS Internal Cryptographic Services ## ## token: NSS Generic Crypto Services ## ## ## ## slot: NSS User Private Key and Certificate Services ## ## token: NSS Certificate DB ## ## ## ## 2. nfast ## ## library name: /opt/nfast/toolkits/pkcs11/libcknfast.so ## ## slots: 2 slots attached ## ## status: loaded ## ## ## ## slot: <serial_number> Rt1 ## ## token: accelerator ## ## ## ## slot: <serial_number> Rt1 slot 0 ## ## token: <HSM_token_name> ## ## ----------------------------------------------------------- ## ## ## ## ## ## Based on the example above, substitute all password values, ## ## as well as the following values: ## ## ## ## <hsm_libfile>=/opt/nfast/toolkits/pkcs11/libcknfast.so ## ## <hsm_modulename>=nfast ## ## <hsm_token_name>=NHSM-CONN-XC ## ## ## ############################################################################### ############################################################################### ############################################################################### [DEFAULT] ########################## # Provide HSM parameters # ########################## pki_hsm_enable=True pki_hsm_libfile=<hsm_libfile> pki_hsm_modulename=<hsm_modulename> pki_token_name=<hsm_token_name> pki_token_password=<pki_token_password> ######################################## # Provide PKI-specific HSM token names # ######################################## pki_audit_signing_token=<hsm_token_name> pki_ssl_server_token=<hsm_token_name> pki_subsystem_token=<hsm_token_name> ################################## # Provide PKI-specific passwords # ################################## pki_admin_password=<pki_admin_password> pki_client_pkcs12_password=<pki_client_pkcs12_password> pki_ds_password=<pki_ds_password> ##################################### # Provide non-CA-specific passwords # ##################################### pki_client_database_password=<pki_client_database_password> ############################################################### # ONLY required if specifying a non-default PKI instance name # ############################################################### #pki_instance_name=<pki_instance_name> ############################################################## # ONLY required if specifying non-default PKI instance ports # ############################################################## #pki_http_port=<pki_http_port> #pki_https_port=<pki_https_port> ###################################################################### # ONLY required if specifying non-default 389 Directory Server ports # ###################################################################### #pki_ds_ldap_port=<pki_ds_ldap_port> #pki_ds_ldaps_port=<pki_ds_ldaps_port> ###################################################################### # ONLY required if PKI is using a Security Domain on a remote system # ###################################################################### #pki_ca_hostname=<pki_ca_hostname> #pki_issuing_ca_hostname=<pki_issuing_ca_hostname> #pki_issuing_ca_https_port=<pki_issuing_ca_https_port> #pki_security_domain_hostname=<pki_security_domain_hostname> #pki_security_domain_https_port=<pki_security_domain_https_port> ########################################################### # ONLY required for PKI using an existing Security Domain # ########################################################### # NOTE: pki_security_domain_password == pki_admin_password # of CA Security Domain Instance #pki_security_domain_password=<pki_admin_password> [Tomcat] ############################################################## # ONLY required if specifying non-default PKI instance ports # ############################################################## #pki_ajp_port=<pki_ajp_port> #pki_tomcat_server_port=<pki_tomcat_server_port> [CA] ####################################### # Provide CA-specific HSM token names # ####################################### pki_ca_signing_token=<hsm_token_name> pki_ocsp_signing_token=<hsm_token_name> ########################################################################### # ONLY required if 389 Directory Server for CA resides on a remote system # ########################################################################### #pki_ds_hostname=<389 hostname> [KRA] ######################################## # Provide KRA-specific HSM token names # ######################################## pki_storage_token=<hsm_token_name> pki_transport_token=<hsm_token_name> ############################################################################ # ONLY required if 389 Directory Server for KRA resides on a remote system # ############################################################################ #pki_ds_hostname=<389 hostname> [OCSP] ######################################### # Provide OCSP-specific HSM token names # ######################################### pki_ocsp_signing_token=<hsm_token_name> ############################################################################# # ONLY required if 389 Directory Server for OCSP resides on a remote system # ############################################################################# #pki_ds_hostname=<389 hostname> [TKS] ######################################## # Provide TKS-specific HSM token names # ######################################## ############################################################################ # ONLY required if 389 Directory Server for TKS resides on a remote system # ############################################################################ #pki_ds_hostname=<389 hostname> [TPS] ################################### # Provide TPS-specific parameters # ################################### pki_authdb_basedn=<dnsdomainname where hostname.b.c.d is dc=b,dc=c,dc=d> ######################################## # Provide TPS-specific HSM token names # ######################################## ############################################################################ # ONLY required if 389 Directory Server for TPS resides on a remote system # ############################################################################ #pki_ds_hostname=<389 hostname> ########################################################## # ONLY required if TPS requires a CA on a remote machine # ########################################################## #pki_ca_uri=https://<pki_ca_hostname>:<pki_ca_https_port> ####################################### # ONLY required if TPS requires a KRA # ####################################### #pki_enable_server_side_keygen=True ########################################################### # ONLY required if TPS requires a KRA on a remote machine # ########################################################### #pki_kra_uri=https://<pki_kra_hostname>:<pki_kra_https_port> ########################################################### # ONLY required if TPS requires a TKS on a remote machine # ########################################################### #pki_tks_uri=https://<pki_tks_hostname>:<pki_tks_https_port>
- Use the configuration file as described in Section 7.7, “Two-step Installation”.
# pkispawn -s CA -f ./
default_hsm.txt
-vvv# pkispawn -s KRA -f ./
default_hsm.txt
-vvv# pkispawn -s OCSP -f ./
default_hsm.txt
-vvv# pkispawn -s TKS -f ./
default_hsm.txt
-vvv# pkispawn -s TPS -f ./
default_hsm.txt
-vvv
- Verify that the HSM contains the following certificates:
$ certutil -L -d /etc/pki/pki-tomcat/alias -h token -f token.pwd
Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI token:ca_signing CTu,Cu,Cu token:ca_ocsp_signing u,u,u token:subsystem u,u,u token:ca_audit_signing u,u,Pu token:sslserver/pki.example.com u,u,u
8.2.6. Installing a Subsystem Using Thales Luna HSM
Example 8.2. A Sample of the LunaSA Override File Header
############################################################################### ############################################################################### ############################################################################### ## ## ## EXAMPLE: Configuration File used to override '/etc/pki/default.cfg' ## ## when using a LunaSA Hardware Security Module (HSM): ## ## ## ## ## ## # modutil -dbdir . -list ## ## ## ## Listing of PKCS #11 Modules ## ## ----------------------------------------------------------- ## ## 1. NSS Internal PKCS #11 Module ## ## slots: 2 slots attached ## ## status: loaded ## ## ## ## slot: NSS Internal Cryptographic Services ## ## token: NSS Generic Crypto Services ## ## ## ## slot: NSS User Private Key and Certificate Services ## ## token: NSS Certificate DB ## ## ## ## 2. lunasa ## ## library name: /usr/safenet/lunaclient/lib/libCryptoki2_64.so ## ## slots: 4 slots attached ## ## status: loaded ## ## ## ## slot: LunaNet Slot ## ## token: dev-intca ## ## ## ## slot: Luna UHD Slot ## ## token: ## ## ## ## slot: Luna UHD Slot ## ## token: ## ## ## ## slot: Luna UHD Slot ## ## token: ## ## ----------------------------------------------------------- ## ## ## ## ## ## Based on the example above, substitute all password values, ## ## as well as the following values: ## ## ## ## <hsm_libfile>=/usr/safenet/lunaclient/lib/libCryptoki2_64.so ## ## <hsm_modulename>=lunasa ## ## <hsm_token_name>=dev-intca ## ## ## ############################################################################### ############################################################################### ###############################################################################
8.3. Backing up Keys on Hardware Security Modules
.p12
file. If such an instance is to be backed-up, contact the manufacturer of your HSM for support.
8.4. Installing a Clone Subsystem Using an HSM
pki_backup_keys
to True
in the configuration file you use for the installation along with the defined value for the pki_backup_password
option, or by exporting the keys using the PKCS12Export
tool.
PKCS12Export
when using an HSM because the keys cannot be retrieved from the HSM. Instead, the clone subsystem should either be pointed to the HSM used by the master subsystem, so that it can access the same keys. Alternatively, if using a separate HSM, clone the keys to this HSM using the utilities provided by the HSM vendor. You must provide access to the master subsystem's key before running the pkispawn
utility.
[CA] pki_clone=True pki_clone_pkcs12_password=Secret123 pki_clone_pkcs12_path=<path_to_pkcs12_file> pki_clone_replicate_schema=True pki_clone_uri=https://<master_ca_host_name>:<master_ca_https_port>
[CA] pki_clone=True pki_clone_replicate_schema=True pki_clone_uri=https://<master_ca_host_name>:<master_ca_https_port>
Note
8.5. Viewing Tokens
modutil
utility.
- Change to the instance
alias
directory. For example:# cd /var/lib/pki/pki-tomcat/alias
- Show the information about the installed PKCS #11 modules installed as well as information on the corresponding tokens using the
modutil
tool.# modutil -dbdir . -nocertdb -list
8.6. Detecting Tokens
TokenInfo
utility, pointing to the alias
directory for the subsystem instance. This is a Certificate System tool which is available after the Certificate System packages are installed.
# TokenInfo /var/lib/pki/pki-tomcat/alias
Chapter 9. Installing an Instance with ECC System Certificates
Important
enforcing
mode to permissive
mode to allow the module to function. Otherwise, any subsystem operations which require the ECC module will fail.
9.1. Loading a Third-Party ECC Module
9.2. Using ECC with an HSM
- Set up the HSM per manufacturer's instructions. If multiple hosts are sharing the HSM, make sure they can all access the same partition if needed and if the site policies allow it.
- Define the required parameters in the
pkispawn
utility configuration file and runpkispawn
. For example, to configure Certificate System to create an ECC CA, assuming the configuration file isecc.inf
:- Edit
ecc.inf
to specify the appropriate settings. For an example of the configuration file, see the pkispawn(8) man page. - Run
pkispawn
againstecc.inf
:$ script -c 'pkispawn -s CA -f /root/pki/ecc.inf -vvv'
Chapter 10. Cloning Subsystems
10.1. Backing up Subsystem Keys from a Software Database
PKCS12Export
utility. For example:
PKCS12Export -debug -d /var/lib/pki/instance_name/alias -w p12pwd.txt -p internal.txt -o master.p12
Note
10.2. Cloning a CA
- Configure the master CA, and back up the keys.
- In the
CS.cfg
file for the master CA, enable the master CA to monitor replication database changes by adding theca.listenToCloneModifications
parameter:ca.listenToCloneModifications=true
- Create the clone subsystem instance.For examples of the configuration file required by
pkispawn
when cloning CA subsystems, see theInstalling a CA clone
andInstalling a CA clone on the same host
sections of the pkispawn(8) man page. - Restart the Directory Server instance used by the clone.
# systemctl restart pki-tomcatd@kra-clone-ds-instance.service
Note
Restarting the Directory Server reloads the updated schema, which is required for proper performance. - Restart the clone instance.
# pki-server restart instance_name
- Request a certificate from the cloned CA.
- Approve the request.
- Download the certificate to the browser.
- Revoke the certificate.
- Check master CA's CRL for the revoked certificate. In the master Certificate Manager's agent services page, click Update Certificate Revocation List. Find the CRL in the list.The CRL should show the certificate revoked by the cloned Certificate Manager. If that certificate is not listed, check logs to resolve the problem.
10.3. Updating CA-KRA Connector Information After Cloning
pki ca-kraconnector-add
command.
- On the master clone machine, open the master CA's
CS.cfg
file, and copy all of theca.connector.KRA.*
lines for the new KRA connector.[root@master ~]# vim /var/lib/pki/instance_name/ca/conf/CS.cfg
- Stop the clone CA instance. For example:
[root@clone-ca ~]# pki-server stop instance_name
- Open the clone CA's
CS.cfg
file.[root@clone-ca ~]# vim /var/lib/pki/instance_name/ca/conf/CS.cfg
- Copy in the connector information for the new KRA instance or clone.
ca.connector.KRA.enable=true ca.connector.KRA.host=server-kra.example.com ca.connector.KRA.local=false ca.connector.KRA.nickName=subsystemCert cert-pki-ca ca.connector.KRA.port=10444 ca.connector.KRA.timeout=30 ca.connector.KRA.transportCert=MIIDbD...ZR0Y2zA== ca.connector.KRA.uri=/kra/agent/kra/connector
- Start the clone CA.
[root@clone-ca ~]# pki-server start instance_name
10.4. Cloning OCSP Subsystems
- Configure the master OCSP, and back up the keys.
- In the
CS.cfg
file for the master OCSP, set theOCSP.Responder.store.defStore.refreshInSec
parameter to any non-zero number other than 21600; 21600 is the setting for a clone.# vim /etc/instance_name/CS.cfg OCSP.Responder.store.defStore.refreshInSec=15000
- Create the clone subsystem instance using the
pkispawn
utility.For examples of the configuration file required bypkispawn
when cloning OCSP subsystems, see the pkispawn(8) man page. - Restart the Directory Server instance used by the clone.
# systemctl dirsrv@instance_name.service
Note
Restarting the Directory Server reloads the updated schema, which is required for proper performance. - Restart the clone instance.
# pki-server restart instance_name
- Set up OCSP publishing in the master CA so that the CRL is published to the master OCSP.
- Once the CRL is successfully published, check both the master and cloned OCSP's List Certificate Authorities link in the agent pages. The list should be identical.
- Use the
OCSPClient
tool to submit OCSP requests to the master and the cloned Online Certificate Status Manager. The tool should receive identical OCSP responses from both managers.
10.5. Cloning KRA Subsystems
- Configure the master subsystem and back up the keys.
- Create the clone subsystem instance using the
pkispawn
utility:$
pkispawn -s <subsystem> -f myconfig.txt
An example of the configuration file required bypkispawn
when cloning KRA subsystems:[DEFAULT] pki_admin_password=<Secret.123> pki_client_database_password=<Secret.123> pki_client_pkcs12_password=<Secret.123> pki_ds_password=<Secret.123> pki_security_domain_password=<Secret.123> pki_security_domain_hostname=<master_ca_hostname> pki_security_domain_https_port=<master_ca_https_port> pki_security_domain_user=caadmin [KRA] pki_clone=True pki_clone_pkcs12_password=<Secret.123> pki_clone_pkcs12_path=<path_to_pkcs12_file> pki_clone_replicate_schema=True pki_clone_uri=https://<master_subsystem_host:master_subsystem_https_port> pki_issuing_ca=https://<ca_hostname:ca_https_port>
- Restart the Directory Server instance used by the clone.
#
systemctl dirsrv@instance_name.service
Note
Restarting the Directory Server reloads the updated schema, which is required for proper performance. - Restart the clone instance.
# pki-server restart instance_name
- Go to the KRA agent's page.
- Click List Requests.
- Select Show all requests for the request type and status.
- Click.
- Compare the results from the cloned KRA and the master KRA. The results ought to be identical.
10.6. Cloning TKS Subsystems
- Configure the master subsystem and back up the keys.
- Create the clone subsystem instance using the
pkispawn
utility.$
pkispawn -s <subsystem> -f myconfig.txt
An example of the configuration file required bypkispawn
when cloning TKS subsystems:[DEFAULT] pki_admin_password=<Secret.123> pki_client_database_password=<Secret.123> pki_client_pkcs12_password=<Secret.123> pki_ds_password=<Secret.123> pki_security_domain_password=<Secret.123> pki_security_domain_hostname=<master_ca_hostname> pki_security_domain_https_port=<master_ca_https_port> pki_security_domain_user=caadmin [TKS] pki_clone=True pki_clone_pkcs12_password=<Secret.123> pki_clone_pkcs12_path=<path_to_pkcs12_file> pki_clone_replicate_schema=True pki_clone_uri=https://<master_subsystem_host:master_subsystem_https_port> pki_issuing_ca=https://<ca_hostname:ca_https_port>
- Restart the clone instance.
# pki-server restart instance_name
ldapsearch
to make sure that the same key information is contained in both databases.
10.7. Converting Masters and Clones
10.7.1. Converting CA Clones and Masters
- Stop the master CA if it is still running.
- Open the existing master CA configuration directory:
# cd /var/lib/pki/instance_name/ca/conf
- Edit the
CS.cfg
file for the master, and change the CRL and maintenance thread settings so that it is set as a clone:- Disable control of the database maintenance thread:
ca.certStatusUpdateInterval=0
- Disable monitoring database replication changes:
ca.listenToCloneModifications=false
- Disable maintenance of the CRL cache:
ca.crl.IssuingPointId.enableCRLCache=false
- Disable CRL generation:
ca.crl.IssuingPointId.enableCRLUpdates=false
- Set the CA to redirect CRL requests to the new master:
master.ca.agent.host=new_master_hostname master.ca.agent.port=new_master_port
- Stop the cloned CA server.
# pki-server stop instance_name
- Open the cloned CA's configuration directory.
# cd /etc/instance_name
- Edit the
CS.cfg
file to configure the clone as the new master.- Delete each line which begins with the
ca.crl.
prefix. - Copy each line beginning with the
ca.crl.
prefix from the former master CACS.cfg
file into the cloned CA'sCS.cfg
file. - Enable control of the database maintenance thread; the default value for a master CA is
600
.ca.certStatusUpdateInterval=600
- Enable monitoring database replication:
ca.listenToCloneModifications=true
- Enable maintenance of the CRL cache:
ca.crl.IssuingPointId.enableCRLCache=true
- Enable CRL generation:
ca.crl.IssuingPointId.enableCRLUpdates=true
- Disable the redirect settings for CRL generation requests:
master.ca.agent.host=hostname master.ca.agent.port=port number
- Start the new master CA server.
# pki-server start instance_name
10.7.2. Converting OCSP Clones
- Stop the OCSP master, if it is still running.
- Open the existing master OCSP configuration directory.
# cd /etc/instance_name
- Edit the
CS.cfg
, and reset theOCSP.Responder.store.defStore.refreshInSec
parameter to21600
:OCSP.Responder.store.defStore.refreshInSec=21600
- Stop the online cloned OCSP server.
# pki-server stop instance_name
- Open the cloned OCSP responder's configuration directory.
# cd /etc/instance_name
- Open the
CS.cfg
file, and delete theOCSP.Responder.store.defStore.refreshInSec
parameter or change its value to any non-zero number:OCSP.Responder.store.defStore.refreshInSec=15000
- Start the new master OCSP responder server.
# pki-server start instance_name
10.8. Cloning a CA That Has Been Re-Keyed
CS.cfg
configuration file — and those key IDs are not updated when the certificate database keys change.
CertUtil::createSelfSignedCert() - CA private key is null!
- Find all of the private key IDs in the
CS.cfg
file.
cloning.signing.privkey.id =-4d798441aa7230910d4e1c39fa132ea228d5d1bc cloning.ocsp_signing.privkey.id =-3e23e743e0ddd88f2a7c6f69fa9f9bcebef1a60 cloning.subsystem.privkey.id =-c3c1b3b4e8f5dd6d2bdefd07581c0b15529536 cloning.sslserver.privkey.id =3023d30245804a4fab42be209ebb0dc683423a8f cloning.audit_signing.privkey.id=2fe35d9d46b373efabe9ef01b8436667a70df096#
grep privkey.id /var/lib/pki/instance_name/ca/conf/CS.cfg
- Print all of the current private key IDs stored in the NSS database and compare them to the private key IDs stored in the
CS.cfg
file:# certutil -K -d alias certutil: Checking token "NSS Certificate DB" in slot "NSS User Private Key and Certificate Services" Enter Password or Pin for "NSS Certificate DB": < 0> rsa a7b0944b7b8397729a4c8c9af3a9c2b96f49c6f3 caSigningCert cert-ca4-test-master < 1> rsa 6006094af3e5d02aaa91426594ca66cb53e73ac0 ocspSigningCert cert-ca4-test-master < 2> rsa d684da39bf4f2789a3fc9d42204596f4578ad2d9 subsystemCert cert-ca4-test-master < 3> rsa a8edd7c2b5c94f13144cacd99624578ae30b7e43 sslserverCert cert-ca4-test1 < 4> rsa 2fe35d9d46b373efabe9ef01b8436667a70df096 auditSigningCert cert-ca4-test1
In this example, only the audit signing key is the same; the others have been changed. - Take the keys returned in step 2 and convert them from unsigned values (which is what
certutil
returns) to signed Java BigIntegers (which is how the keys are stored in the Certificate System database).This can be done with a calculator or by using the script in Example 10.1, “Certutil to BigInteger Conversion Program”. - Copy the new key values into the
CS.cfg
file.
cloning.signing.privkey.id =-584f6bb4847c688d65b373650c563d4690b6390d cloning.ocsp_signing.privkey.id =6006094af3e5d02aaa91426594ca66cb53e73ac0 cloning.subsystem.privkey.id =-297b25c640b0d8765c0362bddfba690ba8752d27 cloning.sslserver.privkey.id =-5712283d4a36b0ecebb3532669dba8751cf481bd cloning.audit_signing.privkey.id=2fe35d9d46b373efabe9ef01b8436667a70df096#
vim /var/lib/pki/instance_name/ca/conf/CS.cfg
- Clone the CA as described in Section 10.2, “Cloning a CA”.
Example 10.1. Certutil to BigInteger Conversion Program
certutil
to the required BigInteger format.
.java
file, such as Test.java
.
import java.math.BigInteger; public class Test { public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); } return data; } public static void main(String[] args) { byte[] bytes = hexStringToByteArray(args[0]); BigInteger big = new BigInteger (bytes); System.out.println("Result is ==> " + big.toString(16)); } }
# javac Test.java
Chapter 11. Setting up PKI ACME Responder
Note
pki-tomcat
).
11.1. Installing PKI ACME Responder
- First download and install the
pki-acme
RPM package:$ dnf install pki-acme
- Create an ACME responder in a PKI server instance using the following command:
$ pki-server acme-create
/etc/pki/pki-tomcat/acme
directory.
pki-server-acme
manpage.
11.2. Configuring an ACME Database
/etc/pki/pki-tomcat/acme/database.conf
.
- You can configure the database via command-line using the
pki-server acme-database-mod
command. Invoking this command without any parameters launches an interactive mode, for example:$ pki-server acme-database-mod The current value is displayed in the square brackets. To keep the current value, simply press Enter. To change the current value, enter the new value. To remove the current value, enter a blank space. Enter the type of the database. Available types: ds, in-memory, ldap, openldap, postgresql. Database Type: ds Enter the location of the LDAP server (e.g. ldap://localhost.localdomain:389). Server URL [ldap://localhost.localdomain:389]: Enter the authentication type. Available types: BasicAuth, SslClientAuth. Authentication Type [BasicAuth]: Enter the bind DN. Bind DN [cn=Directory Manager]: Enter the bind password. Bind Password [********]: Enter the base DN for the ACME subtree. Base DN [dc=acme,dc=pki,dc=example,dc=com]:
- Invoking the command with the
--type
parameter creates a new configuration based on the specified type. - Invoking the command with other parameters updates the specified parameters.
11.2.1. Configuring a DS Database
/usr/share/pki/acme/database/ds/database.conf
.
- First add the ACME DS schema by importing the
/usr/share/pki/acme/database/ds/schema.ldif
file with the following command:$ ldapmodify -h $HOSTNAME -x -D "cn=Directory Manager" -w Secret.123 \ -f /usr/share/pki/acme/database/ds/schema.ldif
- Next, prepare an LDIF file to create the ACME subtree. A sample LDIF file is available at
usr/share/pki/acme/database/ds/create.ldif
. This example usesdc=acme,dc=pki,dc=example,dc=com
as the base DN. - Import the LDIF file using the
ldapadd
command:$ ldapadd -h $HOSTNAME -x -D "cn=Directory Manager" -w Secret.123 \ -f /usr/share/pki/acme/database/ds/create.ldif
- Copy the sample database configuration file from
/usr/share/pki/acme/database/ds/database.conf
into the/etc/pki/pki-tomcat/acme
directory, or execute the following command to customize some of the parameters:$ pki-server acme-database-mod --type ds \ -DbindPassword=Secret.123
- Customize the configuration as needed:
- In a standalone ACME deployment, the
database.conf
should look like the following:class=org.example.acme.database.DSDatabase url=ldap://<hostname>:389 authType=BasicAuth bindDN=cn=Directory Manager bindPassword=Secret.123 baseDN=dc=acme,dc=pki,dc=example,dc=com
- In a shared CA and ACME deployment, the database.conf should look like the following:
class=org.example.acme.database.DSDatabase configFile=conf/ca/CS.cfg baseDN=dc=acme,dc=pki,dc=example,dc=com
monitor.enabled=true
11.3. Configuring ACME Issuer
/etc/pki/pki-tomcat/acme/issuer.conf
.
pki-server acme-issuer-mod
command.
- Invoking this command without any parameters launches an interactive mode, for example:
$ pki-server acme-issuer-mod The current value is displayed in the square brackets. To keep the current value, simply press Enter. To change the current value, enter the new value. To remove the current value, enter a blank space. Enter the type of the certificate issuer. Available types: nss, pki. Issuer Type: pki Enter the location of the PKI server (e.g. https://localhost.localdomain:8443). Server URL [https://localhost.localdomain:8443]: Enter the certificate nickname for client authentication. This might be the CA agent certificate. Enter blank to use basic authentication. Client Certificate: Enter the username of the CA agent for basic authentication. Enter blank if a CA agent certificate is used for client authentication. Agent Username [caadmin]: Enter the CA agent password for basic authentication. Enter blank if the password is already stored in a separate property file or if a CA agent certificate is used for client authentication. Agent Password [********]: Enter the certificate profile for issuing ACME certificates (e.g. acmeServerCert). Certificate Profile [acmeServerCert]:
- Invoking the command with the
--type
parameter creates a new configuration based on the specified type. - Invoking the command with other parameters updates the specified parameters.
11.3.1. Configuring PKI Issuer
/usr/share/pki/acme/issuer/pki/issuer.conf
.
- To configure a PKI issuer, copy this sample
issuer.conf
into the/etc/pki/pki-tomcat/acme
directory or execute the following command to customize some of the parameters:$ pki-server acme-issuer-mod --type pki \ -Dusername=caadmin \ -Dpassword=Secret.123
Customize the configuration as needed. Theissuer.conf
file should look like the following:class=org.example.acme.issuer.PKIIssuer url=https://localhost.localdomain:8443 profile=acmeServerCert username=caadmin password=Secret.123
- The url parameter specifies the PKI issuer location.
- The profile parameter specifies the certificate profile to use.
- To use client certificate authentication, specify the client certificate nickname in the nickname parameter.
- To use basic authentication, specify the username in the username parameter as well as the password in the password parameter.
11.4. Configuring ACME Realm
/etc/pki/pki-tomcat/acme/realm.conf
.
pki-server acme-realm-mod
command.
- Invoking this command without any parameters launches an interactive mode, for example:
$ pki-server acme-realm-mod The current value is displayed in the square brackets. To keep the current value, simply press Enter. To change the current value, enter the new value. To remove the current value, enter a blank space. Enter the type of the realm. Available types: ds. Database Type: ds Enter the location of the LDAP server (e.g. ldap://localhost.localdomain:389). Server URL [ldap://localhost.localdomain:389]: Enter the authentication type. Available types: BasicAuth, SslClientAuth. Authentication Type [BasicAuth]: Enter the bind DN. Bind DN [cn=Directory Manager]: Enter the bind password. Bind Password [********]: Enter the base DN for the ACME users subtree. Users DN [ou=people,dc=acme,dc=pki,dc=example,dc=com]: Enter the base DN for the ACME groups subtree. Groups DN [ou=groups,dc=acme,dc=pki,dc=example,dc=com]:
- Invoking the command with the
--type
parameter creates a new configuration based on the specified type. - Invoking the command with other parameters updates the specified parameters.
11.4.1. Configuring DS Realm
/usr/share/pki/acme/realm/ds/realm.conf
.
- Prepare subtrees for ACME users and groups in DS. A sample LDIF file is available at
/usr/share/pki/acme/realm/ds/create.ldif]
. This example usesdc=acme,dc=pki,dc=example,dc=com
as the base DN. - Import the LDIF file using the
ldapadd
command:$ ldapadd -h $HOSTNAME -x -D "cn=Directory Manager" -w Secret.123 \ -f /usr/share/pki/acme/realm/ds/create.ldif
- Copy the sample configuration file from
/usr/share/pki/acme/realm/ds/realm.conf
into the/etc/pki/pki-tomcat/acme
directory, or run the following command to customize some of the parameters:$ pki-server acme-realm-mod --type ds \ -DbindPassword=Secret.123
- Customize the configuration as needed:
- In a standalone ACME deployment, the
realm.conf
file should look like the following:class=org.example.acme.realm.DSRealm url=ldap://<hostname>:389 authType=BasicAuth bindDN=cn=Directory Manager bindPassword=Secret.123 usersDN=ou=people,dc=acme,dc=pki,dc=example,dc=com groupsDN=ou=groups,dc=acme,dc=pki,dc=example,dc=com
- In a shared CA and ACME deployment, the
realm.conf
file should look like the following:class=org.example.acme.realm.DSRealm configFile=conf/ca/CS.cfg usersDN=ou=people,dc=ca,dc=pki,dc=example,dc=com groupsDN=ou=groups,dc=ca,dc=pki,dc=example,dc=com
11.5. Deploying ACME Responder
- Once you have configured the ACME responder, deploy it using the following command:
$ pki-server acme-deploy
This creates a deployment descriptor at/etc/pki/pki-tomcat/Catalina/localhost/acme.xml
.The PKI server starts the ACME responder automatically after a few seconds, you do not need to restart the server. - To verify that the ACME responder is running, use the following command:
$ curl -s -k https://$HOSTNAME:8443/acme/directory | python -m json.tool { "meta": { "caaIdentities": [ "example.com" ], "externalAccountRequired": false, "termsOfService": "https://example.com/acme/tos.pdf", "website": "https://www.example.com" }, "newAccount": "https://<hostname>:8443/acme/new-account", "newNonce": "https://<hostname>:8443/acme/new-nonce", "newOrder": "https://<hostname>:8443/acme/new-order", "revokeCert": "https://<hostname>:8443/acme/revoke-cert" }
pki-server-acme
manpage.
Chapter 12. Additional Installation Options
pkispawn
make certain assumptions about the instances being installed, such as the default signing algorithm to use for CA signing certificates and whether to allow IPv6 addresses for hosts.
12.1. Lightweight Sub-CAs
12.1.1. Setting up a Lightweight Sub-CA
12.1.2. Disabling the Creation of Lightweight Sub-CAs
# ldapmodify -D "cn=Directory Manager" -W -x -h server.example.com dn: cn=aclResources,o=instance_name changetype: modify delete: resourceACLS resourceACLS: certServer.ca.authorities:create,modify:allow (create,modify) group="Administrators":Administrators may create and modify lightweight authorities delete: resourceACLS resourceACLS: certServer.ca.authorities:delete:allow (delete) group="Administrators":Administrators may delete lightweight authorities
Note
12.1.3. Re-enabling the Creation of Lightweight Sub-CAs
# ldapmodify -D "cn=Directory Manager" -W -x -h server.example.com dn: cn=aclResources,o=instance_name changetype: modify add: resourceACLS resourceACLS: certServer.ca.authorities:create,modify:allow (create,modify) group="Administrators":Administrators may create and modify lightweight authorities resourceACLS: certServer.ca.authorities:delete:allow (delete) group="Administrators":Administrators may delete lightweight authorities
12.2. Enabling IPv6 for a Subsystem
pkiconsole
), or through command-line scripts such as tpsclient
:
op=var_set name=ca_host value=IPv6 address
- Install the Red Hat Certificate System packages.
- Set the IPv4 and IPv6 addresses in the
/etc/hosts
file. For example:vim /etc/hosts 192.0.0.0 server.example.com IPv4 address 3ffe:1234:2222:2000:202:55ff:fe67:f527 server6.example.com IPv6 address
- Then, export the environment variable to use the IPv6 address for the server. For example:
export PKI_HOSTNAME=server6.example.com
- Run
pkispawn
to create the new instance. The values for the server host name in theCS.cfg
file will be set to the IPv6 address.
12.3. Enabling LDAP-based Enrollment Profiles
pki_profile_in_ldap=True
option in the [CA]
section of the pkispawn
configuration file.
Note
/var/lib/pki/instance_name/ca/profiles/ca/
, but will be ignored.
CS.cfg
:
subsystem.1.class=com.netscape.cmscore.profile.LDAPProfileSubsystem
pki
command line utility or a custom script.
12.4. Customizing TLS Ciphers
Chapter 13. Troubleshooting Installation and Cloning
- 13.1. Installation
- Q: I cannot see any Certificate System packages or updates.
- Q: The init script returned an OK status, but my CA instance does not respond. Why?
- Q: I want to customize the subject name for the CA signing certificate, but do not see a way to do this using the pkispawn interactive install mode.
- Q: I want to set different certificate validity periods and extensions for my root certificate authority — but I do not see a way to set it using pkispawn.
- Q: I am seeing an HTTP 500 error code when I try to connect to the web services pages after configuring my subsystem instance.
- 13.2. Java Console
- Q: I cannot open the pkiconsole and I am seeing Java exceptions in stdout.
- Q: I tried to run pkiconsole, and I got Socket exceptions in stdout. Why?
- Q: I attempt to start the console, and the system prompts me for my user name and password. After I enter these credentials, the console fails to appear.
13.1. Installation
journal
log by running the following command:
journalctl -u pki-tomcatd@instance_name.service
/var/log/pki/instance_name/subsystem_type/debug
.
catalina.out
file:
Oct 29, 2010 4:15:44 PM org.apache.coyote.http11.Http11Protocol init INFO: Initializing Coyote HTTP/1.1 on http-9080 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:615) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:243) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:408) Caused by: java.lang.UnsatisfiedLinkError: jss4
libnss3.so
in the path. Check this with this command:
ldd /usr/lib64/libjss4.so
libnss3.so
is not found, set the correct classpath in the /etc/sysconfig/instance_name
configuration file. Then restart the CA using the systemctl restart pki-tomcatd@instance_name.service
command.
pkispawn
interactive install mode.
/etc/pki/default.cfg
file is required. See the pkispawn(8) and pki_default.cfg(5) man pages.
pkispawn
.
pkispawn
. However, there is a way to edit the certificate profiles used by pkispawn
to generate the root CA certificates.
Important
pkispawn
to create a new CA instance.
- Back up the original CA certificate profile used by
pkispawn
.cp -p /usr/share/pki/ca/conf/caCert.profile /usr/share/pki/ca/conf/caCert.profile.orig
- Open the CA certificate profile used by the configuration wizard.
vim /usr/share/pki/ca/conf/caCert.profile
- Reset the validity period in the Validity Default to whatever you want. For example, to change the period to two years:
2.default.class=com.netscape.cms.profile.def.ValidityDefault 2.default.name=Validity Default 2.default.params.range=7200
- Add any extensions by creating a new default entry in the profile and adding it to the list. For example, to add the Basic Constraint Extension, add the default (which, in this example, is default #9):
9.default.class=com.netscape.cms.profile.def.BasicConstraintsExtDefault 9.default.name=Basic Constraint Extension Constraint 9.default.params.basicConstraintsCritical=true 9.default.params.basicConstraintsIsCA=true 9.default.params.basicConstraintsPathLen=2
Then, add the default number to the list of defaults to use the new default:list=2,4,5,6,7,8,
9
- Once the new profile is set up, then run
pkispawn
to create the new CA instance and go through the configuration wizard.
journal
, system
, and debug
log files for the instance to see what errors have occurred. This lists a couple of common errors, but there are many other possibilities.
Error #1: The LDAP database is not running.
journal
file that the instance is not ready:
java.io.IOException: CS server is not ready to serve. com.netscape.cms.servlet.base.CMSServlet.service(CMSServlet.java:409) javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
5558.main - [29/Oct/2010:11:13:40 PDT] [8] [3] In Ldap (bound) connection pool to host ca1 port 389, Cannot connect to LDAP server. Error: netscape.ldap.LDAPException: failed to connect to server ldap://ca1.example.com:389 (91)
debug
log:
[29/Oct/2010:11:39:10][main]: CMS:Caught EBaseException Internal Database Error encountered: Could not connect to LDAP server host ca1 port 389 Error netscape.ldap.LDAPException: failed to connect to server ldap://ca1:389 (91) at com.netscape.cmscore.dbs.DBSubsystem.init(DBSubsystem.java:262)
Error #2: A VPN is blocking access.
journal
log file for the instance's Tomcat service shows a series of connection errors that result in the HTTP 500 error:
May 26, 2010 7:09:48 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet services threw exception java.io.IOException: CS server is not ready to serve. at com.netscape.cms.servlet.base.CMSServlet.service(CMSServlet.java:441) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:542) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) at java.lang.Thread.run(Thread.java:636)
13.2. Java Console
Important
pkiconsole
is being deprecated.
pkiconsole
and I am seeing Java exceptions in stdout.
alternatives --config java
to see what JRE is selected. Red Hat Certificate System requires OpenJDK 1.7.
pkiconsole
, and I got Socket exceptions in stdout. Why?
server.xml
) or the wrong port was given to access the admin interface.
NSS Cipher Supported '0xff04' java.io.IOException: SocketException cannot read on socket at org.mozilla.jss.ssl.SSLSocket.read(SSLSocket.java:1006) at org.mozilla.jss.ssl.SSLInputStream.read(SSLInputStream.java:70) at com.netscape.admin.certsrv.misc.HttpInputStream.fill(HttpInputStream.java:303) at com.netscape.admin.certsrv.misc.HttpInputStream.readLine(HttpInputStream.java:224) at com.netscape.admin.certsrv.connection.JSSConnection.readHeader(JSSConnection.java:439) at com.netscape.admin.certsrv.connection.JSSConnection.initReadResponse(JSSConnection.java:430) at com.netscape.admin.certsrv.connection.JSSConnection.sendRequest(JSSConnection.java:344) at com.netscape.admin.certsrv.connection.AdminConnection.processRequest(AdminConnection.java:714) at com.netscape.admin.certsrv.connection.AdminConnection.sendRequest(AdminConnection.java:623) at com.netscape.admin.certsrv.connection.AdminConnection.sendRequest(AdminConnection.java:590) at com.netscape.admin.certsrv.connection.AdminConnection.authType(AdminConnection.java:323) at com.netscape.admin.certsrv.CMSServerInfo.getAuthType(CMSServerInfo.java:113) at com.netscape.admin.certsrv.CMSAdmin.run(CMSAdmin.java:499) at com.netscape.admin.certsrv.CMSAdmin.run(CMSAdmin.java:548) at com.netscape.admin.certsrv.Console.main(Console.java:1655)
/usr/bin/pkiconsole
file, and add the following lines:
============================================ ${JAVA} ${JAVA_OPTIONS} -cp ${CP} -Djava.util.prefs.systemRoot=/tmp/.java -Djava.util.prefs.userRoot=/tmp/java com.netscape.admin.certsrv.Console -s instanceID -D 9:all -a $1 ---------- note: "-D 9:all" is for verbose output on the console. ============================================
Part III. Configuring Certificate System
Chapter 14. The Certificate System Configuration Files
CS.cfg
file. This chapter covers basic information about and rules for editing the CS.cfg
file. This chapter also describes some other useful configuration files used by the subsystems, such as password and web services files.
14.1. File and Directory Locations for Certificate System Subsystems
pkispawn
command.
14.1.1. Instance-specific Information
Port Type | Port Number | Notes |
---|---|---|
Secure port | 8443 | Main port used to access PKI services by end-users, agents, and admins over HTTPS. |
Insecure port | 8080 | Used to access the server insecurely for some end-entity functions over HTTP. Used for instance to provide CRLs, which are already signed and therefore need not be encrypted. |
AJP port | 8009 | Used to access the server from a front end Apache proxy server through an AJP connection. Redirects to the HTTPS port. |
Tomcat port | 8005 | Used by the web server. |
14.1.2. CA Subsystem Information
Setting | Value |
---|---|
Main directory | /var/lib/pki/pki-tomcat/ca/ |
Configuration directory | /var/lib/pki/pki-tomcat/ca/conf/[a] |
Configuration file | /var/lib/pki/pki-tomcat/ca/conf/CS.cfg |
Subsystem certificates | CA signing certificate |
OCSP signing certificate (for the CA's internal OCSP service) | |
TLS server certificate | |
Audit log signing certificate | |
Subsystem certificate[b] | |
Security databases | /var/lib/pki/pki-tomcat/alias/[c] |
Log files | /var/log/pki/pki-tomcat/ca/logs/[d] |
Install log | /var/log/pki/pki-ca-spawn.date.log |
Uninstall log | /var/log/pki/pki-ca-destroy.date.log |
Audit logs | /var/log/pki/pki-tomcat/ca/signedAudit/ |
Profile files | /var/lib/pki/pki-tomcat/ca/profiles/ca/ |
Email notification templates | /var/lib/pki/pki-tomcat/ca/emails/ |
Web services files | Agent services: /var/lib/pki/pki-tomcat/ca/webapps/ca/agent/ |
Admin services: /var/lib/pki/pki-tomcat/ca/webapps/ca/admin/ | |
End user services: /var/lib/pki/pki-tomcat/ca/webapps/ca/ee/ | |
[a]
Aliased to /etc/pki/pki-tomcat/ca/
[b]
The subsystem certificate is always issued by the security domain so that domain-level operations that require client authentication are based on this subsystem certificate.
[c]
Note that all subsystem certificates are stored in the instance security database
[d]
Aliased to /var/lib/pki/pki-tomcat/ca
|
14.1.3. KRA Subsystem Information
Setting | Value |
---|---|
Main directory | /var/lib/pki/pki-tomcat/kra/ |
Configuration directory | /var/lib/pki/pki-tomcat/kra/conf/[a] |
Configuration file | /var/lib/pki/pki-tomcat/kra/conf/CS.cfg |
Subsystem certificates | Transport certificate |
Storage certificate | |
TLS server certificate | |
Audit log signing certificate | |
Subsystem certificate[b] | |
Security databases | /var/lib/pki/pki-tomcat/alias/[c] |
Log files | /var/lib/pki/pki-tomcat/kra/logs/ |
Install log | /var/log/pki/pki-kra-spawn-date.log |
Uninstall log | /var/log/pki/pki-kra-destroy-date.log |
Audit logs | /var/log/pki/pki-tomcat/kra/signedAudit/ |
Web services files | Agent services: /var/lib/pki/pki-tomcat/kra/webapps/kra/agent/ |
Admin services: /var/lib/pki/pki-tomcat/kra/webapps/kra/admin/ | |
[a]
Linked to /etc/pki/pki-tomcat/kra/
[b]
The subsystem certificate is always issued by the security domain so that domain-level operations that require client authentication are based on this subsystem certificate.
[c]
Note that all subsystem certificates are stored in the instance security database
|
14.1.4. OCSP Subsystem Information
Setting | Value |
---|---|
Main directory | /var/lib/pki/pki-tomcat/ocsp/ |
Configuration directory | /var/lib/pki/pki-tomcat/ocsp/conf/[a] |
Configuration file | /var/lib/pki/pki-tomcat/ocsp/conf/CS.cfg |
Subsystem certificates | Transport certificate |
Storage certificate | |
TLS server certificate | |
Audit log signing certificate | |
Subsystem certificate[b] | |
Security databases | /var/lib/pki/pki-tomcat/alias/[c] |
Log files | /var/lib/pki/pki-tomcat/ocsp/logs/ |
Install log | /var/log/pki/pki-ocsp-spawn-date.log |
Uninstall log | /var/log/pki/pki-ocsp-destroy-date.log |
Audit logs | /var/log/pki/pki-tomcat/ocsp/signedAudit/ |
Web services files | Agent services: /var/lib/pki/pki-tomcat/ocsp/webapps/ocsp/agent/ |
Admin services: /var/lib/pki/pki-tomcat/ocsp/webapps/ocsp/admin/ | |
[a]
Linked to /etc/pki/pki-tomcat/ocsp/
[b]
The subsystem certificate is always issued by the security domain so that domain-level operations that require client authentication are based on this subsystem certificate.
[c]
Note that all subsystem certificates are stored in the instance security database
|
14.1.5. TKS Subsystem Information
Setting | Value |
---|---|
Main directory | /var/lib/pki/pki-tomcat/tks/ |
Configuration directory | /var/lib/pki/pki-tomcat/tks/conf/[a] |
Configuration file | /var/lib/pki/pki-tomcat/tks/conf/CS.cfg |
Subsystem certificates | Transport certificate |
Storage certificate | |
TLS server certificate | |
Audit log signing certificate | |
Subsystem certificate[b] | |
Security databases | /var/lib/pki/pki-tomcat/alias/[c] |
Log files | /var/lib/pki/pki-tomcat/tks/logs/ |
Install log | /var/log/pki/pki-tks-spawn-date.log |
Uninstall log | /var/log/pki/pki-tks-destroy-date.log |
Audit logs | /var/log/pki/pki-tomcat/tks/signedAudit/ |
Web services files | Agent services: /var/lib/pki/pki-tomcat/tks/webapps/tks/agent/ |
Admin services: /var/lib/pki/pki-tomcat/tks/webapps/tks/admin/ | |
[a]
Linked to /etc/pki/pki-tomcat/tks/
[b]
The subsystem certificate is always issued by the security domain so that domain-level operations that require client authentication are based on this subsystem certificate.
[c]
Note that all subsystem certificates are stored in the instance security database
|
14.1.6. TPS Subsystem Information
Setting | Value |
---|---|
Main directory | /var/lib/pki/pki-tomcat/tps |
Configuration directory | /var/lib/pki/pki-tomcat/tps/conf/[a] |
Configuration file | /var/lib/pki/pki-tomcat/tps/conf/CS.cfg |
Subsystem certificates | Transport certificate |
Storage certificate | |
TLS server certificate | |
Audit log signing certificate | |
Subsystem certificate[b] | |
Security databases | /var/lib/pki/pki-tomcat/alias/[c] |
Log files | /var/lib/pki/pki-tomcat/tps/logs/ |
Install log | /var/log/pki/pki-tps-spawn-date.log |
Uninstall log | /var/log/pki/pki-tps-destroy-date.log |
Audit logs | /var/log/pki/pki-tomcat/tps/signedAudit/ |
Web services files | Agent services: /var/lib/pki/pki-tomcat/tps/webapps/tps/agent/ |
Admin services: /var/lib/pki/pki-tomcat/tps/webapps/tps/admin/ | |
[a]
Linked to /etc/pki/pki-tomcat/tps/
[b]
The subsystem certificate is always issued by the security domain so that domain-level operations that require client authentication are based on this subsystem certificate.
[c]
Note that all subsystem certificates are stored in the instance security database
|
14.1.7. Shared Certificate System Subsystem File Locations
Directory Location | Contents | |||||
---|---|---|---|---|---|---|
/var/lib/instance_name | Contains the main instance directory, which is the location for user-specific directory locations and customized configuration files, profiles, certificate databases, web files, and other files for the subsystem instance. | |||||
/usr/share/java/pki | Contains Java archive files shared by the Certificate System subsystems. Along with shared files for all subsystems, there are subsystem-specific files in subfolders:
| |||||
/usr/share/pki | Contains common files and templates used to create Certificate System instances. Along with shared files for all subsystems, there are subsystem-specific files in subfolders:
| |||||
/usr/bin | Contains the pkispawn and pkidestroy instance configuration scripts and tools (Java, native, and security) shared by the Certificate System subsystems. | |||||
/var/lib/tomcat5/common/lib | Contains links to Java archive files shared by local Tomcat web applications and shared by the Certificate System subsystems. Not used by the TPS subsystem. | |||||
/var/lib/tomcat5/server/lib | Contains links to Java archive files used by the local Tomcat web server and shared by the Certificate System subsystems. Not used by the TPS subsystem. | |||||
/usr/shared/pki | Contains the Java archive files used by the Tomcat server and applications used by the Certificate System instances. Not used by the TPS subsystem. | |||||
| Contains Apache modules used by the TPS subsystem. Not used by the CA, KRA, OCSP, or TKS subsystems. | |||||
| Mozilla LDAP SDK tools used by the TPS subsystem. Not used by the CA, KRA, OCSP, or TKS subsystems. |
14.2. CS.cfg Files
CS.cfg
.
CS.cfg
, an ASCII file, is created and populated with the appropriate configuration parameters when a subsystem is first installed. The way the instance functions are modified is by making changes through the subsystem console, which is the recommended method. The changes made in the administrative console are reflected in the configuration file.
CS.cfg
configuration file directly, and in some cases this is the easiest way to manage the subsystem.
14.2.1. Locating the CS.cfg File
CS.cfg
. The contents of the file for each subsystem instance is different depending on the way the subsystem was configured, additional settings and configuration (like adding new profiles or enabling self-tests), and the type of subsystem.
CS.cfg
file is located in the configuration directory for the instance.
/var/lib/pki/instance_name/subsystem_type/conf
/var/lib/pki/instance_name/ca/conf
14.2.2. Editing the Configuration File
Warning
CS.cfg
file:
- Stop the subsystem instance.
# pki-server stop instance_name
OR (if usingnuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
The configuration file is stored in the cache when the instance is started. Any changes made to the instance through the Console are changed in the cached version of the file. When the server is stopped or restarted, the configuration file stored in the cache is written to disk. Stop the server before editing the configuration file or the changes will be overwritten by the cached version when the server is stopped. - Open the
/var/lib/pki/instance_name/subsystem_type/conf
directory. - Open the
CS.cfg
file in a text editor. - Edit the parameters in the file, and save the changes.
- Start the subsystem instance.
# pki-server start instance_name
OR (if usingnuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
14.2.3. Overview of the CS.cfg Configuration File
CS.cfg
, which contains all of the settings for the instance, such as plug-ins and Java classes for configuration. The parameters and specific settings are different depending on the type of subsystem, but, in a general sense, the CS.cfg
file defines these parts of the subsystem instance:
- Basic subsystem instance information, like its name, port assignments, instance directory, and hostname
- Logging
- Plug-ins and methods to authenticate to the instance's user directory (authorization)
- The security domain to which the instance belongs
- Subsystem certificates
- Other subsystems used by the subsystem instance
- Database types and instances used by the subsystem
- Settings for PKI-related tasks, like the key profiles in the TKS, the certificate profiles in the CA, and the required agents for key recovery in the KRA
CS.cfg
file a basic parameter=value format.
#comment parameter=value
CS.cfg
file, many of the parameter blocks have descriptive comments, commented out with a pound (#) character. Comments, blank lines, unknown parameters, or misspelled parameters are ignored by the server.
Note
Example 14.1. Subsystem Authorization Settings
authz.impl._000=## authz.impl._001=## authorization manager implementations authz.impl._002=## authz.impl.BasicAclAuthz.class=com.netscape.cms.authorization.BasicAclAuthz authz.instance.BasicAclAuthz.pluginName=BasicAclAuthz
Note
- The values that need to be localized must be in UTF8 characters.
- The
CS.cfg
file supports forward slashes (/) in parameter values. If a back slash (\) is required in a value, it must be escaped with a back slash, meaning that two back slashes in a row must be used.
CS.cfg
file settings and parameters. These are not exhaustive references or examples of CS.cfg
file parameters. Also, the parameters available and used in each subsystem configuration file is very different, although there are similarities.
14.2.3.1. Basic Subsystem Settings
pkispawn
.
Example 14.2. Basic Instance Parameters for the CA: pkispawn file ca.cfg
[DEFAULT] pki_admin_password=Secret.123 pki_client_pkcs12_password=Secret.123 pki_ds_password=Secret.123 # Optionally keep client databases pki_client_database_purge=False # Separated CA instance name and ports pki_instance_name=pki-ca pki_http_port=18080 pki_https_port=18443 # This Separated CA instance will be its own security domain pki_security_domain_https_port=18443 [Tomcat] # Separated CA Tomcat ports pki_ajp_port=18009 pki_tomcat_server_port=18005
Important
CS.cfg
file, it is not set in the CS.cfg
. The server configuration is set in the server.xml
file.
CS.cfg
and server.xml
must match for a working RHCS instance.
14.2.3.2. Logging Settings
CS.cfg
file.
14.2.3.3. Authentication and Authorization Settings
CS.cfg
file sets how users are identified to access a subsystem instance (authentication) and what actions are approved (authorization) for each authenticated user.
SharedToken
that instantiates a JAVA plug-in named SharedSecret
.
auths.impl.SharedToken.class=com.netscape.cms.authentication.SharedSecret auths.instance.SharedToken.pluginName=SharedToken auths.instance.SharedToken.dnpattern= auths.instance.SharedToken.ldap.basedn=ou=People,dc=example,dc=org auths.instance.SharedToken.ldap.ldapauth.authtype=BasicAuth auths.instance.SharedToken.ldap.ldapauth.bindDN=cn=Directory Manager auths.instance.SharedToken.ldap.ldapauth.bindPWPrompt=Rule SharedToken auths.instance.SharedToken.ldap.ldapauth.clientCertNickname= auths.instance.SharedToken.ldap.ldapconn.host=server.example.com auths.instance.SharedToken.ldap.ldapconn.port=636 auths.instance.SharedToken.ldap.ldapconn.secureConn=true auths.instance.SharedToken.ldap.ldapconn.version=3 auths.instance.SharedToken.ldap.maxConns= auths.instance.SharedToken.ldap.minConns= auths.instance.SharedToken.ldapByteAttributes= auths.instance.SharedToken.ldapStringAttributes= auths.instance.SharedToken.shrTokAttr=shrTok
authz.impl.DirAclAuthz.class=com.netscape.cms.authorization.DirAclAuthz authz.instance.DirAclAuthz.ldap=internaldb authz.instance.DirAclAuthz.pluginName=DirAclAuthz authz.instance.DirAclAuthz.ldap._000=## authz.instance.DirAclAuthz.ldap._001=## Internal Database authz.instance.DirAclAuthz.ldap._002=## authz.instance.DirAclAuthz.ldap.basedn=dc=server.example.com-pki-ca authz.instance.DirAclAuthz.ldap.database=server.example.com-pki-ca authz.instance.DirAclAuthz.ldap.maxConns=15 authz.instance.DirAclAuthz.ldap.minConns=3 authz.instance.DirAclAuthz.ldap.ldapauth.authtype=SslClientAuth authz.instance.DirAclAuthz.ldap.ldapauth.bindDN=cn=Directory Manager authz.instance.DirAclAuthz.ldap.ldapauth.bindPWPrompt=Internal LDAP Database authz.instance.DirAclAuthz.ldap.ldapauth.clientCertNickname= authz.instance.DirAclAuthz.ldap.ldapconn.host=localhost authz.instance.DirAclAuthz.ldap.ldapconn.port=11636 authz.instance.DirAclAuthz.ldap.ldapconn.secureConn=true authz.instance.DirAclAuthz.ldap.multipleSuffix.enable=false
auths.impl.AgentCertAuth.class=com.netscape.cms.authentication.AgentCertAuthentication auths.instance.AgentCertAuth.agentGroup=Certificate Manager Agents auths.instance.AgentCertAuth.pluginName=AgentCertAuth
14.2.3.4. Subsystem Certificate Settings
ca.sslserver.cert=MIIDmDCCAoCgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBAMR4wHAYDVQQKExVSZWR... ca.sslserver.certreq=MIICizCCAXMCAQAwRjEeMBwGA1UEChMVUmVkYnVkY29tcHV0ZXIgRG9tYWluMSQwIgYDV... ca.sslserver.nickname=Server-Cert cert-pki-ca ca.sslserver.tokenname=Internal Key Storage Token
14.2.3.5. Settings for Required Subsystems
conn.
and then the subsystem type and number.
conn.ca1.clientNickname=subsystemCert cert-pki-tps conn.ca1.hostadminport=server.example.com:8443 conn.ca1.hostagentport=server.example.com:8443 conn.ca1.hostport=server.example.com:9443 conn.ca1.keepAlive=true conn.ca1.retryConnect=3 conn.ca1.servlet.enrollment=/ca/ee/ca/profileSubmitSSLClient conn.ca1.servlet.renewal=/ca/ee/ca/profileSubmitSSLClient conn.ca1.servlet.revoke=/ca/subsystem/ca/doRevoke conn.ca1.servlet.unrevoke=/ca/subsystem/ca/doUnrevoke conn.ca1.timeout=100
14.2.3.6. Database Settings
internaldb
parameters, except for the TPS which configured it in the tokendb
parameters with a lot of other configuration settings.
internaldb._000=## internaldb._000=## internaldb._001=## Internal Database internaldb._002=## internaldb.basedn=o=pki-tomcat-ca-SD internaldb.database=pki-tomcat-ca internaldb.maxConns=15 internaldb.minConns=3 internaldb.ldapauth.authtype=SslClientAuth internaldb.ldapauth.clientCertNickname=HSM-A:subsystemCert pki-tomcat-ca internaldb.ldapconn.host=example.com internaldb.ldapconn.port=11636 internaldb.ldapconn.secureConn=true internaldb.multipleSuffix.enable=false
14.2.3.7. Enabling and Configuring a Publishing Queue
Note

Figure 14.1. Enabling the Publishing Queue
14.2.3.7.1. Enabling and Configuring a Publishing Queue by editing the CS.cfg file
CS.cfg
file allows administrators to set other options for publishing, like the number of threads to use for publishing operations and the queue page size.
- Stop the CA server, so that you can edit the configuration files.
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- Open the CA's
CS.cfg
file.# vim /var/lib/pki/instance_name/ca/conf/CS.cfg
- Set the
ca.publish.queue.enable
to true. If the parameter is not present, then add a line with the parameter.ca.publish.queue.enable=true
- Set other related publishing queue parameters:
ca.publish.queue.maxNumberOfThreads
sets the maximum number of threads that can be opened for publishing operations. The default is 3.ca.publish.queue.priorityLevel
sets the priority for publishing operations. The priority value ranges from-2
(lowest priority) to2
(highest priority). Zero (0) is normal priority and is also the default.ca.publish.queue.pageSize
sets the maximum number of requests that can be stored in the publishing queue page. The default is 40.ca.publish.queue.saveStatus
sets the interval to save its status every specified number of publishing operations. This allows the publishing queue to be recovered if the CA is restarted or crashes. The default is 200, but any non-zero number will recover the queue when the CA restarts. Setting this parameter to 0 disables queue recovery.
ca.publish.queue.maxNumberOfThreads=1 ca.publish.queue.priorityLevel=0 ca.publish.queue.pageSize=100 ca.publish.queue.saveStatus=200
Note
Settingca.publish.queue.enable
to false andca.publish.queue.maxNumberOfThreads
to 0 disables both the publishing queue and using separate threads for publishing issued certificates. - Restart the CA server.
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
14.2.3.8. Settings for PKI Tasks
CS.cfg
file is used to configure the PKI tasks for every subsystem. The parameters are different for every single subsystem, without any overlap.
kra.noOfRequiredRecoveryAgents=1
CS.cfg
file for each subsystem to become familiar with its PKI task settings; the comments in the file are a decent guide for learning what the different parameters are.
- The CA configuration file lists all of the certificate profiles and policy settings, as well as rules for generating CRLs.
- The TPS configures different token operations.
- The TKS lists profiles for deriving keys from different key types.
- The OCSP sets key information for different key sets.
14.2.3.9. Changing DN Attributes in CA-Issued Certificates
Attribute | Value Type | Object Identifier |
---|---|---|
cn | DirectoryString | 2.5.4.3 |
ou | DirectoryString | 2.5.4.11 |
o | DirectoryString | 2.5.4.10 |
c | PrintableString , two-character | 2.5.4.6 |
l | DirectoryString | 2.5.4.7 |
st | DirectoryString | 2.5.4.8 |
street | DirectoryString | 2.5.4.9 |
title | DirectoryString | 2.5.4.12 |
uid | DirectoryString | 0.9.2342.19200300.100.1.1 |
mail | IA5String | 1.2.840.113549.1.9.1 |
dc | IA5String | 0.9.2342.19200300.100.1.2.25 |
serialnumber | PrintableString | 2.5.4.5 |
unstructuredname | IA5String | 1.2.840.113549.1.9.2 |
unstructuredaddress | PrintableString | 1.2.840.113549.1.9.8 |
X.500Name
attributes, or components, is as follows:
X500Name.NEW_ATTRNAME.oid=n.n.n.n X500Name.NEW_ATTRNAME.class=string_to_DER_value_converter_class
netscape.security.x509.AVAValueConverter
interface. The string-to-value converter class can be one of the following:
netscape.security.x509.PrintableConverter
converts a string to aPrintableString
value. The string must have only printable characters.netscape.security.x509.IA5StringConverter
converts a string to anIA5String
value. The string must have only IA5String characters.netscape.security.x509.DirStrConverter
converts a string to aDirectoryString
. The string is expected to be inDirectoryString
format according to RFC 2253.netscape.security.x509.GenericValueConverter
converts a string character by character in the following order, from the smallest characterset to the largest:- PrintableString
- IA5String
- BMPString
- Universal String
X500Name.MY_ATTR.oid=1.2.3.4.5.6 X500Name.MY_ATTR.class=netscape.security.x509.DirStrConverter
14.2.3.9.1. Adding New or Custom Attributes
- Stop the Certificate Manager.
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- Open the
/var/lib/pki/cs_instance/conf/
directory. - Open the configuration file,
CS.cfg
. - Add the new attributes to the configuration file.For example, to add three proprietary attributes,
MYATTR1
that is aDirectoryString
,MYATTR2
that is anIA5String
, andMYATTR3
that is aPrintableString
, add the following lines at the end of the configuration file:X500Name.attr.MYATTR1.oid=1.2.3.4.5.6 X500Name.attr.MYATTR1.class=netscape.security.x509.DirStrConverter X500Name.attr.MYATTR2.oid=11.22.33.44.55.66 X500Name.attr.MYATTR2.class=netscape.security.x509.IA5StringConverter X500Name.attr.MYATTR3.oid=111.222.333.444.555.666 X500Name.attr.MYATTR3.class=netscape.security.x509.PrintableConverter
- Save the changes, and close the file.
- Restart the Certificate Manager.
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
- Reload the enrollment page and verify the changes; the new attributes should show up in the form.
- To verify that the new attributes are in effect, request a certificate using the manual enrollment form.Enter values for the new attributes so that it can be verified that they appear in the certificate subject names. For example, enter the following values for the new attributes and look for them in the subject name:
MYATTR1: a_value MYATTR2: a.Value MYATTR3: aValue cn: John Doe o: Example Corporation
- Open the agent services page, and approve the request.
- When the certificate is issued, check the subject name. The certificate should show the new attribute values in the subject name.
14.2.3.9.2. Changing the DER-Encoding Order
DirectoryString
, so that the string is configurable since different clients support different encodings.
DirectoryString
is as follows:
X500Name.directoryStringEncodingOrder=encoding_list_separated_by_commas
PrintableString
IA5String
UniversalString
BMPString
UTF8String
X500Name.directoryStringEncodingOrder=PrintableString,BMPString
DirectoryString
encoding, do the following:
- Stop the Certificate Manager.
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- Open the
/var/lib/pki/cs_instance/conf/
directory. - Open the
CS.cfg
configuration file. - Add the encoding order to the configuration file.For example, to specify two encoding values,
PrintableString
andUniversalString
, and the encoding order isPrintableString
first andUniversalString
next, add the following line at the end of the configuration file:X500Name.directoryStringEncodingOrder=PrintableString,UniversalString
- Save the changes, and close the file.
- Start the Certificate Manager.
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
- To verify that the encoding orders are in effect, enroll for a certificate using the manual enrollment form. Use
John_Doe
for thecn
. - Open the agent services page, and approve the request.
- When the certificate is issued, use the
dumpasn1
tool to examine the encoding of the certificate.Thecn
component of the subject name should be encoded as aUniversalString
. - Create and submit a new request using
John Smith
for thecn
.Thecn
component of the subject name should be encoded as aPrintableString
.
14.2.3.10. Setting a CA to Use a Different Certificate to Sign CRLs
- Request a CRL signing certificate for the Certificate Manager.Alternatively, use a tool that is capable of generating keypairs, such as the
certutil
tool to generate a key pair, request a certificate for the key pair, and install the certificate in the Certificate Manager's certificate database. For more information about thecertutil
tool, see http://www.mozilla.org/projects/security/pki/nss/tools/. - When the certificate request has been created, submit it through the Certificate Manager end-entities page, selecting the right profile, such as the "Manual OCSP Manager Signing Certificate Enrollment" profile. The page has a URL in the following format:
https://hostname:port/ca/ee/ca
- After the request is submitted, log into the agent services page.
- Check the request for required extensions. The CRL signing certificate must contain the
Key Usage
extension with thecrlSigning
bit set. - Approve the request.
- After the CRL signing certificate is generated, install the certificate in the Certificate Manager's database through System Keys and Certificates in the console.
- Stop the Certificate Manager.
# pki-server stop instance_name
- Update the Certificate Manager's configuration to recognize the new key pair and certificate.
- Change to the Certificate Manager instance configuration directory.
# cd
/var/lib/pki/instance-name/ca/conf/
- Open the
CS.cfg
file and add the following lines:ca.crl_signing.cacertnickname=nickname cert-instance_ID ca.crl_signing.defaultSigningAlgorithm=signing_algorithm ca.crl_signing.tokenname=token_name
nickname is the name assigned to the CRL signing certificate.instance_ID is the name of the Certificate Manager instance.If the installed CA is a RSA-based CA, signing_algorithm can beSHA256withRSA
,SHA384withRSA
, orSHA512withRSA
. If the installed CA is an EC-based CA, signing_algorithm can beSHA256withEC
,SHA384withEC
,SHA512withEC
.token_name is the name of the token used for generating the key pair and the certificate. If the internal/software token is used, useInternal Key Storage Token
as the value.For example, the entries might look like this:ca.crl_signing.cacertnickname=crlSigningCert cert-pki-ca ca.crl_signing.defaultSigningAlgorithm=SHAMD512withRSA ca.crl_signing.tokenname=Internal Key Storage Token
- Save the changes, and close the file.
- Restart the Certificate Manager.
# pki-server restart instance_name
Now the Certificate Manager is ready to use the CRL signing certificate to sign the CRLs it generates.
14.2.3.11. Configuring CRL Generation from Cache in CS.cfg
- Stop the CA server.
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- Open the CA configuration directory.
# cd /var/lib/instance_name/conf/
- Edit the
CS.cfg
file, setting theenableCRLCache
andenableCacheRecovery
parameters to true:ca.crl.MasterCRL.enableCRLCache=true ca.crl.MasterCRL.enableCacheRecovery=true
- Start the CA server.
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
14.2.3.12. Configuring Update Intervals for CRLs in CS.cfg
ca.crl.MasterCRL.updateSchema=3 ca.crl.MasterCRL.enableDailyUpdates=true ca.crl.MasterCRL.enableUpdateInterval=true ca.crl.MasterCRL.autoUpdateInterval=240 ca.crl.MasterCRL.dailyUpdates=1:00 ca.crl.MasterCRL.nextUpdateGracePeriod=0
CS.cfg
file involves editing parameters.
Parameter | Description | Accepted Values |
---|---|---|
updateSchema | Sets the ratio for how many delta CRLs are generated per full CRL | An integer value |
enableDailyUpdates | Enables and disables setting CRL updates based on set times | true or false |
enableUpdateInterval | Enables and disables setting CRL updates based on set intervals | true or false |
dailyUpdates | Sets the times the CRLs should be updated | A comma-delimited list of times |
autoUpdateInterval | Sets the interval in minutes to update the CRLs | An integer value |
autoUpdateInterval.effectiveAtStart | Allows the system to attempt to use the new value of auto update immediately instead of waiting for the currently scheduled nextUpdate time | true or false |
nextUpdateGracePeriod | Adds the time in minutes to the CRL validity period to ensure that CRLs remain valid throughout the publishing or replication period | An integer value |
refreshInSec | Sets the periodicity in seconds of the thread on the clone OCSP to check LDAP for any updates of the CRL | An integer value |
Important
Procedure 14.1. How to configure CRL update intervals in CS.cfg
- Stop the CA server.
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- Change to the CA configuration directory.
# cd /var/lib/instance_name/conf/
- Edit the
CS.cfg
file, and add the following line to set the update interval:ca.crl.MasterCRL.updateSchema=3
The default interval is 1, meaning a full CRL is generated every time a CRL is generated. TheupdateSchema
interval can be set to any integer. - Set the update frequency, either by specifying a cyclical interval or set times for the updates to occur:
- Specify set times by enabling the
enableDailyUpdates
parameter, and add the desired times to thedailyUpdates
parameter:ca.crl.MasterCRL.enableDailyUpdates=true ca.crl.MasterCRL.enableUpdateInterval=false ca.crl.MasterCRL.dailyUpdates=0:50,04:55,06:55
This field sets a daily time when the CRL should be updated. To specify multiple times, enter a comma-separated list of times, such as01:50,04:55,06:55
. To enter a schedule for multiple days, enter a comma-separated list to set the times within the same day, and then a semicolon separated list to identify times for different days. For example, set01:50,04:55,06:55;02:00,05:00,17:00
to configure revocation on Day 1 of the cycle at 1:50am, 4:55am, and 6:55am and then Day 2 at 2am, 5am, and 5pm.Specify intervals by enabling theenableUpdateInterval
parameter, and add the required interval in minutes to theautoUpdateInterval
parameter:ca.crl.MasterCRL.enableDailyUpdates=false ca.crl.MasterCRL.enableUpdateInterval=true ca.crl.MasterCRL.autoUpdateInterval=240
- Set the following parameters depending on your environment:
- If you run a CA without an OCSP subsystem, set:
ca.crl.MasterCRL.nextUpdateGracePeriod=0
- If you run a CA with an OCSP subsystem, set:
ca.crl.MasterCRL.nextUpdateGracePeriod=time_in_minutes
Theca.crl.MasterCRL.nextUpdateGracePeriod
parameter defines the time in minutes, and the value must be big enough to enable the CA to propagate the new CRL to the OCSP. You must set the parameter to a non-zero value.If you additionally have OCSP clones in your environment, also set:ocsp.store.defStore.refreshInSec=time_in_seconds
Theocsp.store.defStore.refreshInSec
parameter sets the frequency in seconds with which the clone OCSP instances are informed of CRL updates through LDAP replication updates from the master OCSP instance.
See Table 14.9, “CRL Extended Interval Parameters” for details on the parameters. - Restart the CA server.
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
Note
enableDailyUpdates
and enableUpdateInterval
parameters to true, and add the required values to autoUpdateInterval
and dailyUpdates
:
ca.crl.MasterCRL.enableDailyUpdates=true ca.crl.MasterCRL.enableUpdateInterval=true ca.crl.MasterCRL.autoUpdateInterval=240 ca.crl.MasterCRL.dailyUpdates=1:00
dailyUpdates
value will be accepted when updating CRLs by interval.
dailyUpdates
value every 24 hours preventing schedule drift.
14.2.3.13. Changing the Access Control Settings for the Subsystem
authz.evaluateOrder
parameter in the CS.cfg
.
authz.evaluateOrder=deny,allow
web.xml
file (basic ACLs) or more complex ACLs can be accessed by checking the LDAP database. The authz.sourceType
parameter identifies what type of authorization to use.
authz.sourceType=web.xml
Note
CS.cfg
file to load the updated settings.
14.2.3.14. Configuring Ranges for Requests and Serial Numbers
/etc/pki/instance_name/subsystem/CS.cfg
file:
dbs.beginRequestNumber=1001001007001 dbs.endRequestNumber=11001001007000 dbs.requestIncrement=10000000000000 dbs.requestLowWaterMark=2000000000000 dbs.requestCloneTransferNumber=10000 dbs.requestDN=ou=ca, ou=requests dbs.requestRangeDN=ou=requests, ou=ranges dbs.beginSerialNumber=1001001007001 dbs.endSerialNumber=11001001007000 dbs.serialIncrement=10000000000000 dbs.serialLowWaterMark=2000000000000 dbs.serialCloneTransferNumber=10000 dbs.serialDN=ou=certificateRepository, ou=ca dbs.serialRangeDN=ou=certificateRepository, ou=ranges dbs.beginReplicaNumber=1 dbs.endReplicaNumber=100 dbs.replicaIncrement=100 dbs.replicaLowWaterMark=20 dbs.replicaCloneTransferNumber=5 dbs.replicaDN=ou=replica dbs.replicaRangeDN=ou=replica, ou=ranges dbs.ldap=internaldb dbs.newSchemaEntryAdded=true
Note
BigInteger
values for the ranges.
14.2.3.15. Setting Requirement for pkiconsole
to use TLS Client Certificate Authentication
Note
pkiconsole
is being deprecated.
CS.cfg
file of each subsystem, search for the authType
parameter and set it as follows:
authType=sslclientauth
14.3. Managing System Passwords
password.conf
file stores system passwords in plain text. However, some administrators prefer to remove the password file entirely to allow nuxwdog
to prompt for manual entry of each password initially and store for auto-restart in case of an unplanned shutdown.
password.conf
file. If the file exists, then it uses those passwords to connect to other services, such as the internal LDAP database. If that file does not exist, then the watchdog daemon prompts for all of the passwords required by the PKI server to start.
Note
password.conf
file is present, the subsystem assumes that all the required passwords are present and properly formatted in clear text. If any passwords are missing or wrongly formatted, then the system fails to start correctly.
cms.passwordlist
parameter in the CS.cfg
file:
cms.passwordlist=internaldb,replicationdb,CA LDAP Publishing cms.password.ignore.publishing.failure=true
Note
cms.password.ignore.publishing.failure
parameter allows a CA subsystem to start up successfully even if it has a failed connection to one of its LDAP publishing directories.
internal
for the NSS databaseinternaldb
for the internal LDAP databasereplicationdb
for the replication password- Any passwords to access external LDAP databases for publishing (CA only)
Note
If a publisher is configured after thepassword.conf
file is removed, nothing is written to thepassword.conf
file. Unlessnuxwdog
is configured, the server will not have access to the prompts for the new publishing password the next time that the instance restarts. - Any external hardware token passwords
internal
for the NSS databasetokendbpass
for the internal LDAP database- Any external hardware token passwords
password.conf
file (the default)- nuxwdog (watchdog)
14.3.1. Configuring the password.conf File
Note
nuxwdog
watchdog. Please refer to Section 14.3.2, “Using the Certificate System Watchdog Service” to enable nuxwdog
, as it is required for full compliance.
password.conf
, in the subsystem conf/
directory. Therefore, it is possible to modify them simply through a text editor.
- The bind password used by the Certificate System instance to access and update the internal database.
- The password to the HSM
- The bind password used by the Certificate System instance to access the authentication directory, in case of CMC Shared Token.
- The bind password used by the subsystem to access and update the LDAP publishing directory; this is required only if the Certificate System instance is configured for publishing certificates and CRLs to an LDAP-compliant directory.
- the bind password used by the subsystem to access its replication database.
- For a TPS instance, the bind password used to access and update the token database.
password.conf
file also contains the token passwords needed to open the private keys of the subsystem.
CS.cfg
file:
passwordFile=/var/lib/pki/instance_name/conf/password.conf
password.conf
file are in the following format:
name=password
internal=413691159497
hardware-name=password
hardware-NHSM-CONN-XC=MyHSM$S8cret
password.conf
file:
internal=376577078151 internaldb=secret12 replicationdb=1535106826 hardware-NHSM-CONN-XC=MyHSM$S8cret
14.3.2. Using the Certificate System Watchdog Service
- prompts for the relevant passwords during server startup and caches them.
- uses cached passwords in case of a failure when the server is automatically restarted due to a crash.
14.3.2.1. Enabling the Watchdog Service
- If you also want to use the Shared Secret feature on this host, enable the Shared Secret feature as described in Section 14.8.3, “Enabling the CMC Shared Secret Feature”.
- Backup the
server.xml
andpassword.conf
files from the/var/lib/pki/instance_name/conf/
directory. For example:# cp -p /var/lib/pki/instance_name/conf/server.xml /root/ # cp -p /var/lib/pki/instance_name/conf/password.conf /root/
- Stop and disable the Certificate System instance's service:
# systemctl stop pki-tomcatd@instance_name.service # systemctl disable pki-tomcatd@instance_name.service
- If you use a Hardware Security Module (HSM), enable the watchdog service to prompt for the password of the hardware token:
- Display the name of the hardware token:
# egrep "^hardware-" /var/lib/pki/instance_name/conf/password.conf hardware-HSM_token_name=password
The highlighted string in the previous example is the hardware token name. - Add the
cms.tokenList
parameter to the/var/lib/pki/instance_name/conf/ca/CS.cfg
file and set it to the name of the hardware token. For example:cms.tokenList=HMS_token_name
- Enable the watchdog configuration for the instance:
# pki-server instance-nuxwdog-enable instance_name
Alternatively, enable the watchdog for all instances:# pki-server nuxwdog-enable
For further details, see the pki-server-nuxwdog(8) man page. - By default,
nuxwdog
starts the server as the user configured in theTOMCAT_USER
variable in the/etc/sysconfig/pki-tomcat
file. Optionally, to modify the user and group:- Copy the watchdog
systemd
unit file of the instance to the/etc/systemd/system/
directory:# cp -p /usr/lib/systemd/system/instance_name-nuxwdog@.service /etc/systemd/system/
Note
Unit files in the/etc/systemd/system/
directory have a higher priority and are not replaced during updates. - Add the following entries to the
[Service]
section in the/etc/pki/instance_name/nuxwdog.conf
file:User new_user_name
- Reload the
systemd
configuration:# systemctl daemon-reload
- Enable the Certificate System service that uses the watchdog:
# systemctl enable pki-tomcatd-nuxwdog@instance_name.service
- To start the Certificate System instance, run the following command and enter the prompted passwords:
# systemctl start pki-tomcatd-nuxwdog@instance_name.service
14.3.2.2. Starting and Stopping Certificate System with the Watchdog Enabled
14.3.2.3. Verifying That the Certificate System Watchdog Service is Enabled
- Verify that the
pki-tomcatd-nuxwdog
service is enabled:# systemctl is-enabled pki-tomcatd-nuxwdog@instance_name.service enabled
- Verify that the
pki-tomcatd
service is disabled:
disabled#
systemctl is-disabled pki-tomcatd@instance_name.service
- In the
/etc/pki/instance_name/server.xml
file:- verify that the
passwordFile
parameter refers to theCS.cfg
file. For example:passwordFile="/var/lib/pki/instance_name/ca/CS.cfg"
- verify that the
passwordClass
parameter is set tocom.netscape.cms.tomcat.NuxwdogPasswordStore
:passwordClass="com.netscape.cms.tomcat.NuxwdogPasswordStore"
14.3.2.4. Disabling the Watchdog Service
- Stop and disable the Certificate System instance's service that uses the watchdog:
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service # systemctl disable pki-tomcatd-nuxwdog@instance_name.service
- Enable the regular service without watch dog for the instance:
# pki-server instance-nuxwdog-disable instance_name
- Disable the watchdog configuration for the instance:
# systemctl enable pki-tomcatd@instance_name.service
For further details, see the pki-server-nuxwdog(8) man page. - Restore the
password.conf
file to its original location. For example:# cp /root/password.conf.bak /var/lib/pki/instance_name/conf/password.conf
- Start the Certificate System instance:
# systemctl start pki-tomcatd@instance_name.service
14.4. Configuration Files for the Tomcat Engine and Web Services
/var/lib/pki/instance_name/conf/server.xml
provides the configuration for the Tomcat engine./usr/share/pki/subsystem_type/webapps/WEB-INF/web.xml
provides the configuration for the web services offered by this instance.
14.4.1. Tomcatjss
Note
server.xml
file found in the example pki-tomcat/conf
directory can be used to explain how Tomcatjss fits into the entire Certificate System ecosystem. Portions of the Connector entry for the secret port are shown below.
<Connector name="Secure" # Info about the socket itself port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" sslProtocol="SSL" scheme="https" secure="true" connectionTimeout="80000" maxHttpHeaderSize="8192" acceptCount="100" maxThreads="150" minSpareThreads="25" enableLookups="false" disableUploadTimeout="true" # Points to our tomcat jss implementation sslImplementationName="org.apache.tomcat.util.net.jss.JSSImplementation" # OCSP responder configuration can be enabled here enableOCSP="true" ocspCacheSize="1000" ocspMinCacheEntryDuration="60" ocspMaxCacheEntryDuration="120" ocspTimeout="10" # A collection of cipher related settings that make sure connections are secure. strictCiphers="true" # The "clientAuth" parameter configures the client authentication scheme # for this server socket. If you set "clientAuth" to "want", the client # authentication certificate is optional. Alternatively, set the # parameter to "required" to configure that the certificate is is mandatory. clientAuth="want" sslVersionRangeStream="tls1_1:tls1_2" sslVersionRangeDatagram="tls1_1:tls1_2" sslRangeCiphers="+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,+TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,+TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 serverCertNickFile="/var/lib/pki/pki-tomcat/conf/serverCertNick.conf" passwordFile="/var/lib/pki/pki-tomcat/conf/password.conf" passwordClass="org.apache.tomcat.util.net.jss.PlainPasswordFile" certdbDir="/var/lib/pki/pki-tomcat/alias" />
server.xml
configuration file for the Tomcat engine, there is this Connector configuration element that contains the pointer to the tomcatjss implementation, which can be plugged into the sslImplementation
property of this Connector object.
14.4.1.1. TLS Cipher Configuration
server.xml
file provide system-wide defaults when Red Hat Certificate system is acting as a client and as a server. This includes when acting as a server (for example, when serving HTTPS connections from Tomcat) and as a client (for example, when communicating with the LDAP server or when communicating with another Certificate System instance).
/var/lib/pki/instance_name/conf/server.xml
file. The following parameters control the ciphers offered:
strictCiphers
, when set totrue
, ensures that only ciphers with a+
sign in thesslRangeCiphers
are enabled.strictCiphers="true"
Do not change the default value (true
).sslVersionRangeStream
andsslVersionRangeDatagram
sets the TLS version the server supports. The following are the defaults of the parameters:sslVersionRangeStream="tls1_1:tls1_2" sslVersionRangeDatagram="tls1_1:tls1_2"
Do not change the default value of the parameters.sslRangeCiphers
sets which ciphers are enabled and disabled. Ciphers with a+
sign are enabled, ciphers with a-
sign disabled.Set RSA ciphers as below:sslRangeCiphers="+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA,+TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,+TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,+TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,+TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
Set EC ciphers as below:sslRangeCiphers="+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,+TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
For a list of allowed ciphers, see Section 3.1, “TLS, ECC, and RSA”.- If you install Certificate System with either LunaSA or nCipher Hardware Security Module (HSM) on systems with FIPS mode enabled for RSA, disable the following ciphers, as they are unsupported on HSMs in FIPS mode:
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
14.4.1.1.1. Client TLS cipher Configuration
ca.connector.KRA.clientCiphers=your selected cipher list
ca.connector.KRA.clientCiphers=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA
tps.connector.ca id.clientCiphers=your selected cipher list tps.connector.kra id.clientCiphers=your selected cipher list tps.connector.tks id.clientCiphers=your selected cipher list
tps.connector.ca1.clientCiphers=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA
14.4.1.2. Enabling Automatic Revocation Checking on the CA
revocationChecking.enabled
parameter.
revocationChecking.validityInterval
). If the CA has no way to re-verify a certificate status that is in cache, then there is a grace interval (revocationChecking.unknownStateInterval
) where the previously-cached status is still considered valid, even if it is outside the validity interval.
Note
revocationChecking.bufferSize
). If the buffer setting is missing or is set to zero, then no buffer is kept, which means that the results of revocation checks are not cached. In that case, all revocation checks are performed directly against the CA's internal database.
Note
CS.cfg
configuration file includes a parameter, jss.ocspcheck.enable
, which sets whether a Certificate Manager should use an OCSP to verify the revocation status of the certificate it receives as a part of SSL/TLS client or server authentication. Changing the value of this parameter to true
means the Certificate Manager reads the Authority Information Access extension in the certificate and verifies the revocation status of the certificate from the OCSP responder specified in the extension.
- Stop the subsystem instance.
# pki-server stop instance_name
- Open the
CS.cfg
file.# vim
/var/lib/pki/instance-name/ca/conf/CS.cfg
- Edit the revocation-related parameters.
auths.revocationChecking.bufferSize=50 auths.revocationChecking.ca=ca auths.revocationChecking.enabled=true auths.revocationChecking.unknownStateInterval=0 auths.revocationChecking.validityInterval=120
revocationChecking.ca
. Sets which service is providing the OCSP respsonse, a CA or an OCSP responder.revocationChecking.enabled
. Sets revocation checking.true
enables checking;false
disables checking. By default, the feature is enabled.revocationChecking.bufferSize
. Sets the total number of last-checked certificates the server should maintain in its cache. For example, if the buffer size is 2, the server retains the last two certificates checked in its cache. By default, the server caches the last 50 certificates.revocationChecking.unknownStateInterval
. Sets how frequently the server checks the revocation status. The default interval is 0 seconds. unknownStateInterval is a grace period in which cache result will be assumed to be true if CA has no means (no access to information allowing) to verify certificate statusrevocationChecking.validityInterval
. Sets how long the cached certificates are considered valid. Be judicious when choosing the interval. For example, if the validity period is 60 seconds, the server discards the certificates in its cache every minute and attempts to retrieve them from their source. The Certificate Manager uses its internal database to retrieve and verify the revocation status of the certificates. The default validity period is 120 seconds (2 minutes).
- Start the Certificate System instance.
# pki-server start instance_name
14.4.1.3. Enabling Certificate Revocation Checking for Subsystems
server.xml
file. The agent interface and the admin interface are configured separately, so both sections in the configuration should be edited.
Note
- Get the name of the OCSP signing certificate for the OCSP or CA which will be used to check certificate status. For example:
Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Certificate Authority - Example Domain CT,c,#
certutil -L -d
/etc/pki/instance-name/alias
ocspSigningCert cert-pki-ocsp CTu,Cu,Cu
subsystemCert cert-pki-ocsp u,u,u Server-Cert cert-pki-ocsp u,u,u auditSigningCert cert-pki-ocsp u,u,Pu - Open the
server.xml
file for the subsystem. For example:# vim
/etc/pki/instance-name/server.xml
- If the OCSP signing certificate is not present in the instance's security database, import it:
# certutil -d
/etc/pki/instance-name/alias
-A -n "ocspSigningCert cert-pki-ca" -t "C,," -a -i ocspCert.b64 - There are three critical parameters to enable OCSP checking:
enableOCSP
, which must be set totrue
to enable OCSP checking.This is a global setting; if it is set for one interface, then it applies to every interface for the instance. However, it must be set on the first interface listed in theserver.xml
file, which is usually the agent interface. Any setting on another interface is ignored.ocspResponderURL
, which gives the URL of the OCSP responder to send the OCSP requests.For an OCSP Manager, this can be another OCSP service in another OCSP or in a CA. For other subsystems, this always points to an external OCSP service in an OCSP or a CA.ocspResponderCertNickname
, which gives the signing certificate to use to sign the response; for a CA OCSP service, this is the CA's OCSP signing certificate, and for an OCSP responder, it is an OCSP signing certificate.
Other parameters can be used to define the OCSP communication. All of the OCSP checking parameters are listed in Table 14.10, “OCSP Parameters for server.xml”.There are two different sections in the file for the agent and administrator interfaces. The OCSP parameters need to be added to both sections to enable and configure OCSP checking. For example:Example 14.3. OCSP Settings for an Agent Interface
<Connector name="Agent" port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="true" sslProtocol="SSL" sslOptions="ssl2=true,ssl3=true,tls=true" ssl3Ciphers="-SSL3_FORTEZZA_DMS_WITH_NULL_SHA, ..." tls3Ciphers="-SSL3_FORTEZZA_DMS_WITH_NULL_SHA, ..." SSLImplementation="org.apache.tomcat.util.net.jss.JSSImplementation"
enableOCSP="true"
ocspResponderURL="http://server.example.com:8443/ca/ocsp"
ocspResponderCertNickname="ocspSigningCert cert-pki-ca 102409a"
ocspCacheSize="1000"
ocspMinCacheEntryDuration="60"
ocspMaxCacheEntryDuration="120"
ocspTimeout="10"
debug="true" serverCertNickFile="/etc/pki/instance-name/serverCertNick.conf" passwordFile="/etc/pki/instance-name/password.conf" passwordClass="org.apache.tomcat.util.net.jss.PlainPasswordFile" certdbDir="/etc/pki/instance-name/alias"/> - If the given OCSP service is not the CA, then the OCSP service's signing certificate must be imported into the subsystem's NSS database. This can be done in the console or using
certutil
; both options are covered in Installing Certificates in the Certificate System Database in the Red Hat Certificate System Administration Guide. - Restart the subsystem.
# pki-server restart instance_name
Parameter | Description |
---|---|
enableOCSP | Enables (or disables) OCSP checking for the subsystem. |
ocspResponderURL | Sets the URL where the OCSP requests are sent.
For an OCSP Manager, this can be another OCSP service in another OCSP or in a CA. For a TKS or KRA, this always points to an external OCSP service in an OCSP or a CA.
|
ocspResponderCertNickname | Sets the nickname of the signing certificate for the responder, either the OCSP signing certificate or the CA's OCSP signing certificate. The certificate must be imported into the subsystem's NSS database and have the appropriate trust settings set. |
ocspCacheSize | Sets the maximum number of cache entries. |
ocspMinCacheEntryDuration | Sets minimum seconds before another fetch attempt can be made. For example, if this is set to 120, then the validity of a certificate cannot be checked again until at least 2 minutes after the last validity check. |
ocspMaxCacheEntryDuration | Sets the maximum number of seconds to wait before making the next fetch attempt. This prevents having too large a window between validity checks. |
ocspTimeout | Sets the timeout period, in seconds, for the OCSP request. |
14.4.1.4. Adding an AIA Extension to an Enrollment Profile
policyset.cmcUserCertSet.5.default.params.authInfoAccessADLocation_0=http://example.com:8080/ocsp/ee/ocsp
14.4.2. Session Timeout
- TLS session timeout
- HTTP session timeout
Note
14.4.2.1. TLS Session Timeout
ACCESS_SESSION_ESTABLISH
audit event with Outcome=Success
when the connection is created. If the connection fails to be created, the server will generate an ACCESS_SESSION_ESTABLISH
audit event with Outcome=Failure
. When the connection is closed, the server will generate an ACCESS_SESSION_TERMINATED
audit event.
keepAliveTimeout
parameter in the Secure
<Connector> element in the /etc/pki/<instance>/server.xml
file:
... <Server> <Service> <Connector name="Secure" ... keepAliveTimeout="300000" ... /> </Service> </Server> ...
/etc/pki/<instance>/server.xml
file and then restart the server.
Note
14.4.2.2. HTTP Session Timeout
Note
<session-timeout>
value in this section to match the keepAliveTimeout
value in Section 14.4.2.1, “TLS Session Timeout”. For example if keepAliveTimeout
was set to 300000 (5 minutes), then set <session-timeout>
to 30.
<session-timeout>
element in the /etc/pki/<instance>/web.xml
file:
... <web-app> <session-config> <session-timeout>30</session-timeout> </session-config> </web-app> ...
/etc/pki/<instance>/web.xml
file and then restart the server.
Note
14.4.2.3. Session Timeout for PKI Web UI
14.4.2.4. Session Timeout for PKI Console
14.4.2.5. Session Timeout for PKI CLI
14.5. web.xml
14.5.1. Removing Unused Interfaces from web.xml (CA Only)
web.xml
file. However, since these features are deprecated and no longer in use, then they can be removed from the CA configuration to increase security.
- Stop the CA.
# pki-server stop instance_name
OR (if usingnuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- Open the web files directory for the CA. For example:
# cd /var/lib/pki/instance_name/ca/webapps/ca/WEB-INF
- Back up the current
web.xml
file.# cp web.xml web.xml.servlets
- Edit the
web.xml
file and remove the entire<servlet>
entries for each of the following deprecated servlets:- caadminEnroll
- cabulkissuance
- cacertbasedenrollment
- caenrollment
- caProxyBulkIssuance
For example, remove thecaadminEnroll
servlet entry:<servlet> <servlet-name> caadminEnroll </servlet-name> <servlet-class> com.netscape.cms.servlet.cert.EnrollServlet </servlet-class> <init-param><param-name> GetClientCert </param-name> <param-value> false </param-value> </init-param> <init-param><param-name> successTemplate </param-name> <param-value> /admin/ca/EnrollSuccess.template </param-value> </init-param> <init-param><param-name> AuthzMgr </param-name> <param-value> BasicAclAuthz </param-value> </init-param> <init-param><param-name> authority </param-name> <param-value> ca </param-value> </init-param> <init-param><param-name> interface </param-name> <param-value> admin </param-value> </init-param> <init-param><param-name> ID </param-name> <param-value> caadminEnroll </param-value> </init-param> <init-param><param-name> resourceID </param-name> <param-value> certServer.admin.request.enrollment </param-value> </init-param> <init-param><param-name> AuthMgr </param-name> <param-value> passwdUserDBAuthMgr </param-value> </init-param> </servlet>
- After removing the servlet entries, remove the corresponding
<servlet-mapping>
entries.<servlet-mapping> <servlet-name> caadminEnroll </servlet-name> <url-pattern> /admin/ca/adminEnroll </url-pattern> </servlet-mapping>
- Remove three
<filter-mapping>
entries for an end-entity request interface.<filter-mapping> <filter-name> EERequestFilter </filter-name> <url-pattern> /certbasedenrollment </url-pattern> </filter-mapping> <filter-mapping> <filter-name> EERequestFilter </filter-name> <url-pattern> /enrollment </url-pattern> </filter-mapping> <filter-mapping> <filter-name> EERequestFilter </filter-name> <url-pattern> /profileSubmit </url-pattern> </filter-mapping>
- Start the CA again.
# pki-server start instance_name
OR (if usingnuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
14.6. Customizing Web Services
14.6.1. Customizing Subsystem Web Applications
- HTML pages containing texts, JavaScript codes, page layout, CSS formatting, and so on
- A
web.xml
file, which defines servlets, paths, security constraints, and other - Links to PKI libraries.
/var/lib/pki/pki-tomcat/conf/Catalina/localhost/
direcotry, for example, the ca.xml
file:
<Context docBase="/usr/share/pki/ca/webapps/ca" crossContext="true" allowLinking="true"> ... </Context>
docBase
points to the location of the default web application directory, /usr/share/pki/
.
webapps
directory:
$ cp -r /usr/share/pki/ca/webapps/ca /var/lib/pki/pki-tomcat/webapps
docBase
to point to the custom web application directory relative from the webapps
directory:
<Context docBase="ca" crossContext="true" allowLinking="true"> ... </Context>
docBase
and delete the custom web application directory:
$ rm -rf /var/lib/pki/pki-tomcat/webapps/ca
14.6.2. Customizing the Web UI Theme
- CSS files, which determine the global appearance
- Image files including logo, icons, and other
- Branding properties, which determine the page title, logo link, title color, and other.
pki.xml
context file in the /var/lib/pki/pki-tomcat/conf/Catalina/localhost/
directory:
<Context docBase="/usr/share/pki/common-ui" crossContext="true" allowLinking="true"> ... </Context>
/usr/share/pki/
.
pki
directory in the instance's webapps
directory:
$ cp -r /usr/share/pki/common-ui /var/lib/pki/pki-tomcat/webapps/pki
docBase
to point to the custom theme directory relative from the webapps
directory:
<Context docBase="pki" crossContext="true" allowLinking="true"> ... </Context>
docBase
and delete the custom theme directory:
$ rm -rf /var/lib/pki/pki-tomcat/webapps/pki
14.6.3. Customizing TPS Token State Labels
/usr/share/pki/tps/conf/token-states.properties
file and described in Section 2.5.2.4.1.4, “Token State and Transition Labels”.
$ cp /usr/share/pki/tps/conf/token-states.properties /var/lib/pki/pki-tomcat/tps/conf
$ rm /var/lib/pki/pki-tomcat/tps/conf/token-states.properties
14.7. Using an Access Banner
Application | When the banner is displayed |
---|---|
PKI Console |
|
Web interface |
|
pki command-line utility |
|
[a]
For details about changing the session timeout, see Section 14.4.2, “Session Timeout”.
|
Example 14.4. When the Access Banner is Displayed
pki
utility:
$ pki cert-show 0x1
WARNING! Access to this service is restricted to those individuals with specific permissions. If you are not an authorized user, disconnect now. Any attempts to gain unauthorized access will be prosecuted to the fullest extent of the law. Do you want to proceed (y/N)? y
-----------------
Certificate "0x1"
-----------------
Serial Number: 0x1
Issuer: CN=CA Signing Certificate,OU=instance_name,O=EXAMPLE
Subject: CN=CA Signing Certificate,OU=instance_name,O=EXAMPLE
Status: VALID
Not Before: Mon Feb 20 18:21:03 CET 2017
Not After: Fri Feb 20 18:21:03 CET 2037
14.7.1. Enabling an Access Banner
/etc/pki/instance_name/banner.txt
file and enter the text to displayed.
Important
/etc/pki/instance_name/banner.txt
file must use the UTF-8 format. To validate, see Section 14.7.4, “Validating the Banner”.
14.7.2. Disabling an Access Banner
/etc/pki/instance_name/banner.txt
file. For example:
# mv /etc/pki/instance_name/banner.txt /etc/pki/instance_name/banner.txt.UNUSED
14.7.3. Displaying the Banner
# pki-server banner-show -i instance_name
14.7.4. Validating the Banner
# pki-server banner-validate -i instance_name --------------- Banner is valid ---------------
14.8. Configuration for CMC
14.8.1. Understanding How CMC Works
- Issuing Certificates Using CMC in the Red Hat Certificate System Administration Guide.
- Making Rules for Issuing Certificates (Certificate Profiles) in the Red Hat Certificate System Administration Guide.
14.8.2. Enabling the PopLinkWittnessV2
Feature
/var/lib/pki/instance_name/ca/conf/CS.cfg
file:
cmc.popLinkWitnessRequired=true
14.8.4. Enabling CMCRevoke for the Web User Interface
CMCRevoke
utility to create revocation requests to be submitted through the web UI, add the following setting to the /var/lib/pki/instance_name/ca/conf/CS.cfg
file:
cmc.bypassClientAuth=true
14.9. Configuration for Server-Side Key Generation for Certificate Enrollment using the CA EE Portal
14.9.1. Installation Configuration
Note
Note
- First, stop the CA:
# systemctl stop pki-tomcatd@ca_instance_name.service
For example:# systemctl stop pki-tomcatd@pki-ca.service
- Add the below line to the CA's
CS.cfg
:ca.connector.KRA.transportCertNickname=KRA transport cert
For example:ca.connector.KRA.transportCertNickname=transportCert cert-topology-02-KRA KRA
where topology-02-KRA is the name of the KRA's instance. - Find and export the KRA transport certificate into a file:
# grep "kra.transport.cert=" /var/lib/pki/kra_instance_name/kra/conf/CS.cfg | sed 's/kra.transport.cert=//' > kra transport cert file
For example:# grep "kra.transport.cert=" /var/lib/pki/pki-kra/kra/conf/CS.cfg | sed 's/kra.transport.cert=//' > /tmp/kraTransport.cert
- 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:
grep "ca.connector.KRA.transportCertNickname" /var/lib/pki/ca_instance_name/ca/conf/CS.cfg
For example:# grep "ca.connector.KRA.transportCertNickname" /var/lib/pki/pki-ca/ca/conf/CS.cfg ca.connector.KRA.transportCertNickname=KRA transport cert
- Import the certificate using the nickname listed from the previous step:
certutil -d /var/lib/pki/ca_instance_name/alias -A -t “,,” -n transportNickName -i kra transport cert file
For example:# certutil -d /var/lib/pki/pki-ca/alias -A -t “,,” -n "KRA transport cert" -i /tmp/kraTransport.cert
- Start the CA:
# systemctl start pki-tomcatd@ca_instance_name.service
For example:# systemctl start pki-tomcatd@pki-ca.service
14.9.2. Profile Configuration
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.
Input
input.i1.class_id=serverKeygenInputImpl
Output
output.o1.class_id=pkcs12OutputImpl
Policyset
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
Authentication
- caServerKeygen_UserCert.cfgcontains an empty value to "auth.class_id=", meaning that enrollment requests through this profile will require approval from a CA agent.
- caServerKeygen_DirUserCert.cfgcontains "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: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
14.10. Configuring Certificate Transparency
Important
CS.cfg
file located in the /var/lib/pki/instance name/ca/conf/CS.cfg
directory.
14.10.1. ca.certTransparency.mode
ca.certTransparency.mode
specifies one of three Certificate Transparency modes:
- disabled: issued certs will not carry the SCT extension
- enabled: issued certs will carry the SCT extension
- perProfile: certs enrolled through those profiles that contain the following policyset will carry the SCT extension: SignedCertificateTimestampListExtDefaultImpl
14.10.2. ca.certTransparency.log.num
ca.certTransparency.log.num
specifies the total number of CT logs defined in the configuration.
Note
ca.certTransparency.log.<id>.enable
in Section 14.10.3, “ca.certTransparency.log.<id>.*”.
14.10.3. ca.certTransparency.log.<id>.*
ca.certTransparency.log.<id>.*
specifies information pertaining to the log <id>, where <id> is a unique id you assign to the CT log server to differentiate it from other CT logs.
ca.certTransparency.log.<id>.
and belong to the <id>:
- ca.certTransparency.log.<id>.enable specifies whether the <id> CT log is enabled (true) or disabled (false).
- ca.certTransparency.log.<id>.pubKey contains the base64 encoding of the CT log's public key.
- ca.certTransparency.log.<id>.url contains the base64 encoding of the CT log url.
- ca.certTransparency.log.<id>.version specifies the CT version number that the CT supports (as well as the CT log server); it currently only supports version 1.
Chapter 15. Managing Certificate/Key Crypto Token
About Crypto Tokens
15.1. About certutil
and PKICertImport
certutil
command is provided by Network Security Services (NSS). certutil
is used for validating and importing certificates. A basic overview of how we use certutil
is presented below, however, PKICertImport
is our wrapper script of choice for safely validating and importing certificates. Using certutil
to do so requires multiple command invocations and correct usage is outside the scope of this documentation.
15.1.1. certutil
Basic Usage
certutil [command] [options]
certutil
invocation takes a command flag, usually denoted by a capital letter, and a series of options which control what the command does. If an option takes a value, that value is named between "<" and ">" symbols.
15.1.2. PKICertImport Basic Usage
PKICertImport [options]
PKICertImport
invocation takes a series of options to validate and import a specified certificate. Unlike the broad use cases of certutil
, PKICertImport
is only focused on safely importing and validating certificates. See Section 15.1.4, “Common certutil
and PKICertImport
Options” for more information about available options.
Note
PKICertImport
prompts for the NSS DB and/or HSM passwords multiple times throughout the course of its execution. This is expected as PKICertImport
has to interact with the NSS DB multiple times. To avoid having to input the NSS DB password repetitively, specify a password file via -f <filename>
. When done, be sure to delete the password file.
15.1.3. certutil
Common Commands
certutil
and provide a brief overview of several common commands. PKICertImport
is not compatible with nor require these command flags.
certutil -A
-A
command denotes "adding" a certificate. It requires a certificate to import (-i
), a nickname (-n
) for that certificate, and a series of trust flags (-t
) for the certificate.
certutil -V
-V
command denotes "verifying" a certificate. It requires a certificate nickname to validate (-n
) and a type of verification (-u
) to perform.
certutil -D
-D
command denotes "deleting" a certificate. It requires a certificate nickname (-n
) to remove.
certutil -M
-M
command denotes "modifying" a certificate. It requires a certificate nickname (-n
) to modify, and a series of trust flags (-t
) to give the certificate.
certutil -L
-L
command denotes "listing" a certificate or all certificates. If given the nickname option (-n
), it will list detailed information about that certificate, else if omitted, it will list general information about all certificates present.
certutil -L
would show each certificate by its nickname along with its trust info. For example:
Certificate Nickname
|
Trust Attributes |
---|---|
caSigningCert pki-ca1
|
CT, C, C
|
Note
certutil -L
correspond to what is specified with the -t
option.
certutil -L
does not modify the database, and can thus be executed safely as many times as desired.
15.1.4. Common certutil
and PKICertImport
Options
PKICertImport
as well.
-n <nickname>
-n <nickname>
option specifies the nickname for a certificate. This can be any text and is only used as a reference to the certificate. It MUST be unique.
-d <directory>
-d <directory>
option specifies the path to the NSS DB directory in use. We usually assume you are already in this directory and use "." to refer to the current directory.
-t <trust>
-t <trust>
option specifies the trust level for the certificate.
- trust for TLS
- trust for email
- trust for object signing
c
, C
, and T
.
c
states that this certificate should be a Certificate Authority (CA).C
states that this is a trusted certificate authority for signing server certificates (C
implies lowercasec
, hence you do not need to specify both).T
states that this certificate is a trusted authority for signing client certificates (T
implies lowercasec
, hence you do not need to specify bothT
andc
).
-t CT,C,c
means that the certificate is trusted for signing client and server TLS certificates, signing server email certificates (S/MIME), and is a valid CA for object signing (though untrusted).
- This ensures that, if this certificate signs another certificate, which in turn is used for object signing, it will be deemed invalid.
-t ,,
.
certutil -L -d
- Each certificate's nickname will be listed and the trust flags will be specified at the end of the line.
-h
option.
man certutil
command on a system with certutil properly installed.
-h <HSM>
-h <HSM>
option specifies the name of the HSM to perform operations on.
-h
option is incompatible with the -t
option, as HSMs cannot store trust. Only an NSS DB can store trust, so using the certutil -A
command or the certutil -M
command in conjunction with -h <HSM>
will fail. Instead, specify the desired trust level on a separate certutil -M
command without the -h
option.
-e
-e
option specifies that the validity of the signature is checked as well, when used in conjunction with the certutil -V
command. PKICertImport
always performs the certificate signature validation and does not understand the -e
option.
-a
-a
option specifies that the key in question is in PEM (ASCII) format.
-i <certificate>
-i <certificate>
option specifies the path to the certificate. This is only used in the certutil -A
command to specify the path to the certificate to import.
-u <usage>
-u <usage>
option specifies that usage of the certificate to verify when used in conjunction with the certutil -V
command.
-u C
stands for verify a client TLS certificate. Note that this mostly accepts any certificate, but will check expiration date and signature.-u V
stands for verify a server TLS certificate. Note that this will reject CA certificates and will check expiration date and signature.-u L
stands for verify a CA TLS certificate. Note that this will validate trust flags (to see ifc
is present) and will check key usage to ensure that the key is a CA key. This also checks expiration and signatures.-u O
stands for verify a OCSP status responder certificate. Note that this checks expiry and signatures.-u J
stands for verify an object signing certificate. Note that this checks expiry and signatures.
c
flag for an CA TLS certificate), certutil -V
will give incorrect results.
Note
man certutil
command on a system with certutil properly installed.
15.2. Importing a Root Certificate
cd
/path/to/nssdb
ca_root.crt
. Please substitute the correct name and path to this file as appropriate for your scenario.
certutil
and PKICertImport
options used below, see Section 15.1, “About certutil
and PKICertImport
”.
To import the root certificate:
- Execute
PKICertImport -d . -n "CA Root" -t "CT,C,C" -a -i ca_root.crt -u L
command.This command validates and imports the root certificate into your NSS DB. The validation succeeds when no error message is printed and the return code is 0. To check the return code, executeecho $?
immediately after executing the previous command above. In most cases, a visual error message is printed. The certificate usually fails to validate because it is expired or because it is not a CA certificate. Therefore, make sure your certificate file is correct and up-to-date. Contact the issuer and ensure that all intermediate and root certificates are present on your system.
15.3. Importing an Intermediate Certificate Chain
cd
/path/to/nssdb
ca_sub_<num>.crt
(for example ca_sub_1.crt
, ca_sub_2.crt
, and so on). Substitute names and paths for your certificates as appropriate to your deployment.
Note
fullchain.crt
, fullchain.pem
, or similar and it contains multiple certificates, split it into the above format by copying each block (between and including the ----BEGIN CERTIFICATE----- and an -----END CERTIFICATE----- markers) to its own file. The first ones should be named ca_sub_<num>.crt
and the last will be your server cert named service.crt
. Server certificates are discussed in later sections.
certutil
and PKICertImport
options used below, see Section 15.1, “About certutil
and PKICertImport
”.
For every intermediate certificate in the chain:
- Execute
PKICertImport -d . -n "CA Sub $num" -t "CT,C,C" -a -i ca_sub_$num.crt -u L
This command validates and imports the Intermediate CA certificate into your NSS DB. The validation succeeds when no error message is printed and the return code is 0. To check the return code, executeecho $?
immediately after executing the previous command above. In most cases, a visual error message is printed. If the validation does not succeed, contact the issuer and ensure that all intermediate and root certificates are present on your system.
15.4. Importing a certificate into an HSM
cd
/path/to/nssdb for examplecd /var/lib/pki/pki-ca/alias
- For TLS server certs for all PKI substems, follow the server certificate steps.
- For any subsystem's audit signing cert, follow the steps below for validating an object Signing certificate.
- For the CA subsystem's signing cert, follow the steps above for importing and validating an intermediate certificate chain, but do so only with the
caSigningCert
. - For the CA subsystem's OCSP signing cert, follow the steps below for validating an OCSP certificate.
- For all other system certs of the PKI subsystems, follow the Client Certificate steps.
certutil
and PKICertImport
options used below, see Section 15.1, “About certutil
and PKICertImport
”.
To import a server certificate on the HSM:
- Execute
PKICertImport -d . -h HSM -n "host.name.example.com" -t ",," -a -i service.crt -u V
This command validates and imports the server certificate onto the HSM. The validation succeeds when no error message is printed and the return code is 0. To check the return code, executeecho $?
immediately after executing the previous command above. In most cases, a visual error message is printed. The certificate usually fails to validate due to expiry of a parent certificate or a missing CA trust chain (such as a missing intermediate certificate or a missing CA Root). If the validation does not succeed, contact the issuer and ensure that all intermediate and root certificates are present on your system.
To import a client certificate on the HSM:
- Execute
PKICertImport -d . -h HSM -n "client name" -t ",," -a -i client.crt -u C
This command validates and imports the client certificate onto the HSM. The validation succeeds when no error message is printed and the return code is 0. To check the return code, executeecho $?
immediately after executing the previous command above. In most cases, a visual error message is printed. If the validation does not succeed, contact the issuer and ensure that all intermediate and root certificates are present on your system.
To import an object signing certificate on the HSM:
- Execute
PKICertImport -d . -h HSM -n "certificate name" -t ",,P" -a -i objectsigning.crt -u J
This command validates and imports the object signing certificate onto the HSM. The validation succeeds when no error message is printed and the return code is 0. To check the return code, executeecho $?
immediately after executing the previous command above. In most cases, a visual error message is printed. If the validation does not succeed, contact the issuer and ensure that all intermediate and root certificates are present on your system.
To import an OCSP response signing certificate on the HSM:
- Execute
PKICertImport -d . -h HSM -n "certificate name" -t ",," -a -i ocsp.crt -u O
This command validates and imports the OCSP responder certificate onto the HSM. The validation succeeds when no error message is printed and the return code is 0. To check the return code, executeecho $?
immediately after executing the previous command above. In most cases, a visual error message is printed. If the validation does not succeed, contact the issuer and ensure that all intermediate and root certificates are present on your system.
15.5. Importing a certificate into an NSS Database
- For any subsystem's
auditSigningCert
, please follow the steps below for validating an object Signing certificate. - For the CA subsystem's
caSigningCert
, please follow the steps above for importing and validating an intermediate certificate chain, but do so only with the caSigningCert. - For the CA subsystem's
ocspSigningCert
, please follow the steps below for validating an OCSP certificate. - For user's client or S/MIME certificate, follow the Client Certificate steps.
certutil
and PKICertImport
options used below, see Section 15.1, “About certutil
and PKICertImport
”.
Importing a Client Certificate Into the NSS Database
- Change into the NSS database directory. For example:
# cd /path/to/nssdb/
- Import and trust the root certificate, if it is not already imported and trusted. For details, see Section 15.2, “Importing a Root Certificate”.
- Import and validate the intermediate certificates, if not already imported and validated. For details, see Section 15.3, “Importing an Intermediate Certificate Chain”.
- Validate and import the client certificate:
#
PKICertImport -d . -n "client name" -t ",," -a -i client.crt -u C
The validation succeeds when no error message is printed and the return code is 0. To check the return code, executeecho $?
immediately after executing the previous command above. In most cases, a visual error message is printed. If the validation does not succeed, contact the issuer and ensure that all intermediate and root certificates are present on your system.
Importing an Object Signing Certificate
- Change into the NSS database directory. For example:
# cd /path/to/nssdb/
- Import and trust the root certificate, if it is not already imported and trusted. For details, see Section 15.2, “Importing a Root Certificate”.
- Import and validate the intermediate certificates, if not already imported and validated. For details, see Section 15.3, “Importing an Intermediate Certificate Chain”.
- Validate and import the object signing certificate:
#
PKICertImport -d . -n "certificate name" -t ",,P" -a -i objectsigning.crt -u J
The validation succeeds when no error message is printed and the return code is 0. To check the return code, executeecho $?
immediately after executing the previous command above. In most cases, a visual error message is printed. If the validation does not succeed, contact the issuer and ensure that all intermediate and root certificates are present on your system.
Importing an OCSP Responder
- Change into the NSS database directory. For example:
# cd /path/to/nssdb/
- Import and trust the root certificate, if it is not already imported and trusted. For details, see Section 15.2, “Importing a Root Certificate”.
- Import and validate the intermediate certificates, if not already imported and validated. For details, see Section 15.3, “Importing an Intermediate Certificate Chain”.
- Validate and import the OCSP responder certificate:
#
PKICertImport -d . -n "certificate name" -t ",," -a -i ocsp.crt -u O
The validation succeeds when no error message is printed and the return code is 0. To check the return code, executeecho $?
immediately after executing the previous command above. In most cases, a visual error message is printed. If the validation does not succeed, contact the issuer and ensure that all intermediate and root certificates are present on your system.
Chapter 16. Certificate Profiles Configuration
16.1. Creating and Editing Certificate Profiles Directly on the File System
/ca/profiles/ca/
, such as /var/lib/pki/pki-ca/ca/profiles/ca/
. The file is named profile_name.cfg
. All of the parameters for profile rules can be set or modified in those profile configuration files. Profile rules can be inputs, outputs, authentication, authorization, defaults, and constraints.
/var/lib/pki/instance_name/ca/conf
directory with the name *.profile
.
Note
16.1.1. Configuring non-CA System Certificate Profiles
16.1.1.1. Profile Configuration Parameters
policyset.
policyName.policyNumber. For example:
policyset.cmcUserCertSet.6.constraint.class_id=noConstraintImpl policyset.cmcUserCertSet.6.constraint.name=No Constraint policyset.cmcUserCertSet.6.default.class_id=userExtensionDefaultImpl policyset.cmcUserCertSet.6.default.name=User Supplied Key Default policyset.cmcUserCertSet.6.default.params.userExtOID=2.5.29.15
Parameter | Description |
---|---|
desc | Gives a free text description of the certificate profile, which is shown on the end-entities page. For example, desc=This certificate profile is for enrolling server certificates with agent authentication. |
enable | Sets whether the profile is enabled, and therefore accessible through the end-entities page. For example, enable=true. |
auth.instance_id | Sets which authentication manager plug-in to use to authenticate the certificate request submitted through the profile. For automatic enrollment, the CA issues a certificate immediately if the authentication is successful. If authentication fails or there is no authentication plug-in specified, the request is queued to be manually approved by an agent. For example, auth.instance_id=CMCAuth. The authentication method must be one of the registered authentication instances from CS.cfg . |
authz.acl |
Specifies the authorization constraint. Most commonly, this us used to set the group evaluation ACL. For example, this caCMCUserCert parameter requires that the signer of the CMC request belong to the Certificate Manager Agents group:
authz.acl=group="Certificate Manager Agents"
In directory-based user certificate renewal, this option is used to ensure that the original requester and the currently-authenticated user are the same.
An entity must authenticate (bind or, essentially, log into the system) before authorization can be evaluated. The authorization method specified must be one of the registered authorization instances from
CS.cfg .
|
name | Gives the name of the profile. For example, name=Agent-Authenticated Server Certificate Enrollment. This name is displayed in the end users enrollment or renewal page. |
input.list | Lists the allowed inputs for the profile by name. For example, input.list=i1,i2. |
input.input_id.class_id | Gives the java class name for the input by input ID (the name of the input listed in input.list). For example, input.i1.class_id=cmcCertReqInputImpl. |
output.list | Lists the possible output formats for the profile by name. For example, output.list=o1. |
output.output_id.class_id | Gives the java class name for the output format named in output.list. For example, output.o1.class_id=certOutputImpl. |
policyset.list | Lists the configured profile rules. For dual certificates, one set of rules applies to the signing key and the other to the encryption key. Single certificates use only one set of profile rules. For example, policyset.list=serverCertSet. |
policyset.policyset_id.list | Lists the policies within the policy set configured for the profile by policy ID number in the order in which they should be evaluated. For example, policyset.serverCertSet.list=1,2,3,4,5,6,7,8. |
policyset.policyset_id.policy_number.constraint.class_id | Gives the java class name of the constraint plug-in set for the default configured in the profile rule. For example, policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl. |
policyset.policyset_id.policy_number.constraint.name | Gives the user-defined name of the constraint. For example, policyset.serverCertSet.1.constraint.name=Subject Name Constraint. |
policyset.policyset_id.policy_number.constraint.params.attribute | Specifies a value for an allowed attribute for the constraint. The possible attributes vary depending on the type of constraint. For example, policyset.serverCertSet.1.constraint.params.pattern=CN=.*. |
policyset.policyset_id.policy_number.default.class_id | Gives the java class name for the default set in the profile rule. For example, policyset.serverCertSet.1.default.class_id=userSubjectNameDefaultImpl |
policyset.policyset_id.policy_number.default.name | Gives the user-defined name of the default. For example, policyset.serverCertSet.1.default.name=Subject Name Default |
policyset.policyset_id.policy_number.default.params.attribute | Specifies a value for an allowed attribute for the default. The possible attributes vary depending on the type of default. For example, policyset.serverCertSet.1.default.params.name=CN=(Name)$request.requestor_name$. |
16.1.1.2. Modifying Certificate Extensions Directly on the File System
policyset.cmcUserCertSet.6.constraint.class_id=keyUsageExtConstraintImpl
policyset.cmcUserCertSet.6.constraint.name=Key Usage Extension Constraint
policyset.cmcUserCertSet.6.constraint.params.keyUsageCritical=true
policyset.cmcUserCertSet.6.constraint.params.keyUsageCrlSign=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageDataEncipherment=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageDecipherOnly=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageDigitalSignature=true
policyset.cmcUserCertSet.6.constraint.params.keyUsageEncipherOnly=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageKeyAgreement=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageKeyCertSign=false
policyset.cmcUserCertSet.6.constraint.params.keyUsageKeyEncipherment=true
policyset.cmcUserCertSet.6.constraint.params.keyUsageNonRepudiation=true
policyset.cmcUserCertSet.6.default.class_id=keyUsageExtDefaultImpl policyset.cmcUserCertSet.6.default.name=Key Usage Default policyset.cmcUserCertSet.6.default.params.keyUsageCritical=true policyset.cmcUserCertSet.6.default.params.keyUsageCrlSign=false policyset.cmcUserCertSet.6.default.params.keyUsageDataEncipherment=false policyset.cmcUserCertSet.6.default.params.keyUsageDecipherOnly=false policyset.cmcUserCertSet.6.default.params.keyUsageDigitalSignature=true policyset.cmcUserCertSet.6.default.params.keyUsageEncipherOnly=false policyset.cmcUserCertSet.6.default.params.keyUsageKeyAgreement=false policyset.cmcUserCertSet.6.default.params.keyUsageKeyCertSign=false policyset.cmcUserCertSet.6.default.params.keyUsageKeyEncipherment=true policyset.cmcUserCertSet.6.default.params.keyUsageNonRepudiation=true
policyset.cmcUserCertSet.6.default.class_id=userExtensionDefaultImpl policyset.cmcUserCertSet.6.default.name=User Supplied Key Default policyset.cmcUserCertSet.6.default.params.userExtOID=2.5.29.15
2.5.29.15
in the certificate request.
16.1.1.2.1. Key Usage and Extended Key Usage Consistency
Purpose / Extended Key Usages | Key Usages |
---|---|
TLS Server Authentication command
id-kp-serverAuth
| digitalSignature , keyEncipherment , or KeyAgreement |
TLS Client (Mutual) Authentication
id-kp-clientAuth
| digitalSignature , keyEncipherment , and/or KeyAgreement |
Code Signing
id-kp-codeSigning
| digitalSignature |
Email Protection
id-kp-emailProtection
| digitalSignature , nonRepudiation , and/or (keyEncipherment or keyAgreement ) |
OCSP Response Signing
id-kp-OCSPSigning
| KeyAgreement and/or nonRepudiation |
- An enrollment profile that is intended for purpose of OCSP response signing contains Extended key usage
id-kp-OCSPSigning
but withkeyEncipherment
key usage bit:policyset.ocspCertSet.6.default.class_id=keyUsageExtDefaultImpl policyset.ocspCertSet..6.default.name=Key Usage Default policyset.ocspCertSet..6.default.params.keyUsageCritical=true policyset.ocspCertSet..6.default.params.keyUsageCrlSign=false policyset.ocspCertSet..6.default.params.keyUsageDataEncipherment=false policyset.ocspCertSet..6.default.params.keyUsageDecipherOnly=false policyset.ocspCertSet..6.default.params.keyUsageDigitalSignature=true policyset.ocspCertSet..6.default.params.keyUsageEncipherOnly=false policyset.ocspCertSet..6.default.params.keyUsageKeyAgreement=false policyset.ocspCertSet..6.default.params.keyUsageKeyCertSign=false policyset.ocspCertSet..6.default.params.keyUsageKeyEncipherment=true policyset.ocspCertSet..6.default.params.keyUsageNonRepudiation=true policyset.ocspCertSet.7.constraint.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.9 policyset.ocspCertSet.7.default.class_id=extendedKeyUsageExtDefaultImpl policyset.ocspCertSet.7.default.name=Extended Key Usage Default policyset.ocspCertSet.7.default.params.exKeyUsageCritical=false policyset.ocspCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.9
- An enrollment profile that is intended for the purpose of TLS server authentication contains Extended key
usage id-kp-serverAuth
but with CRL signing key usage bit:policyset.serverCertSet.6.default.name=Key Usage Default policyset.serverCertSet.6.default.params.keyUsageCritical=true policyset.serverCertSet.6.default.params.keyUsageDigitalSignature=true policyset.serverCertSet.6.default.params.keyUsageNonRepudiation=false policyset.serverCertSet.6.default.params.keyUsageDataEncipherment=true policyset.serverCertSet.6.default.params.keyUsageKeyEncipherment=false policyset.serverCertSet.6.default.params.keyUsageKeyAgreement=true policyset.serverCertSet.6.default.params.keyUsageKeyCertSign=false policyset.serverCertSet.6.default.params.keyUsageCrlSign=true policyset.serverCertSet.6.default.params.keyUsageEncipherOnly=false policyset.serverCertSet.6.default.params.keyUsageDecipherOnly=false policyset.cmcUserCertSet.7.default.class_id=extendedKeyUsageExtDefaultImpl policyset.cmcUserCertSet.7.default.name=Extended Key Usage Extension Default policyset.cmcUserCertSet.7.default.params.exKeyUsageCritical=false policyset.serverCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.1
- The Extended Key Usage Extension Constraint section in the Red Hat Certificate System Administration Guide.
- The keyUsage section in the Red Hat Certificate System Administration Guide.
- The Extended Key Usage Extension Constraint section in the Red Hat Certificate System Administration Guide.
- The extKeyUsage section in the Red Hat Certificate System Administration Guide.
16.1.1.2.2. Configuring Cross-Pair Profiles
- The Certificate Policies Extension (
CertificatePoliciesExtension
) specifies the terms that the certificate fall under, which is often unique for each PKI. - The Policy Mapping Extension (
PolicyMappingExtension
) seals the trust between two PKI’s by mapping the certificate profiles of the two environments.
policyset.userCertSet.p7.constraint.class_id=noConstraintImpl policyset.userCertSet.p7.constraint.name=No Constraint policyset.userCertSet.p7.default.class_id=certificatePoliciesExtDefaultImpl policyset.userCertSet.p7.default.name=Certificate Policies Extension Default policyset.userCertSet.p7.default.params.Critical=false policyset.userCertSet.p7.default.params.PoliciesExt.num=1 policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.enable=true policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.policyId=1.1.1.1 policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.CPSURI.enable=false policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.CPSURI.value= policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.enable=false policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.explicitText.value= policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.noticeReference.noticeNumbers= policyset.userCertSet.p7.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.noticeReference.organization=
Identifier: Certificate Policies: - 2.5.29.32 Critical: no Certificate Policies: Policy Identifier: 1.1.1.1
16.1.1.3. Adding Profile Inputs Directly on the File System
profiles/ca
directory contains the input information for that particular certificate profile form. Inputs are the fields in the end-entities page enrollment forms. There is a parameter, input.list
, which lists the inputs included in that profile. Other parameters define the inputs; these are identified by the format input.
ID. For example, this adds a generic input to a profile:
input.list=i1,i2,i3,i4 ... input.i4.class_id=genericInputImpl input.i4.params.gi_display_name0=Name0 input.i4.params.gi_display_name1=Name1 input.i4.params.gi_display_name2=Name2 input.i4.params.gi_display_name3=Name3 input.i4.params.gi_param_enable0=true input.i4.params.gi_param_enable1=true input.i4.params.gi_param_enable2=true input.i4.params.gi_param_enable3=true input.i4.params.gi_param_name0=gname0 input.i4.params.gi_param_name1=gname1 input.i4.params.gi_param_name2=gname2 input.i4.params.gi_param_name3=gname3 input.i4.params.gi_num=4
16.1.2. Changing the Default Validity Time of Certificates
825
days (approximately 27 months), open the /var/lib/pki/instance_name/ca/profiles/ca/caCACert.cfg
file in an editor and set:
policyset.caCertSet.2.default.params.range=825
16.1.3. Configuring CA System Certificate Profiles
/var/lib/pki/[instance name]/ca/conf
file. Those profiles are:
caAuditSigningCert.profile
eccAdminCert.profile
rsaAdminCert.profile
caCert.profile
eccServerCert.profile
saServerCert.profile
caOCSPCert.profile
eccSubsystemCert.profile
rsaSubsystemCert.profile
- How to change validity to CA signing certificate.
- How to add extensions (e.g. Certificate policies extension).
- Back up the original CA certificate profile used by
pkispawn
.# cp -p /usr/share/pki/ca/conf/caCert.profile /usr/share/pki/ca/conf/caCert.profile.orig
- Open the CA certificate profile used by the configuration wizard.
# vim /usr/share/pki/ca/conf/caCert.profile
- Reset the validity period in the Validity Default to whatever you want. For example, to change the period to two years:
2.default.class=com.netscape.cms.profile.def.ValidityDefault 2.default.name=Validity Default 2.default.params.range=7200
- Add any extensions by creating a new default entry in the profile and adding it to the list. For example, to add the Certificate Policies Extension, add the default (which, in this example, is default #9):
9.default.class_id=certificatePoliciesExtDefaultImpl 9.default.name=Certificate Policies Extension Default 9.default.params.Critical=false 9.default.params.PoliciesExt.certPolicy0.enable=false 9.default.params.PoliciesExt.certPolicy0.policyId= 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.CPSURI.enable=true 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.CPSURI.value=CertificatePolicies.example.com 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.enable=false 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.explicitText.value= 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.noticeReference.noticeNumbers= 9.default.params.PoliciesExt.certPolicy0.PolicyQualifiers0.usernotice.noticeReference.organization=
Then, add the default number to the list of defaults to use the new default:list=2,4,5,6,7,8,
9
16.1.4. Managing Smart Card CA Profiles
Note
/var/lib/pki/instance_name/profiles/ca/
directory with the other CA profiles. The default profiles are listed in Table 16.2, “Default Token Certificate Profiles”.
Profile Name | Configuration File | Description |
---|---|---|
Regular Enrollment Profiles | ||
Token Device Key Enrollment | caTokenDeviceKeyEnrollment.cfg | For enrolling tokens used for devices or servers. |
Token User Encryption Certificate Enrollment | caTokenUserEncryptionKeyEnrollment.cfg | For enrolling encryption certificates on the token for a user. |
Token User Signing Certificate Enrollment | caTokenUserSigningKeyEnrollment.cfg | For enrolling signing certificates on the token for a user. |
Token User MS Login Certificate Enrollment | caTokenMSLoginEnrollment.cfg | For enrolling user certificates to use for single sign-on to a Windows domain or PC. |
Temporary Token Profiles | ||
Temporary Device Certificate Enrollment | caTempTokenDeviceKeyEnrollment.cfg | For enrolling certificates for a device on a temporary token. |
Temporary Token User Encryption Certificate Enrollment | caTempTokenUserEncryptionKeyEnrollment.cfg | For enrolling an encryption certificate on a temporary token for a user. |
Temporary Token User Signing Certificate Enrollment | caTempTokenUserSigningKeyEnrollment.cfg | For enrolling a signing certificates on a temporary token for a user. |
Renewal Profiles[a] | ||
Token User Encryption Certificate Enrollment (Renewal) | caTokenUserEncryptionKeyRenewal.cfg | For renewing encryption certificates on the token for a user, if renewal is allowed. |
Token User Signing Certificate Enrollment (Renewal) | caTokenUserSigningKeyRenewal.cfg | For renewing signing certificates on the token for a user, if renewal is allowed. |
[a]
Renewal profiles can only be used in conjunction with the profile that issued the original certificate. There are two settings that are beneficial:
|
16.1.4.1. Editing Enrollment Profiles for the TPS
policyset.set1.p1.default.params.dnpattern=UID=$request.uid$, O=Token Key User policyset.set1.p1.default.params.ldap.enable=true policyset.set1.p1.default.params.ldap.basedn=ou=people,dc=host,dc=example,dc=com policyset.set1.p1.default.params.ldapStringAttributes=uid,mail policyset.set1.p1.default.params.ldap.ldapconn.host=localhost.example.com policyset.set1.p1.default.params.ldap.ldapconn.port=389
ldapStringAttributes
parameter tells the CA which LDAP attributes to retrieve from the company directory. For example, if the directory contains uid
as an LDAP attribute name, and this will be used in the subject name of the certificate, then uid
must be listed in the ldapStringAttributes
parameter, and request.uid listed as one of the components in the dnpattern
.
dnpattern
parameter is covered in the Subject Name Constraint section and the Subject Name Default section in the Red Hat Certificate System Administration Guide.
16.1.4.2. Creating Custom TPS Profiles
Note
- Create a new token profile for the issuing CA. Setting up profiles is covered in the Setting up Certificate Profiles section in the Red Hat Certificate System Administration Guide.
- Copy the profile into the CA's profiles directory,
/var/lib/instance_name/ca/profiles/ca/
. - Edit the CA's
CS.cfg
file, and add the new profile references and the profile name to the CA's list of profiles. For example:# vim etc/pki/instance_name/ca/CS.cfg profile.list=caUserCert,...,caManualRenewal,
tpsExampleEnrollProfile
... profile.caTokenMSLoginEnrollment.class_id=caUserCertEnrollImpl profile.caTokenMSLoginEnrollment.config=/var/lib/pki/instance_name/profiles/ca/tpsExampleEnrollProfile.cfg - Edit the TPS
CS.cfg
file, and add a line to point to the new CA enrollment profile. For example:# vim /etc/pki/instance_name/tps/CS.cfg op.enroll.userKey.keyGen.signing.ca.profileId=tpsExampleEnrollProfile
- Restart the instance after editing the smart card profiles:
# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
If the CA and TPS are in separate instances, restart both instances.
Note
externalReg
) setting are configured in the user LDAP entry.
16.1.4.3. Using the Windows Smart Card Logon Profile
caTokenMSLoginEnrollment.cfg
).
- Issue a certificate to the domain controller, if it is not already configured for TLS.
- Configure the smart card login per user, rather than as a global policy, to prevent locking out the domain administrator.
- Enable CRL publishing to the Active Directory server because the domain controller checks the CRL at every login.
16.1.5. Disabling Certificate Enrolment Profiles
*.cfg
file in the /var/lib/pki/instance_name/ca/profiles/ca/
directory and set the visible
and enable
parameters to false
.
- List all non-CMC profiles:
# ls -l /var/lib/pki/instance_name/ca/profiles/ca/ | grep -v "CMC"
- In each of the displayed files, set the following parameters to
false
:visible=false enable=false
visible=false
in all CMC profiles to make them invisible on the end entity page:
- List all CMC profiles:
# ls -l /var/lib/pki/instance_name/ca/profiles/ca/*CMC*
- In each of the displayed files, set:
visible=false
Chapter 17. Configuring the Key Recovery Authority
17.1. Manually Setting up Key Archival
Important
- Having a trusted relationship between a CA and a KRA.
- Having the enrollment form enabled for key archival, meaning it has key archival configured and the KRA transport certificate stored in the form.
- If necessary, create a trusted manager to establish a relationship between the Certificate Manager and the KRA.For the CA to be able to request key archival of the KRA, the two subsystems must be configured to recognize, trust, and communicate with each other. Verify that the Certificate Manager has been set up as a privileged user, with an appropriate TLS client authentication certificate, in the internal database of the KRA. By default, the Certificate Manager uses its subsystem certificate for TLS client authentication to the KRA.
- Copy the base-64 encoded transport certificate for the KRA.The transport certificate is stored in the KRA's certificate database, which can be retrieved using the
certutil
utility. If the transport certificate is signed by a Certificate Manager, then a copy of the certificate is available through the Certificate Manager end-entities page in the Retrieval tab.Alternatively, download the transport certificate using thepki
ultility:# pki cert-find --name "KRA Transport certificate's subject common name" # pki cert-show serial_number --output transport.pem
- Add the transport certificate to the CA's
CS.cfg
file.ca.connector.KRA.enable=true ca.connector.KRA.host=server.example.com ca.connector.KRA.local=false ca.connector.KRA.nickName=subsystemCert cert-pki-ca ca.connector.KRA.port=8443 ca.connector.KRA.timeout=30 ca.connector.KRA.transportCert=MIIDbDCCAlSgAwIBAgIBDDANBgkqhkiG9w0BAQUFADA6MRgwFgYDVQQKEw9Eb21haW4gc28gbmFtZWQxHjAcBgNVBAMTFUNlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNjExMTQxODI2NDdaFw0wODEwMTQxNzQwNThaMD4xGDAWBgNVBAoTD0RvbWFpbiBzbyBuYW1lZDEiMCAGA1UEAxMZRFJNIFRyYW5zcG9ydCBDZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKnMGB3WkznueouwZjrWLFZBLpKt6TimNKV9iz5s0zrGUlpdt81/BTsU5A2sRUwNfoZSMs/d5KLuXOHPyGtmC6yVvaY719hr9EGYuv0Sw6jb3WnEKHpjbUO/vhFwTufJHWKXFN3V4pMbHTkqW/x5fu/3QyyUre/5IhG0fcEmfvYxIyvZUJx+aQBW437ATD99Kuh+I+FuYdW+SqYHznHY8BqOdJwJ1JiJMNceXYAuAdk+9t70RztfAhBmkK0OOP0vH5BZ7RCwE3Y/6ycUdSyPZGGc76a0HrKOz+lwVFulFStiuZIaG1pv0NNivzcj0hEYq6AfJ3hgxcC1h87LmCxgRWUCAwEAAaN5MHcwHwYDVR0jBBgwFoAURShCYtSg+Oh4rrgmLFB/Fg7X3qcwRAYIKwYBBQUHAQEEODA2MDQGCCsGAQUFBzABhihodHRwOi8vY2x5ZGUucmR1LnJlZGhhdC5jb206OTE4MC9jYS9vY3NwMA4GA1UdDwEB/wQEAwIE8DANBgkqhkiG9w0BAQUFAAOCAQEAFYz5ibujdIXgnJCbHSPWdKG0T+FmR67YqiOtoNlGyIgJ42fi5lsDPfCbIAe3YFqmF3wU472h8LDLGyBjy9RJxBj+aCizwHkuoH26KmPGntIayqWDH/UGsIL0mvTSOeLqI3KM0IuH7bxGXjlION83xWbxumW/kVLbT9RCbL4216tqq5jsjfOHNNvUdFhWyYdfEOjpp/UQZOhOM1d8GFiw8N8ClWBGc3mdlADQp6tviodXueluZ7UxJLNx3HXKFYLleewwIFhC82zqeQ1PbxQDL8QLjzca+IUzq6Cd/t7OAgvv3YmpXgNR0/xoWQGdM1/YwHxtcAcVlskXJw5ZR0Y2zA== ca.connector.KRA.uri=/kra/agent/kra/connector
- Then edit the enrollment form and add or replace the transport certificate value in the
keyTransportCert
method.vim /var/lib/pki/pki-tomcat/ca/webapps/ca/ee/ca/ProfileSelect.template var keyTransportCert = MIIDbDCCAlSgAwIBAgIBDDANBgkqhkiG9w0BAQUFADA6MRgwFgYDVQQKEw9Eb21haW4gc28gbmFtZWQxHjAcBgNVBAMTFUNlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNjExMTQxODI2NDdaFw0wODEwMTQxNzQwNThaMD4xGDAWBgNVBAoTD0RvbWFpbiBzbyBuYW1lZDEiMCAGA1UEAxMZRFJNIFRyYW5zcG9ydCBDZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKnMGB3WkznueouwZjrWLFZBLpKt6TimNKV9iz5s0zrGUlpdt81/BTsU5A2sRUwNfoZSMs/d5KLuXOHPyGtmC6yVvaY719hr9EGYuv0Sw6jb3WnEKHpjbUO/vhFwTufJHWKXFN3V4pMbHTkqW/x5fu/3QyyUre/5IhG0fcEmfvYxIyvZUJx+aQBW437ATD99Kuh+I+FuYdW+SqYHznHY8BqOdJwJ1JiJMNceXYAuAdk+9t70RztfAhBmkK0OOP0vH5BZ7RCwE3Y/6ycUdSyPZGGc76a0HrKOz+lwVFulFStiuZIaG1pv0NNivzcj0hEYq6AfJ3hgxcC1h87LmCxgRWUCAwEAAaN5MHcwHwYDVR0jBBgwFoAURShCYtSg+Oh4rrgmLFB/Fg7X3qcwRAYIKwYBBQUHAQEEODA2MDQGCCsGAQUFBzABhihodHRwOi8vY2x5ZGUucmR1LnJlZGhhdC5jb206OTE4MC9jYS9vY3NwMA4GA1UdDwEB/wQEAwIE8DANBgkqhkiG9w0BAQUFAAOCAQEAFYz5ibujdIXgnJCbHSPWdKG0T+FmR67YqiOtoNlGyIgJ42fi5lsDPfCbIAe3YFqmF3wU472h8LDLGyBjy9RJxBj+aCizwHkuoH26KmPGntIayqWDH/UGsIL0mvTSOeLqI3KM0IuH7bxGXjlION83xWbxumW/kVLbT9RCbL4216tqq5jsjfOHNNvUdFhWyYdfEOjpp/UQZOhOM1d8GFiw8N8ClWBGc3mdlADQp6tviodXueluZ7UxJLNx3HXKFYLleewwIFhC82zqeQ1PbxQDL8QLjzca+IUzq6Cd/t7OAgvv3YmpXgNR0/xoWQGdM1/YwHxtcAcVlskXJw5ZR0Y2zA==;
17.2. Encryption Of KRA Operations
- Archival:
- Encryption of keys to archive in a Certificate Request Message Format (CRMF) package for transport to the KRA.
- Encryption of the key for storage in the KRA LDAP database.
- Recovery:
- Encryption of a user-provided session key for transport to the key.
- Decryption of the secret and re-encryption using the user provided session key or creation of a PKCS#12 package.
- Generation:
- Encryption of a generated key for storage.
17.2.1. How Clients Manage Key Operation Encryption
17.2.2. Configuring the Encryption Algorithm in the KRA
Note
kra.allowEncDecrypt.archive=true
and kra.allowEncDecrypt.recovery=true
) and AES Key Wrap (in case when kra.allowEncDecrypt.archive=false
and kra.allowEncDecrypt.recovery=false
) are allowed in the following configuration. Any FIPS140-2 validated HSM that supports either algorithm is allowed for the key archival and recovery feature provided by KRA.
/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
file. We recommend the following set of parameters (see note above for other option):
kra.allowEncDecrypt.archive=false kra.allowEncDecrypt.recovery=false kra.storageUnit.wrapping.1.sessionKeyLength=256 kra.storageUnit.wrapping.1.sessionKeyWrapAlgorithm=RSA kra.storageUnit.wrapping.1.payloadEncryptionPadding=PKCS5Padding kra.storageUnit.wrapping.1.sessionKeyKeyGenAlgorithm=AES kra.storageUnit.wrapping.1.payloadEncryptionAlgorithm=AES kra.storageUnit.wrapping.1.payloadEncryptionMode=CBC kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap kra.storageUnit.wrapping.1.sessionKeyType=AES kra.storageUnit.wrapping.1.payloadWrapIVLen=16 kra.storageUnit.wrapping.choice=1
kra.storageUnit.wrapping.0.*
vs kra.storageUnit.wrapping.1.*
) has individual settings, and the number defines which settings belong to the same configuration group. The current configuration group is set in the kra.storageUnit.wrapping.choice
parameter in the /var/lib/pki/pki-instance_name/conf/kra/CS.cfg
file.
kra.storageUnit.wrapping.choice=1
is set in the configuration file before continuing.
Note
17.2.2.1. Explanation of Parameters and their Values
payload
. The set of parameters to be used depends on the value of kra.allowEncDecrypt.archive
and kra.allowEncDecrypt.recovery
. By default, both of these are false. See Section 17.2.2.2, “Solving Limitations of HSMs When Using AES Encryption in KRAs” for the effect of these two parameters on HSMs.
kra.allowEncDecrypt.archive
and kra.allowEncDecrypt.recovery
are both false:
payloadWrapAlgorithm
determines the wrapping algorithm used. The only one valid choice isAES KeyWrap
.- When
payloadWrapAlgorithm=AES/CBC/PKCS5Padding
, thenpayloadWrapIVLength=16
has to be specified to tell PKI that we need to generate an IV (as CBC requires one).
kra.allowEncDecrypt.archive
and kra.allowEncDecrypt.recovery
are both true:
payloadEncryptionAlgorithm
determines the encryption algorithm used. The only valid choice is AES.payloadEncryptionMode
determines the block chaining mode. The only valid choice is CBC.payloadEncryptionPadding
determines the padding scheme. The only valid choice is PKCS5Padding.
sessionKey
.
sessionKeyType
is the type of key to generate. The only valid choice is AES.sessionKeyLength
is the length of the generated session key. Valid choices are 128 and 256, to encrypt the payload with 128-bit AES or 256-bit AES respectively.sessionKeyWrapAlgorithm
is the type of key the KRA Storage Certificate is. The only valid choice in this guide is RSA.
17.2.2.2. Solving Limitations of HSMs When Using AES Encryption in KRAs
Selecting a Different Algorithm for the Key Wrapping
AES-128-CBC
as the key wrapping algorithm:
- Set the following parameters in the
/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
file:kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap kra.storageUnit.wrapping.1.payloadWrapIVLen=16 kra.storageUnit.wrapping.1.sessionKeyLength=128
- Restart the instance:
# systemctl restart pki-tomcatd@instance_name.service
OR (if usingnuxwdog watchdog
)# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
If the KRA runs in a difference instance then the CA, you need to restart both instances.
kra.storageUnit.wrapping.1.payloadWrap{Algorithm,IVLen}
and kra.storageUnit.wrapping.1.payloadEncryption{Algorithm,Mode,Padding}
parameters.
Setting the KRA into Encryption Mode
- Set the following parameters in the
/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
file totrue
:kra.allowEncDecrypt.archive=true kra.allowEncDecrypt.recovery=true
- Restart the service:
# systemctl restart pki-tomcatd@instance_name.service
OR (if usingnuxwdog watchdog
)# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
If the KRA runs in a difference instance than the CA, you need to restart both instances.
kra.storageUnit.wrapping.1.payloadEncryption{Algorithm,Mode,Padding}
and kra.storageUnit.wrapping.1.payloadWrap{Algorithm,IVLen}
parameters.
Note
17.3. Setting up Agent-Approved Key Recovery Schemes
17.3.1. Configuring Agent-Approved Key Recovery in the Command Line
- Set the number of recovery managers to require to approve a recovery.
- Set the group to which these users must belong.
CS.cfg
configuration file.
- Stop the server before editing the configuration file.
# systemctl stop pki-tomcatd@instance_name.service
OR (if usingnuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- Open the KRA's
CS.cfg
file.# vim /var/lib/pki/pki-tomcat/kra/conf/CS.cfg
- Edit the two recovery scheme parameters.
kra.noOfRequiredRecoveryAgents=3 kra.recoveryAgentGroup=Key Recovery Authority Agents
- Restart the server.
# systemctl start pki-tomcatd@instance_name.service
OR# systemctl start pki-tomcatd-nuxwdog@instance_name.service
Note
17.3.2. Customizing the Key Recovery Form
/var/lib/pki/pki-tomcat/kra/webapps/kra/agent/kra/
directory, called confirmRecover.html
.
Important
17.3.3. Rewrapping Keys in a New Private Storage Key
17.3.3.1. About KRATool
KRATool
utility (known in previous versions of Red Hat Certificate System as DRMTool
).
KRATool
performs two operations: it can rewrap keys with a new private key, and it can renumber attributes in the LDIF file entries for key records, including enrollment and recovery requests. At least one operation (rewrap or renumber) must be performed and both can be performed in a single invocation.
Example 17.1. Rewrapping Keys
KRATool -kratool_config_file "/usr/share/pki/java-tools/KRATool.cfg" -source_ldif_file "/tmp/files/originalKRA.ldif" -target_ldif_file "/tmp/files/newKRA.ldif" -log_file "/tmp/kratool.log" -source_pki_security_database_path "/tmp/files/" -source_storage_token_name "Internal Key Storage Token" -source_storage_certificate_nickname "storageCert cert-pki-tomcat KRA" -target_storage_certificate_file "/tmp/files/omega.cert"
Example 17.2. Renumbering Keys
KRATool -kratool_config_file "/usr/share/pki/java-tools/KRATool.cfg" -source_ldif_file "/tmp/files/originalKRA.ldif" -target_ldif_file "/tmp/files/newKRA.ldif" -log_file "/tmp/kratool.log" -append_id_offset 100000000000 -source_kra_naming_context "pki-tomcat-KRA" -target_kra_naming_context "pki-tomcat-2-KRA" -process_requests_and_key_records_only
KRATool
options and its configuration file are discussed in more detail in the KRATool(1)
man page.
17.3.3.2. Rewrapping and Merging Keys from One or More KRAs into a Single KRA
pki-tomcat
on sourcekra.example.com) and stores them into another Certificate System KRA (for example, pki-tomcat-2
on targetkra.example.com). This is not the only use case; the tool can be run on the same instance as both the source and target, to rewrap existing keys, or it can be used simply to copy keys from multiple KRA instances into a single instance without rewrapping the keys at all.
Important
pki-tomcat-2
KRA must be set to 2048-bit and RSA.
- Log in to targetkra.example.com.
- Stop the
pki-tomcat-2
KRA.[root@targetkra ~]# systemctl stop pki-tomcatd@pki-tomcat-2.service
- Create a data directory to store the key data that will be imported from the
pki-tomcat
KRA instance residing on sourcekra.example.com.[root@targetkra ~]# mkdir -p /export/pki
- Export the public storage certificate for the
pki-tomcat-2
KRA to a flat file in the new data directory.[root@targetkra ~]# certutil -L -d /var/lib/pki/pki-tomcat-2/alias -n "storageCert cert-pki-tomcat-2 KRA" -a > /export/pki/targetKRA.cert
- Stop the Directory Server instance for the
pki-tomcat-2
KRA, if it is on the same machine.[root@newkra ~]# systemctl stop dirsrv.target
- Export the configuration information for the
pki-tomcat-2
KRA.root@targetkra ~]# grep nsslapd-localuser /etc/dirsrv/slapd-instanceName/dse.ldif nsslapd-localuser: dirsrv [root@targetkra ~]# chown dirsrv:dirsrv /export/pki [root@targetkra ~]# /usr/lib64/dirsrv/slapd-instanceName/db2ldif -n pki-tomcat-2-KRA -a /export/pki/pki-tomcat-2.ldif
Important
Make sure that the LDIF file contains a single blank line at the end. - Log in to sourcekra.example.com.
- Stop the
pki-tomcat
KRA.[root@sourcekra ~]# systemctl stop pki-tomcatd@pki-tomcat.service
- Create a data directory to store the key data that will be exported to the
pki-tomcat-2
KRA instance residing on targetkra.example.com.[root@sourcekra ~]# mkdir -p /export/pki
- Stop the Directory Server instance for the
pki-tomcat
KRA, if it is on the same machine.[root@sourcekra ~]# systemctl stop dirsrv.target
- Export the configuration information for the
pki-tomcat
KRA.[root@sourcekra ~]# grep nsslapd-localuser /etc/dirsrv/slapd-instanceName/dse.ldif nsslapd-localuser: dirsrv [root@sourcekra ~]# chown dirsrv:dirsrv /export/pki [root@sourcekra ~]# /usr/lib64/dirsrv/slapd-instanceName/db2ldif -n pki-tomcat-KRA -a /export/pki/pki-tomcat.ldif
Important
Make sure that the LDIF file contains a single blank line at the end. - Copy the
pki-tomcat
KRA NSS security databases to this directory.[root@sourcekra ~]# cp -p /var/lib/pki/pki-tomcat/alias/cert9.db /export/pki [root@sourcekra ~]# cp -p /var/lib/pki/pki-tomcat/alias/key4.db /export/pki [root@sourcekra ~]# cp -p /var/lib/pki/pki-tomcat/alias/pkcs11.txt /export/pki
- Copy the file with the public storage key from the
pki-tomcat-2
KRA machine to this machine. For example:[root@sourcekra ~]# cd /export/pki [root@sourcekra ~]# sftp root@targetkra.example.com sftp> cd /export/pki sftp> get targetKRA.cert sftp> quit
- If necessary, edit the default
KRATool.cfg
file to use with the tool. The default file can also be used without changes. - Run the
KRATool
; all of these parameters should be on a single line:[root@sourcekra ~]# KRATool -kratool_config_file "/usr/share/pki/java-tools/KRATool.cfg" -source_ldif_file /export/pki/pki-tomcat.ldif \ -target_ldif_file /export/pki/source2targetKRA.ldif \ -log_file /export/pki/kratool.log \ -source_pki_security_database_path /export/pki \ -source_storage_token_name 'Internal Key Storage Token' \ -source_storage_certificate_nickname 'storageCert cert-pki-tomcat KRA' \ -target_storage_certificate_file /export/pki/targetKRA.cert -append_id_offset 100000000000 \ -source_kra_naming_context "pki-tomcat-KRA" \ -target_kra_naming_context "pki-tomcat-2-KRA" \ -process_requests_and_key_records_only
Note
The command may prompt for the password to the token stored in thepki-tomcat
KRA NSS security databases.When it is done, the command creates the file specified in the-target_ldif_file
parameter,source2targetKRA.ldif
. - Copy this LDIF file over to the
pki-tomcat-2
KRA machine. For example:[root@sourcekra ~]# scp /export/pki/source2targetKRA.ldif root@targetkra.example.com:/export/pki
Important
Make sure that the LDIF file contains a single blank line at the end. - If multiple KRA instances are being merged, their data can be merged into a single import operation. Simply perform the same procedure for every KRA, which will be merged.
Important
Make sure to specify unique values for the-target_ldif_file
parameter to create separate LDIF files, and to specify unique-append_id_offset
values so that there are no conflicts when the LDIF files are concatenated. - On the
pki-tomcat-2
KRA machine, import the LDIF file(s) with the other key data by concatenating thepki-tomcat-2
KRA configuration LDIF file and every exported LDIF file for the other KRA instances. For example:[root@targetkra ~]# cd /export/pki [root@targetkra ~]# cat pki-tomcat-2.ldif source2targetKRA.ldif > combined.ldif
- Import this combined LDIF file into the Directory Server database for the
pki-tomcat-2
KRA instance.[root@targetkra ~]# /usr/lib64/dirsrv/slapd-instanceName/ldif2db -n pki-tomcat-2-KRA -i /export/pki/combined.ldif
- Start the Directory Server instance for the
pki-tomcat-2
KRA.[root@targetkra ~]# systemctl start dirsrv.target
- Start the
pki-tomcat-2
KRA.[root@targetkra ~]# systemctl start pki-tomcatd@pki-tomcat-2.service
17.3.4. Updating CA-KRA Connector Information After Cloning
Chapter 18. Configuring Logs
18.1. Certificate System Log Settings
18.1.1. Services That Are Logged
Service | Description |
---|---|
ACLs | Logs events related to access control lists. |
Administration | Logs events related to administration activities, such as HTTPS communication between the Console and the instance. |
All | Logs events related to all the services. |
Authentication | Logs events related to activity with the authentication module. |
Certificate Authority | Logs events related to the Certificate Manager. |
Database | Logs events related to activity with the internal database. |
HTTP |
Logs events related to the HTTP activity of the server. Note that HTTP events are actually logged to the errors log belonging to the Apache server incorporated with the Certificate System to provide HTTP services.
|
Key Recovery Authority | Logs events related to the KRA. |
LDAP | Logs events related to activity with the LDAP directory, which is used for publishing certificates and CRLs. |
OCSP | Logs events related to OCSP, such as OCSP status GET requests. |
Others | Logs events related to other activities, such as command-line utilities and other processes. |
Request Queue | Logs events related to the request queue activity. |
User and Group | Logs events related to users and groups of the instance. |
18.1.2. Log Levels (Message Categories)
0
to 10
, each number indicating the level of logging to be performed by the server. The level sets how detailed the logging should be.
Note
1
and this value should not be changed. To enable debug logging, see Section 18.3.3, “Additional Configuration for Debug Log”.
Log level | Message category | Description |
---|---|---|
0 | Debugging | These messages contain debugging information. This level is not recommended for regular use because it generates too much information. |
1 | Informational (default selection for audit log) | These messages provide general information about the state of the Certificate System, including status messages such as Certificate System initialization complete and Request for operation succeeded. |
2 | Warning | These messages are warnings only and do not indicate any failure in the normal operation of the server. |
3 | Failure; the default selection for system and error logs | These messages indicate errors and failures that prevent the server from operating normally, including failures to perform a certificate service operation (User authentication failed or Certificate revoked) and unexpected situations that can cause irrevocable errors (The server cannot send back the request it processed for a client through the same channel the request came from the client). |
4 | Misconfiguration | These messages indicate that a misconfiguration in the server is causing an error. |
5 | Catastrophic failure | These messages indicate that, because of an error, the service cannot continue running. |
6 | Security-related events | These messages identify occurrences that affect the security of the server. For example, Privileged access attempted by user with revoked or unlisted certificate . |
7 | PDU-related events (debugging) | These messages contain debugging information for PDU events. This level is not recommended for regular use because it generates more information than is normally useful. |
8 | PDU-related events | These messages relate transactions and rules processed on a PDU, such as creating MAC tokens. |
9 | PDU-related events | This log levels provides verbose log messages for events processed on a PDU, such as creating MAC tokens. |
10 | All logging levels | This log level enables all logging levels. |
18.1.3. Buffered and Unbuffered Logging
- The buffer gets full. The buffer is full when the buffer size is equal to or greater than the value specified by the
bufferSize
configuration parameter. The default value for this parameter is 512 KB. - The flush interval for the buffer is reached. The flush interval is reached when the time interval since the last buffer flush is equal to or greater than the value specified by the
flushInterval
configuration parameter. The default value for this parameter is 5 seconds. - When current logs are read from Console. The server retrieves the latest log when it is queried for current logs.
18.1.4. Log File Rotation
- The size limit for the corresponding file is reached. The size of the corresponding log file is equal to or greater than the value specified by the
maxFileSize
configuration parameter. The default value for this parameter is 100 KB. - The age limit for the corresponding file is reached. The corresponding log file is equal to or older than the interval specified by the
rolloverInterval
configuration parameter. The default value for this parameter is 2592000 seconds (every thirty days).
log
directory to an archive medium.
Note
signtool
, that signs log files before archiving them as a means of tamper detection.
18.2. Operating System (external to RHCS) Log Settings
18.2.1. Enabling OS-level Audit Logs
Warning
sudo
.
auditd
logging framework provides many additional audit capabilities. These OS-level audit logs complement functionality provided by Certificate System directly. Before performing any of the following steps in this section, make sure the audit
package is installed:
#
sudo yum install audit
yum
and rpm
and including Certificate System) is automatically performed and requires no additional configuration.
Note
auditd
service, validate the new rules were added by running:
# auditctl -l
18.2.1.1. Auditing Certificate System Audit Log Deletion
/etc/audit/rules.d/rhcs-audit-log-deletion.rules
with the following contents:
-a always,exit -F arch=b32 -S unlink -F dir=/var/log/pki -F key=rhcs_audit_deletion
-a always,exit -F arch=b32 -S rename -F dir=/var/log/pki -F key=rhcs_audit_deletion
-a always,exit -F arch=b32 -S rmdir -F dir=/var/log/pki -F key=rhcs_audit_deletion
-a always,exit -F arch=b32 -S unlinkat -F dir=/var/log/pki -F key=rhcs_audit_deletion
-a always,exit -F arch=b32 -S renameat -F dir=/var/log/pki -F key=rhcs_audit_deletion
-a always,exit -F arch=b64 -S unlink -F dir=/var/log/pki -F key=rhcs_audit_deletion
-a always,exit -F arch=b64 -S rename -F dir=/var/log/pki -F key=rhcs_audit_deletion
-a always,exit -F arch=b64 -S rmdir -F dir=/var/log/pki -F key=rhcs_audit_deletion
-a always,exit -F arch=b64 -S unlinkat -F dir=/var/log/pki -F key=rhcs_audit_deletion
-a always,exit -F arch=b64 -S renameat -F dir=/var/log/pki -F key=rhcs_audit_deletion
auditd
:
#
service auditd restart
18.2.1.2. Auditing Unauthorized Certificate System Use of Secret Keys
/etc/audit/rules.d/rhcs-audit-nssdb-access.rules
file with the following contents:
-w /etc/pki/<instance name>/alias -p warx -k rhcs_audit_nssdb
/etc/pki/<instance name>/alias
, add to /etc/audit/rules.d/rhcs-audit-nssdb-access.rules
the following line :
-w /etc/pki/<instance name>/alias/<file> -p warx -k rhcs_audit_nssdb
pki-ca121318ec
and cert9.db
, key4.db
, NHSM-CONN-XCcert9.db
, NHSM-CONN-XCkey4.db
, and pkcs11.txt
are files, then the configuration file would contain:
-w /etc/pki/pki-ca121318ec/alias -p warx -k rhcs_audit_nssdb -w /etc/pki/pki-ca121318ec/alias/cert9.db -p warx -k rhcs_audit_nssdb -w /etc/pki/pki-ca121318ec/alias/key4.db -p warx -k rhcs_audit_nssdb -w /etc/pki/pki-ca121318ec/alias/NHSM-CONN-XCcert9.db -p warx -k rhcs_audit_nssdb -w /etc/pki/pki-ca121318ec/alias/NHSM-CONN-XCkey4.db -p warx -k rhcs_audit_nssdb -w /etc/pki/pki-ca121318ec/alias/pkcs11.txt -p warx -k rhcs_audit_nssdb
auditd
:
#
service auditd restart
18.2.1.3. Auditing Time Change Events
/etc/audit/rules.d/rhcs-audit-rhcs_audit_time_change.rules
file with the following contents:
-a always,exit -F arch=b32 -S adjtimex,settimeofday,stime -F key=rhcs_audit_time_change
-a always,exit -F arch=b64 -S adjtimex,settimeofday -F key=rhcs_audit_time_change
-a always,exit -F arch=b32 -S clock_settime -F a0=0x0 -F key=rhcs_audit_time_change
-a always,exit -F arch=b64 -S clock_settime -F a0=0x0 -F key=rhcs_audit_time_change
-a always,exit -F arch=b32 -S clock_adjtime -F key=rhcs_audit_time_change
-a always,exit -F arch=b64 -S clock_adjtime -F key=rhcs_audit_time_change
-w /etc/localtime -p wa -k rhcs_audit_time_change
auditd
:
#
service auditd restart
18.2.1.4. Auditing Access to Certificate System Configuration
/etc/audit/rules.d/rhcs-audit-config-access.rules
file with the following contents:
-w /etc/pki/instance_name/server.xml -p wax -k rhcs_audit_config
/etc/pki/instance_name/
directory the following contents:
-w /etc/pki/instance_name/subsystem/CS.cfg -p wax -k rhcs_audit_config
Example 18.1. rhcs-audit-config-access.rules Configuration File
pki-ca121318ec
and only a CA is installed, the /etc/audit/rules.d/rhcs-audit-config-access.rules
file would contain:
-w /etc/pki/pki-ca121318ec/server.xml -p wax -k rhcs_audit_config -w /etc/pki/pki-ca121318ec/ca/CS.cfg -p wax -k rhcs_audit_config
rhcs_audit_nssdb
.
18.3. Configuring Logs in the CS.cfg File
CS.cfg
for the instance.
- Stop the subsystem instance.
# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- Open the
CS.cfg
file in the/var/lib/pki/instance_name/subsystem_type/conf
directory. - Create a new log.
- To configure a log instance, modify the parameters associated with that log. These parameters begin with
log.instance
.Table 18.3. Log Entry Parameters Parameter Description type The type of log file. system creates error and system logs; transaction records audit logs. enable Sets whether the log is active. Only enabled logs actually record events. level Sets the log level in the text field. The level must be manually entered in the field; there is no selection menu. The log level setting is a numeric value, as listed in Section 18.1.2, “Log Levels (Message Categories)”. fileName The full path, including the file name, to the log file. The subsystem user should have read/write permission to the file. bufferSize The buffer size in kilobytes (KB) for the log. Once the buffer reaches this size, the contents of the buffer are flushed out and copied to the log file. The default size is 512 KB. For more information on buffered logging, see Section 18.1.3, “Buffered and Unbuffered Logging”. flushInterval The amount of time, in seconds, before the contents of the buffer are flushed out and added to the log file. The default interval is 5 seconds. maxFileSize The size, kilobytes (KB), a log file can become before it is rotated. Once it reaches this size, the file is copied to a rotated file, and the log file is started new. For more information on log file rotation, see Section 18.1.4, “Log File Rotation”. The default size is 2000 KB. rolloverInterval The frequency which the server rotates the active log file. The available choices are hourly, daily, weekly, monthly, and yearly. The default selection is monthly. For more information, see Section 18.1.4, “Log File Rotation”. logSigning[a] Enables signed logging. When this parameter is enabled, provide a value for the signedAuditCertNickname parameter. This option means the log can only be viewed by an auditor. The value is either true
orfalse
.signedAuditCertNickname[a] The nickname of the certificate used to sign audit logs. The private key for this certificate must be accessible to the subsystem in order for it to sign the log. events[a] Specifies which events are logged to the audit log. Log events are separated by commas with no spaces. [a] This is for audit logs only. - Save the file.
- Start the subsystem instance.
# systemctl start pki-tomcatd@instance_name.service
OR (if usingnuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
18.3.1. Enabling and Configuring Signed Audit Log
18.3.1.1. Enabling Signed Audit Logging
# pki-server subsystem-audit-config-show Enabled: True Log File: audit_signing_log_file Buffer Size (bytes): 512 Flush Interval (seconds): 5 Max File Size (bytes): 2000 Rollover Interval (seconds): 2592000 Expiration Time (seconds): 0 Log Signing: False Signing Certificate: audit_signing_certificate
- Use the
pki-server
utility to set the--logSigning
option totrue
:# pki-server subsystem-audit-config-mod --logSigning True ... Log Signing: True ...
- Restart the instance:
# systemctl restart pki-tomcatd@instance_name.service
OR (if usingnuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
18.3.1.2. Configuring Audit Events
18.3.1.2.1. Enabling and Disabling Audit Events
18.3.1.2.2. Filtering Audit Events
Type | Format | Example |
---|---|---|
Presence | (attribute=*) | (ReqID=*) |
Equality | (attribute=value) | (Outcome=Failure) |
Substring | (attribute=initial*any*...*any*final) | (SubjectID=*admin*) |
AND operation | (&(filter_1)(filter_2)...(filter_n)) | (&(SubjectID=admin)(Outcome=Failure)) |
OR operation | (|(filter_1)(filter_2)...(filter_n)) | (|(SubjectID=admin)(Outcome=Failure)) |
NOT operation | (!(filter)) | (!(SubjectID=admin)) |
Example 18.2. Filtering Audit Events
$ pki-server ca-audit-event-show PROFILE_CERT_REQUEST Event Name: PROFILE_CERT_REQUEST Enabled: True Filter: None $ pki-server ca-audit-event-show CERT_REQUEST_PROCESSED Event Name: CERT_REQUEST_PROCESSED Enabled: True Filter: None
InfoName
field set to rejectReason
or cancelReason
:
- Execute the following commands:
$ pki-server ca-audit-event-update PROFILE_CERT_REQUEST --filter "(Outcome=Failure)" ... Filter: (Outcome=Failure) $ pki-server ca-audit-event-update CERT_REQUEST_PROCESSED --filter "(|(InfoName=rejectReason)(InfoName=cancelReason))" ... Filter: (|(InfoName=rejectReason)(InfoName=cancelReason))
- Restart Certificate System:
# systemctl restart pki-tomcatd@instance_name.service
OR (if usingnuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
18.3.2. Configuring Self-Tests
CS.cfg
file. If a self-test is enabled, that self-test is listed for either on-demand or start up and is either empty or set as critical
.
critical
after the name of the self-test. Otherwise, nothing is in this place. The server shuts down when a critical self-test fails during on demand self-tests; the server will not start when a critical self-test fails during start up.
CS.cfg
file.
18.3.2.1. Default Self-Tests at Startup
CAPresence
- used to verify the presence of the CA subsystem.CAValidity
- used to determine that the CA subsystem is currently valid and has not expired. This involves checking the expiration of the CA certificate.SystemCertsVerification
- used to determine that the system certificates are currently valid and have not expired or been revoked. For the CA subsystem, only validity tests for each certificate are done, leaving out certificate verification tests which could result in an OCSP request. This behavior can be overridden with the following config parameter:selftests.plugin.SystemCertsVerification.FullCAandOCSPVerify=true
By default, this config parameter is consideredfalse
if not present at all.
KRAPresence
- used to verify the presence of the KRA subsystem.KRAValidity
- used to determine that the KRA subsystem is currently valid and has not expired. This involves checking the expiration of the KRA certificate.SystemCertsVerification
- used to determine that the system certificates are currently valid and have not expired or been revoked.
OCSPPresence
- used to verify the presence of the OCSP subsystem.OCSPValidity
- used to determine that the OCSP subsystem is currently valid and has not expired. This involves checking the expiration of the OCSP certificate.SystemCertsVerification
- used to determine that the system certificates are currently valid and have not expired or been revoked. For the OCSP subsystem, only validity tests for each certificate are done, leaving out certificate verification tests which could result in an OCSP request. This behavior can be overridden with the following config parameter:selftests.plugin.SystemCertsVerification.FullCAandOCSPVerify=true
By default, this config parameter is consideredfalse
if not present at all.
TKSKnownSessionKey
- used to verify the known session key of a TKS subsystem. This verifies the TKS is able to properly assist in creating keys on behalf of the TPS and supported smart cards.SystemCertsVerification
- used to determine that the system certificates are currently valid and have not expired or been revoked.
TPSPresence
- used to verify the presence of the TPS subsystem.TPSValidity
- used to determine that the TPS subsystem is currently valid and has not expired. This involves checking the expiration of the TPS certificate.SystemCertsVerification
- used to determine that the system certificates are currently valid and have not expired or been revoked.
18.3.2.2. Modifying Self-Test Configuration
- Stop the subsystem instance.
- Open the
CS.cfg
file located in the instance'sconf/
directory. - To edit the settings for the self-test log, edit the entries that begin with
selftests.container.logger
. Unless otherwise specified, these parameters do not affect compliance. These include the following parameters:- bufferSize — Specify the buffer size in kilobytes (KB) for the log. The default size is 512 KB. Once the buffer reaches this size, the contents of the buffer are flushed out and copied to the log file.
- enable — Specify
true
to enable. Only enabled logs actually record events. This value must be enabled for compliance. - fileName — Specify the full path, including the filename, to the file to write messages. The server must have read/write permission to the file. By default, the self-test log file is
/var/log/pki-name/logs/selftest.log
- flushInterval — Specify the interval, in seconds, to flush the buffer to the file. The default interval is 5 seconds. The
flushInterval
is the amount of time before the contents of the buffer are flushed out and added to the log file. - level — The default selection is 1; this log is not set up for any level beside 1.
- maxFileSize — Specify the file size in kilobytes (KB) for the error log. The default size is 100 KB. The
maxFileSize
determines how large a log file can become before it is rotated. Once it reaches this size, the file is copied to a rotated file, and a new log file is started. - rolloverInterval — Specify the frequency at which the server rotates the active error log file. The choices are hourly, daily, weekly, monthly, and yearly. The default selection is monthly.
- type — Set to
transaction
; do not change this.
- To edit the order in which the self-test are run, specify the order by listing any of the self-test as the value of the following parameters separated by a comma and a space.To mark a self-test critical, add a colon and the word critical to the name of the self-test in the list.To disable a self-test, remove it as the value of either the
selftests.container.order.onDemand
orselftests.container.order.startup
parameters. - Save the file.
- Start the subsystem.
18.3.3. Additional Configuration for Debug Log
18.3.3.1. Enabling and Disabling Debug Logging
- Edit the
/var/lib/pki/instance_name/subsystem_type/conf/CS.cfg
file and set thedebug.enabled
parameter:- To disable debug logging, set:
debug.enabled=false
Note
Debug logs are not part of audit logging. Debug logs are helpful when trying to debug specific failures in Certificate System or a failing installation.By default, debug logs are enabled. If it is not desired, the administrator can safely disable debug logging to turn down verbosity. - To enable debug logging, set:
debug.enabled=true
- Restart the Certificate System instance:
# systemctl restart pki-tomcatd@instance-name.service
OR (if usingnuxwdog watchdog
)# systemctl restart pki-tomcatd-nuxwdog@instance-name.service
18.3.3.2. Setting up Rotation of Debug Log Files
logrotate
, to rotate the logs.
Example 18.3. Using logrotate
to Rotate Debug Logs
/etc/logrotate.d/rhcs_debug
with the following content:
/var/log/pki/instance_name/subsystem/debug { copytruncate weekly rotate 5 notifempty missingok }
/var/log/pki/instance_name/ca/debug /var/log/pki/instance_name/kra/debug { ... }
logrotate
and the parameters used in the example, see the logrotate(8) man page.
18.4. Audit Retention
- Extended Audit Retention: Audit data that is retained for necessary maintenance for a certificate's lifetime (from issuance to its expiration or revocation date). In Certificate System, they appear in the following areas:
- Signed audit logs: All events defined in Appendix E. Audit Events of Red Hat Certificate System's Administration Guide.
- In the CA's internal LDAP server, certificate request records received by the CA and the certificate records as the requests are approved.
- Normal Audit Retention: Audit data that is typically retained only to support normal operation. This includes all events that do not fall under the extended audit retention category.
Note
18.4.1. Location of Audit Data
18.4.1.1. Location of Audit Logs
/var/log/pki-name/logs/signedAudit/
directory. For example, the audit logs of a CA are stored in the /var/lib/pki/instance_name/ca/logs/signedAudit/
directory. Normal users cannot access files in this directory. See
Important
18.4.1.2. Location of Certificate Requests and Certificate Records
pkispawn
utility:
pki_ds_hostname
pki_ds_ldap_port
pki_ds_database
pki_ds_base_dn
- Log into the CA EE portal under
https://host_name:port/ca/ee/ca/
. - Click.
- Enter the Request Identifier.
- Click.
- Search for Validity.
- Log into the CA EE portal under
https://host_name:port/ca/ee/ca/
. - Enter the serial number range. If you search for one specific record, enter the record's serial number in both the lowest and highest serial number field.
- Click on the search result.
- Search for Validity.
Important
Chapter 19. Creating a Role User
- Create a Certificate System administrative user on the operating system
- Create a PKI role in Certificate System
19.1. Creating a PKI Administrative User on the Operating System
Note
- Create the
pkiadmin
group on the operating system.# groupadd -r pkiadmin
- Add the
pkiuser
to thepkiadmin
group:# usermod -a -G pkiadmin pkiuser
- Create a user on the operating system. For example, to create the
jsmith
account:# useradd -g pkiadmin -d /home/jsmith -s /bin/bash -c "Red Hat Certificate System Administrator John Smith" -m jsmith
For details, see the useradd(8) man page. - Add the user
jsmith
to thepkiadmin
group:# usermod -a -G pkiadmin jsmith
For details, see the usermod(8) man page.If you are using a nCipher hardware security module (HSM), add the user who manages the HSM device to thenfast
group:# usermod -a -G nfast pkiuser # usermod -a -G nfast jsmith
- Add proper
sudo
rules to allow thepkiadmin
group to Certificate System and other system services.For both simplicity of administration and security, the Certificate System and Directory Server processes can be configured so that PKI administrators (instead of only root) can start and stop the services.A recommended option when setting up subsystems is to use apkiadmin
system group. (Details are Section 6.9, “Certificate System Operating System Users and Groups”). All of the operating system users which will be Certificate System administrators are then added to this group. If thispkiadmin
system group exists, then it can be granted sudo access to perform certain tasks.- Edit the
/etc/sudoers
file; on Red Hat Enterprise Linux, this can be done using thevisudo
command:# visudo
- Depending on what is installed on the machine, add a line for the Directory Server, the Administration Server, PKI management tools, and each PKI subsystem instance, granting
sudo
rights to thepkiadmin
group:# For Directory Server services %pkiadmin ALL = PASSWD: /usr/bin/systemctl * dirsrv.target %pkiadmin ALL = PASSWD: /usr/bin/systemctl * dirsrv-admin.service # For PKI instance management %pkiadmin ALL = PASSWD: /usr/sbin/pkispawn * %pkiadmin ALL = PASSWD: /usr/sbin/pkidestroy * # For PKI instance services %pkiadmin ALL = PASSWD: /usr/bin/systemctl * pki-tomcatd@instance_name.service
Important
Make sure to set sudo permissions for every Certificate System, Directory Server, and Administration Server on the machine — and only for those instances on the machine. There could be multiple instances of the same subsystem type on a machine or no instance of a subsystem type. It depends on the deployment. - Set the group on the following files to
pkiadmin
:# chgrp pkiadmin /etc/pki/instance_name/server.xml # chgrp -R pkiadmin /etc/pki/instance_name/alias # chgrp pkiadmin /etc/pki/instance_name/subsystem/CS.cfg # chgrp pkiadmin /var/log/pki/instance_name/subsystem/debug
19.2. Creating a PKI Role User in Certificate System
Chapter 20. Deleting the Bootstrap User
Important
20.1. Disabling Multi-roles Support
multirole
attribute in the instance's configuration.
- Stop the server:
# systemctl stop pki-tomcatd@instance_name.service
OR (if usingnuxwdog watchdog
)# systemctl stop pki-tomcatd-nuxwdog@instance_name.service
- Open the
CS.cfg
file:vim /var/lib/pki/instance_name/ca/conf/CS.cfg
- Change the
multiroles.enable
parameter value fromtrue
tofalse
. - Add or edit the list of default roles in Certificate System that are affected by the multi-roles setting. If multi-roles is disabled and a user belongs to one of the roles listed in the
multiroles.false.groupEnforceList
parameter, then the user cannot be added to any group for any of the other roles in the list.multiroles.false.groupEnforceList
=Administrators,Auditors,Trusted Managers,Certificate Manager Agents,Registration Manager Agents,Key Recovery Authority Agents,Online Certificate Status Manager Agents,Token Key Service Manager Agents,Enterprise CA Administrators,Enterprise KRA Adminstrators,Enterprise OCSP Administrators,Enterprise TKS Administrators,Enterprise TPS Administrators,Security Domain Administrators,Subsystem Group - Restart the server:
# systemctl start pki-tomcatd@instance_name.service
OR (if usingnuxwdog watchdog
)# systemctl start pki-tomcatd-nuxwdog@instance_name.service
Part IV. Upgrading to Certificate System 10.x
Chapter 21. Upgrading from Certificate System 9 to Certificate System 10
21.1. Migrating a CA
21.1.1. Exporting Data from the Previous System
/var/lib/pki/<instance_name>
.
- Export the CA signing certificate and key.
#
grep internal= /var/lib/pki/<instance_name>/conf/password.conf | awk -F= '{print $2;}' > internal.txt
#
echo <Secret.123> > password.txt
#
PKCS12Export -d /var/lib/pki/<instance_name>/alias -p internal.txt -o ca.p12 -w password.txt
- Export the Certificate Signing Requests (CSR).
#
echo "-----BEGIN NEW CERTIFICATE REQUEST-----" > ca_signing.csr
#
sed -n "/^ca.signing.certreq=/ s/^[^=]*=// p" < /var/lib/pki/<instance_name>/ca/conf/CS.cfg >> ca_signing.csr
#
echo "-----END NEW CERTIFICATE REQUEST-----" >> ca_signing.csr
- If the old CA is an intermediate CA (with a single root CA in the chain), extract the root CA from the NSS database:
#
certutil -L -d /var/lib/pki/<instance_name>/alias/ -n root_CA_nickname -a > ca_rootca_signing.crt
- Back up the internal LDAP database.
- Find the name of the CA database by checking the value of
internaldb.database
in the CA'sCS.cfg
:#
grep internaldb.database /etc/pki/<instance_name>/ca/CS.cfg
internaldb.database=<CS_database_name> - Export this database to a
.ldif
file using the instance-specific script generated bysetup-ds.pl
when the instance was created:#
cd /usr/lib64/dirsrv/<instance_name>
#
./db2ldif -n "<CS_database_name>" -a /tmp/old_ca.ldif
Thedb2ldif
command runs as the DB user, so it needs a destination folder with writing permissions.
- Transfer the
old_ca.ldif
,ca.p12
,ca_signing.csr
files to the new CA machine. If the CA being migrated is also an intermediate CA, transfer theca_rootca_signing.crt
as well.
21.1.2. Verifying the PKCS12 file
PKCS12
file contains all the system certificates for the old system. Verify that the file includes the CA signing certificate and the key.
Note
pki pkcs12
commands with an NSS database. For more information, see the pki-pkcs12
CLI.
- Find the CA signing certificate and the key.
$
echo "<Secret.123>" > password.txt
$
pki pkcs12-cert-find --pkcs12-file ca.p12 --pkcs12-password-file password.txt
$
pki pkcs12-key-find --pkcs12-file ca.p12 --pkcs12-password-file password.txt
- Verify the presence of the trust flags of the CA signing certificate. If the flags are not "CTu,Cu,Cu" or they are missing, add them.
$
pki pkcs12-cert-mod "<caSigningCert cert-pki-rootCA>" \ --pkcs12-file ca.p12 --pkcs12-password-file password.txt \ --trust-flags "CTu,Cu,Cu"
- Remove other certificates and keys.
$
pki pkcs12-cert-del "<Server-Cert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
$
pki pkcs12-cert-del "<subsystemCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
$
pki pkcs12-cert-del "<ocspSigningCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
$
pki pkcs12-cert-del "<auditSigningCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
- If the CA being migrated is also an intermediate CA, remove the root CA certificate from the
PKCS#12
file.$
pki pkcs12-cert-del "<Top-level Root CA Signing Certificate>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
21.1.3. Setting up the CA on the New Host
- Create a configuration file for
pkispawn
, for example CA.cfg, using the parameters of the old CA. This instance runs on the standard port (389).[DEFAULT] pki_instance_name=<new_instance_name> pki_admin_password=<caadmin_password> pki_client_pkcs12_password=<pkcs12_file_password> pki_ds_password=<DS_password> pki_ds_ldap_port=389 pki_existing=True [CA] pki_ca_signing_csr_path=<path/to/ca_signing.csr> pki_ca_signing_cert_path=<path/to/ca_signing.crt> pki_ca_signing_nickname=<caSigningCert cert-nickname> pki_ds_base_dn=<o=pki-tomcat-CA> pki_ds_database=<instance_name-CA> pki_serial_number_range_start=<starting_number_for_cert_serial_numbers> pki_request_number_range_start=<starting_number_for_request_IDs> pki_master_crl_enable=False
If the old CA is an intermediate CA, add the following two lines to the configuration file. They correspond to the path to the root CA certificate and the nickname to use when storing the certificate in the NSS database.pki_cert_chain_path=<rootca_signing.crt> pki_cert_chain_nickname=<caSigningCert cert-pki-ca>
For details and parameter descriptions, see the pkispawn(8) man page. - Run
pkispawn
on the new host to create the new CA instance:#
pkispawn -s CA -f ca.cfg -v
Note
21.1.4. Importing the Old Data into the New CA
- Stop the CA service.
#
systemctl stop pki-tomcatd@<instance_name>.service
- Optional: Back up the CA database on the new host.
#
dsctl -v idm-qe-01 db2bak
The backup is stored in the/var/lib/dirsrv/<instance_name>/bak/<host_name-time_stamp>/
directory. - Remove the certificate entry for the signing certificate from the new RHEL 8 internal database.
#
ldapdelete -x -w <password< -D 'cn=Directory Manager' "cn=<serial_number<,ou=certificateRepository,ou=ca,o=pki-tomcat-CA"
The entry is now imported from the old data, so that the CRL attributes in that entry point to the correct entries. - Import the data into the new database:
#
ldapmodify -x -W <password> -D 'cn=Directory Manager' -a -c -f <path/to/old_ca.ldif>
Theldapmodify
utility only adds new entries and does not update existing entries, created when you installed the CA. - Optional: Verify the output in the
import.log
file. You can search for failed actions, such asldap_add: Invalid syntax (21)
. - Remove the directory entry for the old security domain.
#
ldapmodify -W <password> -x -D "cn=Directory Manager"
dn: cn=<server.example.com:9445>,cn=CAList,ou=Security Domain,<o=pki-tomcat-CA> changetype: delete - Enable the
ca.crl.MasterCRL.enable
parameter in the/etc/pki/<instance_name>/ca/CS.cfg
file, to have the CA act as the certificate revocation list (CRL) master:ca.crl.MasterCRL.enable=true
- Restart the CA service:
#
systemctl start pki-tomcatd@<instance_name>
21.1.5. Reassigning Users to Default Groups
ldapmodify
or pki
utility.
- Set up the client:
#
pki -c <password> client-init
Client initialized#
pk12util -i ~/.dogtag/<instance_name>/ca_admin_cert.p12 -d ~/.dogtag/nssdb/
Enter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: pk12util: PKCS12 IMPORT SUCCESSFUL ... - Add the
user
account to theAdministrators
andSecurity Domain Administrators
groups:# pki -n "<PKI Administrator for example.com>" -c <password> \ user-membership-add <user_name> "Certificate Manager Agents"
The default (bootstrap) admin users in RHCS 9 and RHCS 10 have the same default roles, that is the same group membership. However, if you have a non-default admin user or have customized the admin roles in RHCS 9, those changes might not be migrated properly. In this case, reconfigure the roles in RHCS 10:# pki -n "<PKI Administrator for example.com>" -c <password> \ user-membership-add <user> "Administrators" # pki -n "<PKI Administrator for example.com>" -c <password> \ user-membership-add <user> "Security Domain Administrators"
ca-cert-find
command.
21.2. Migrating a KRA
Hostname | PKI KRA Version |
---|---|
alpha.example.com | PKI KRA 10.5 on RHCS 9.7 |
omega.example.com | PKI KRA 10.13 on RHCS 10.6 |
21.2.1. Setting Up the KRA on the New Host
root
user:
- Install and configure a new PKI 10.13 KRA on omega.example.com.
- Stop the KRA instance.
#
systemctl stop pki-tomcatd@<pki-kra>
- Create a directory to export all required files.
#
mkdir -p /export/pki
- Export KRA storage certificates to a file. You will need the KRA storage certificate later to re-encrypt the decrypted old data from the KRA on alpha. In the following example, the file is called omega.crt:
#
cd /var/lib/pki/<pki-kra>/alias/
#
pki-server cert-export kra_storage -i <pki-kra> --cert-file <omega.crt>
Certificate: Data: Version: 3 (0x2) Serial Number: 8 (0x8) Signature Algorithm: sha256WithRSAEncryption Issuer: O = example.com Security Domain, OU = topology-02-CA, CN = CA Signing Certificate Validity Not Before: Dec 19 10:58:02 2019 GMT Not After : Dec 8 10:58:02 2021 GMT Subject: O = example.com Security Domain, OU = topology-02-KRA, CN = DRM Storage Certificate Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:99:c1:f6:f4:0d:75:67:ff:58:3a:28:ee:34:f1: 40:0a:e1:5b:f3:9d:f4:c2:5a:1e:d0:d5:0c:62:c1: - Move the
omega.crt
file to the/export/pki
directory.#
mv omega.crt /export/pki/
- Stop the Directory Server.
#
systemctl stop dirsrv@omega
Note
Ifdb2ldif
is missing, install the 389-ds-base-legacy-tools package. - Extract the KRA LDAP database configurations. You will need the new KRA LDAP database configurations for transforming the old data to the new.
#
/usr/lib64/dirsrv/slapd-omega/db2ldif -n <pki-kra-KRA> -a /tmp/omega.ldif
- Move the
/tmp/omega.ldif
file to the/export/pki
directory.#
mv /tmp/omega.ldif /export/pki/
21.2.2. Exporting Contents from the Previous System
root
user:
- Create a common directory:
#
mkdir -p /export/pki
- Stop the Directory Server. In this example, the server is named alpha:
#
systemctl stop dirsrv@alpha
- Generate the LDIF from the KRA LDAP database:
#
/usr/lib64/dirsrv/slapd-alpha/db2ldif -n <pki-kra-KRA> -a /tmp/alpha.ldif
- Move the
/tmp/alpha.ldif
file to/export/pki
directory:#
mv /tmp/alpha.ldif /export/pki/
- Copy the KRA NSS security databases to the data area:
#
cp -p /var/lib/pki/<pki-kra>/alias/* /export/pki/
- Go to the /export/pki directory:
#
cd /export/pki
- Obtain the flat-file containing the new KRA’s storage certificate from omega.example.com:
sftp root@omega.example.com sftp> cd /export/pki sftp> get omega.crt sftp> quit
- Obtain the internal password:
#
cat /var/lib/<instance_name>/conf/password.conf
- Run the
KRATool
on alpha.example.com:# KRATool \ -kratool_config_file /usr/share/pki/java-tools/KRATool.cfg \ -source_ldif_file /export/pki/alpha.ldif \ -target_ldif_file /export/pki/alpha2omega.ldif \ -log_file /tmp/KRATool_26_05_2023.log \ -source_pki_security_database_path /export/pki/ \ -source_storage_token_name "Internal Key Storage Token" \ -source_storage_certificate_nickname "<storageCert cert-pki-tomcat KRA>" \ -target_storage_certificate_file /export/pki/omega.crt \ -source_kra_naming_context alpha.example.com \ -target_kra_naming_context omega.example.com \ -unwrap_algorithm AES \ -process_requests_and_key_records_only PROCESSING KRATOOL CONFIG FILE: ................................... FINISHED. SUCCESSFULLY processed kratool config file! Initializing source PKI security databases in '/export/pki/'. Retrieving token from CryptoManager. Retrieving source storage token called 'Internal Key Storage Token'. Retrieving source storage cert with nickname of 'storageCert cert-pki-tomcat KRA'. BEGIN: Obtaining the private key from the source storage token . . . Enter password for Internal Key Storage Token ************ FINISHED: Obtaining the private key from the source storage token. BEGIN: Obtaining the public key from the target storage certificate . . . FINISHED: Obtaining the public key from the target storage certificate. PROCESSING: xxxxxxxxxxxxxxxxxxxxxxxxx...... SUCCESSFULLY converted source LDIF file --> target LDIF file! FINISHED "KRATool -kratool_config_file /usr/share/pki/java-tools/KRATool.cfg -source_ldif_file /export/pki/alpha.ldif -target_ldif_file /export/pki/alpha2omega.ldif -log_file /tmp/DRMTool_20_05_2021.log -source_pki_security_database_path /export/pki/ -source_storage_token_name 'Internal Key Storage Token' -source_storage_certificate_nickname 'storageCert cert-pki-tomcat KRA' -target_storage_certificate_file /export/pki/omega.crt -source_pki_security_database_pwdfile '/export/pki/password.cfg' -source_kra_naming_context 'alpha.example.com' -target_kra_naming_context 'omega.example.com' -process_requests_and_key_records_only"
Note
Alternatively, you can create a plain-text file protected from unauthorized access containing one and only password that will be automatically accessed by a certificate or a certificate database. Add this file toKRATool
with the-source_pki_security_database_pwdfile <path_to_PKI_password_file>
command-line option. - Copy the
alpha2omega.ldif
file to omega.example.com:sftp root@omega.example.com sftp> cd /export/pki sftp> put alpha2omega.ldif sftp> quit
21.2.3. Importing the Data into the New KRA
root
user:
- Go to
/export/pki
directory#
cd /export/pki
- Concatenate the
ldif
files:#
cat omega.ldif alpha2omega.ldif > omega_alpha.ldif
- Import the
omega_alpha.ldif
file into the LDAP database associated with the PKI KRA:#
/usr/lib64/dirsrv/slapd-omega/ldif2db -n <pki-kra-KRA> -i /export/pki/omega_alpha.ldif
- Start the Directory Server:
#
systemctl start dirsrv@omega
- Start the KRA instance.
#
systemctl start pki-tomcatd@<pki-kra>
21.2.4. Validating the presence of migrated keys from the KRA Agent Page
[root@pki1 pki]#
pki -d /root/nssdb/ -p 21080 -n '<PKI Administrator - example.com Security Domain>' kra-key-find
Enter password for Internal Key Storage Token ---------------- 3 key(s) matched ---------------- Key ID: 0x1 Algorithm: 1.2.840.113549.1.1.1 Size: 1024 Owner: UID=alpha1 Key ID: 0x2 Algorithm: 1.2.840.113549.1.1.1 Size: 1024 Owner: UID=alpha2 Key ID: 0x3 Algorithm: 1.2.840.113549.1.1.1 Size: 1024 Owner: UID=alpha3 ---------------------------- Number of entries returned 3 ----------------------------
21.2.5. Post-Upgrade Testing
Procedure 21.1. Key Recovery Test
- Display the base64 user certificate created before upgrade.
#
<pki -n 'PKI Administrator - example.com>' -c <Secret.123> ca-cert-export <0xd>
Serial Number: 0xd Subject DN: UID=alpha Issuer DN: CN=CA Signing Certificate,OU=pki-tomcat,O=example.com Security Domain Status: VALID Not Valid Before: Wed Jun 07 01:49:07 EDT 2023 Not Valid After: Mon Dec 04 01:49:07 EST 2023 ----BEGIN CERTIFICATE---- MIIDODCCAiCgAwIBAgIBDTANBgkqhkiG9w0BAQsFADBtMTUwMwYDVQQKDCxpZG1xZS5sYWIuZW5n LmJvcy5yZWRoYXQuY29tIFNlY3VyaXR5IERvbWFpbjETMBEGA1UECwwKcGtpLXRvbWNhdDEfMB0G A1UEAwwWQ0EgU2lnbmluZyBDZXJ0aWZpY2F0ZTAeFw0yMzA2MDcwNTQ5MDdaFw0yMzEyMDQwNjQ5 [...output truncated...] EJyoMFM+RaAcTh+C3S0JZEoKlAS3UlJOMxk3BFZdWpv7ia+1faV6LFPZSCZ/m8i2c3KZNxFW2xv1 DTIIVc7a1uEDApVDHf5aFcm0nGpEVeK+yvP4r1eD ----END CERTIFICATE---- - Use this certificate to generate a key recovery request through KRA Agent UI.
- Approve the recovery request.
#
pki -c <Secret.123> -n '<PKI Administrator - example.com Security Domain>' -p 8443 -P https kra-key-request-review <0x2> --action approve
----- Result ------ Request ID: 0x2 Type: recovery Status: approved - Download the key from the KRA UI.
Chapter 22. Upgrading Certificate System 10 to the latest minor version
- Upgrade all packages on the server:
# yum update
During the update, Certificate System configuration files, such as/etc/pki/<instance_name>/subsystem/CS.cfg
and/etc/pki/<instance_name>/server.xml
, are automatically modified to the new version.Log files generated during the Certificate System upgrade are:/var/log/pki/pki-server-upgrade-version.log
/var/log/pki/pki-upgrade-version.log
Note that the version number in the log file's name represent the pki* package version and not the Certificate System version.Note
If Directory Server is installed on a different host, additionally update all packages on that host as well. For details about updating Directory Server, see:- the corresponding chapter in the Red Hat Directory Server Installation G e.
- Red Hat Directory Server Release Notes for notable changes, bug fixes, and known issues in Directory Server.
- Restart the Certificate System instance:
# systemctl restart pki-tomcatd@<instance_name>.service
Note
Part V. Uninstalling Certificate System Subsystems
Chapter 23. Removing a Subsystem
pkidestroy -s subsystem_type -i instance_name
-s
option specifies the subsystem to be removed (such as CA, KRA, OCSP, TKS, or TPS). The -i
option specifies the instance name, such as pki-tomcat
.
Example 23.1. Removing a CA Subsystem
$ pkidestroy -s CA -i pki-tomcat Loading deployment configuration from /var/lib/pki/pki-tomcat/ca/registry/ca/deployment.cfg. Uninstalling CA from /var/lib/pki/pki-tomcat. Removed symlink /etc/systemd/system/multi-user.target.wants/pki-tomcatd.target. Uninstallation complete.
pkidestroy
utility removes the subsystem and any related files, such as the certificate databases, certificates, keys, and associated users. It does not uninstall the subsystem packages. If the subsystem is the last subsystem on the server instance, the server instance is removed as well.
Chapter 24. Removing Certificate System Subsystem Packages
yum
, to remove each package individually.
- Remove all the associated subsystems. For example:
pkidestroy -s CA -i pki-tomcat
- Run the uninstall utility. For example:
yum remove pki-subsystem_type
The subsystem type can beca
,kra
,ocsp
,tks
, ortps
. - To remove other packages and dependencies, remove the packages specifically, using
yum
. The complete list of installed packages is at Section 7.2, “Certificate System Packages”.
Glossary
A
- access control
- The process of controlling what particular users are allowed to do. For example, access control to servers is typically based on an identity, established by a password or a certificate, and on rules regarding what that entity can do. See also access control list (ACL).
- access control instructions (ACI)
- An access rule that specifies how subjects requesting access are to be identified or what rights are allowed or denied for a particular subject. See access control list (ACL).
- access control list (ACL)
- A collection of access control entries that define a hierarchy of access rules to be evaluated when a server receives a request for access to a particular resource. See access control instructions (ACI).
- administrator
- The person who installs and configures one or more Certificate System managers and sets up privileged users, or agents, for them. See also agent.
- Advanced Encryption Standard (AES)
- The Advanced Encryption Standard (AES), like its predecessor Data Encryption Standard (DES), is a FIPS-approved symmetric-key encryption standard. AES was adopted by the US government in 2002. It defines three block ciphers, AES-128, AES-192 and AES-256. The National Institute of Standards and Technology (NIST) defined the AES standard in U.S. FIPS PUB 197. For more information, see http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf.
- agent
- A user who belongs to a group authorized to manage agent services for a Certificate System manager. See also Certificate Manager agent, Key Recovery Authority agent.
- agent services
- 1. Services that can be administered by a Certificate System agent through HTML pages served by the Certificate System subsystem for which the agent has been assigned the necessary privileges.2. The HTML pages for administering such services.
- agent-approved enrollment
- An enrollment that requires an agent to approve the request before the certificate is issued.
- APDU
- Application protocol data unit. A communication unit (analogous to a byte) that is used in communications between a smart card and a smart card reader.
- attribute value assertion (AVA)
- An assertion of the form attribute = value, where attribute is a tag, such as
o
(organization) oruid
(user ID), and value is a value such as "Red Hat, Inc." or a login name. AVAs are used to form the distinguished name (DN) that identifies the subject of a certificate, called the subject name of the certificate. - audit log
- A log that records various system events. This log can be signed, providing proof that it was not tampered with, and can only be read by an auditor user.
- auditor
- A privileged user who can view the signed audit logs.
- authentication
- Confident identification; assurance that a party to some computerized transaction is not an impostor. Authentication typically involves the use of a password, certificate, PIN, or other information to validate identity over a computer network. See also password-based authentication, certificate-based authentication, client authentication, server authentication.
- authentication module
- A set of rules (implemented as a Java™ class) for authenticating an end entity, agent, administrator, or any other entity that needs to interact with a Certificate System subsystem. In the case of typical end-user enrollment, after the user has supplied the information requested by the enrollment form, the enrollment servlet uses an authentication module associated with that form to validate the information and authenticate the user's identity. See servlet.
- authorization
- Permission to access a resource controlled by a server. Authorization typically takes place after the ACLs associated with a resource have been evaluated by a server. See access control list (ACL).
- automated enrollment
- A way of configuring a Certificate System subsystem that allows automatic authentication for end-entity enrollment, without human intervention. With this form of authentication, a certificate request that completes authentication module processing successfully is automatically approved for profile processing and certificate issuance.
B
- bind DN
- A user ID, in the form of a distinguished name (DN), used with a password to authenticate to Red Hat Directory Server.
C
- CA certificate
- A certificate that identifies a certificate authority. See also certificate authority (CA), subordinate CA, root CA.
- CA hierarchy
- A hierarchy of CAs in which a root CA delegates the authority to issue certificates to subordinate CAs. Subordinate CAs can also expand the hierarchy by delegating issuing status to other CAs. See also certificate authority (CA), subordinate CA, root CA.
- CA server key
- The SSL server key of the server providing a CA service.
- CA signing key
- The private key that corresponds to the public key in the CA certificate. A CA uses its signing key to sign certificates and CRLs.
- certificate
- Digital data, formatted according to the X.509 standard, that specifies the name of an individual, company, or other entity (the subject name of the certificate) and certifies that a public key, which is also included in the certificate, belongs to that entity. A certificate is issued and digitally signed by a certificate authority (CA). A certificate's validity can be verified by checking the CA's digital signature through public-key cryptography techniques. To be trusted within a public-key infrastructure (PKI), a certificate must be issued and signed by a CA that is trusted by other entities enrolled in the PKI.
- certificate authority (CA)
- A trusted entity that issues a certificate after verifying the identity of the person or entity the certificate is intended to identify. A CA also renews and revokes certificates and generates CRLs. The entity named in the issuer field of a certificate is always a CA. Certificate authorities can be independent third parties or a person or organization using certificate-issuing server software, such as Red Hat Certificate System.
- certificate chain
- A hierarchical series of certificates signed by successive certificate authorities. A CA certificate identifies a certificate authority (CA) and is used to sign certificates issued by that authority. A CA certificate can in turn be signed by the CA certificate of a parent CA, and so on up to a root CA. Certificate System allows any end entity to retrieve all the certificates in a certificate chain.
- certificate extensions
- An X.509 v3 certificate contains an extensions field that permits any number of additional fields to be added to the certificate. Certificate extensions provide a way of adding information such as alternative subject names and usage restrictions to certificates. A number of standard extensions have been defined by the PKIX working group.
- certificate fingerprint
- A one-way hash associated with a certificate. The number is not part of the certificate itself, but is produced by applying a hash function to the contents of the certificate. If the contents of the certificate changes, even by a single character, the same function produces a different number. Certificate fingerprints can therefore be used to verify that certificates have not been tampered with.
- Certificate Management Message Formats (CMMF)
- Message formats used to convey certificate requests and revocation requests from end entities to a Certificate Manager and to send a variety of information to end entities. A proposed standard from the Internet Engineering Task Force (IETF) PKIX working group. CMMF is subsumed by another proposed standard, Certificate Management Messages over Cryptographic Message Syntax (CMC). For detailed information, see https://tools.ietf.org/html/draft-ietf-pkix-cmmf-02.
- Certificate Management Messages over Cryptographic Message Syntax (CMC)
- Message format used to convey a request for a certificate to a Certificate Manager. A proposed standard from the Internet Engineering Task Force (IETF) PKIX working group. For detailed information, see https://tools.ietf.org/html/draft-ietf-pkix-cmc-02.
- Certificate Manager
- An independent Certificate System subsystem that acts as a certificate authority. A Certificate Manager instance issues, renews, and revokes certificates, which it can publish along with CRLs to an LDAP directory. It accepts requests from end entities. See certificate authority (CA).
- Certificate Manager agent
- A user who belongs to a group authorized to manage agent services for a Certificate Manager. These services include the ability to access and modify (approve and reject) certificate requests and issue certificates.
- certificate profile
- A set of configuration settings that defines a certain type of enrollment. The certificate profile sets policies for a particular type of enrollment along with an authentication method in a certificate profile.
- Certificate Request Message Format (CRMF)
- Format used for messages related to management of X.509 certificates. This format is a subset of CMMF. See also Certificate Management Message Formats (CMMF). For detailed information, see http://www.ietf.org/rfc/rfc2511.txt.
- certificate revocation list (CRL)
- As defined by the X.509 standard, a list of revoked certificates by serial number, generated and signed by a certificate authority (CA).
- Certificate System
- Certificate System console
- A console that can be opened for any single Certificate System instance. A Certificate System console allows the Certificate System administrator to control configuration settings for the corresponding Certificate System instance.
- Certificate System subsystem
- One of the five Certificate System managers: Certificate Manager, Online Certificate Status Manager, Key Recovery Authority, Token Key Service, or Token Processing System.
- certificate-based authentication
- Authentication based on certificates and public-key cryptography. See also password-based authentication.
- chain of trust
- See certificate chain.
- chained CA
- See linked CA.
- cipher
- client authentication
- The process of identifying a client to a server, such as with a name and password or with a certificate and some digitally signed data. See certificate-based authentication, password-based authentication, server authentication.
- client SSL certificate
- A certificate used to identify a client to a server using the SSL protocol. See Secure Sockets Layer (SSL).
- CMC
- CMC Enrollment
- Features that allow either signed enrollment or signed revocation requests to be sent to a Certificate Manager using an agent's signing certificate. These requests are then automatically processed by the Certificate Manager.
- CMMF
- CRL
- CRMF
- cross-certification
- The exchange of certificates by two CAs in different certification hierarchies, or chains. Cross-certification extends the chain of trust so that it encompasses both hierarchies. See also certificate authority (CA).
- cross-pair certificate
- A certificate issued by one CA to another CA which is then stored by both CAs to form a circle of trust. The two CAs issue certificates to each other, and then store both cross-pair certificates as a certificate pair.
- cryptographic algorithm
- A set of rules or directions used to perform cryptographic operations such as encryption and decryption.
- Cryptographic Message Syntax (CS)
- The syntax used to digitally sign, digest, authenticate, or encrypt arbitrary messages, such as CMMF.
- cryptographic module
- See PKCS #11 module.
- cryptographic service provider (CSP)
- A cryptographic module that performs cryptographic services, such as key generation, key storage, and encryption, on behalf of software that uses a standard interface such as that defined by PKCS #11 to request such services.
- CSP
D
- decryption
- Unscrambling data that has been encrypted. See encryption.
- delta CRL
- A CRL containing a list of those certificates that have been revoked since the last full CRL was issued.
- digital ID
- See certificate.
- digital signature
- To create a digital signature, the signing software first creates a one-way hash from the data to be signed, such as a newly issued certificate. The one-way hash is then encrypted with the private key of the signer. The resulting digital signature is unique for each piece of data signed. Even a single comma added to a message changes the digital signature for that message. Successful decryption of the digital signature with the signer's public key and comparison with another hash of the same data provides tamper detection. Verification of the certificate chain for the certificate containing the public key provides authentication of the signer. See also nonrepudiation, encryption.
- distinguished name (DN)
- A series of AVAs that identify the subject of a certificate. See attribute value assertion (AVA).
- distribution points
- Used for CRLs to define a set of certificates. Each distribution point is defined by a set of certificates that are issued. A CRL can be created for a particular distribution point.
- dual key pair
- Two public-private key pairs, four keys altogether, corresponding to two separate certificates. The private key of one pair is used for signing operations, and the public and private keys of the other pair are used for encryption and decryption operations. Each pair corresponds to a separate certificate. See also encryption key, public-key cryptography, signing key.
- Key Recovery Authority
- An optional, independent Certificate System subsystem that manages the long-term archival and recovery of RSA encryption keys for end entities. A Certificate Manager can be configured to archive end entities' encryption keys with a Key Recovery Authority before issuing new certificates. The Key Recovery Authority is useful only if end entities are encrypting data, such as sensitive email, that the organization may need to recover someday. It can be used only with end entities that support dual key pairs: two separate key pairs, one for encryption and one for digital signatures.
- Key Recovery Authority agent
- A user who belongs to a group authorized to manage agent services for a Key Recovery Authority, including managing the request queue and authorizing recovery operation using HTML-based administration pages.
- Key Recovery Authority recovery agent
- One of the m of n people who own portions of the storage key for the Key Recovery Authority.
- Key Recovery Authority storage key
- Special key used by the Key Recovery Authority to encrypt the end entity's encryption key after it has been decrypted with the Key Recovery Authority's private transport key. The storage key never leaves the Key Recovery Authority.
- Key Recovery Authority transport certificate
- Certifies the public key used by an end entity to encrypt the entity's encryption key for transport to the Key Recovery Authority. The Key Recovery Authority uses the private key corresponding to the certified public key to decrypt the end entity's key before encrypting it with the storage key.
E
- eavesdropping
- Surreptitious interception of information sent over a network by an entity for which the information is not intended.
- Elliptic Curve Cryptography (ECC)
- A cryptographic algorithm which uses elliptic curves to create additive logarithms for the mathematical problems which are the basis of the cryptographic keys. ECC ciphers are more efficient to use than RSA ciphers and, because of their intrinsic complexity, are stronger at smaller bits than RSA ciphers.
- encryption
- Scrambling information in a way that disguises its meaning. See decryption.
- encryption key
- A private key used for encryption only. An encryption key and its equivalent public key, plus a signing key and its equivalent public key, constitute a dual key pair.
- end entity
- In a public-key infrastructure (PKI), a person, router, server, or other entity that uses a certificate to identify itself.
- enrollment
- The process of requesting and receiving an X.509 certificate for use in a public-key infrastructure (PKI). Also known as registration.
- extensions field
F
- Federal Bridge Certificate Authority (FBCA)
- A configuration where two CAs form a circle of trust by issuing cross-pair certificates to each other and storing the two cross-pair certificates as a single certificate pair.
- fingerprint
- FIPS PUBS 140
- Federal Information Standards Publications (FIPS PUBS) 140 is a US government standard for implementations of cryptographic modules, hardware or software that encrypts and decrypts data or performs other cryptographic operations, such as creating or verifying digital signatures. Many products sold to the US government must comply with one or more of the FIPS standards.
- firewall
- A system or combination of systems that enforces a boundary between two or more networks.
H
- Hypertext Transport Protocol (HTTP) and Hypertext Transport Protocol Secure (HTTPS)
- Protocols used to communicate with web servers. HTTPS consists of communication over HTTP (Hypertext Transfer Protocol) within a connection encrypted by Transport Layer Security (TLS). The main purpose of HTTPS is authentication of the visited website and protection of privacy and integrity of the exchanged data.
I
- impersonation
- The act of posing as the intended recipient of information sent over a network. Impersonation can take two forms: spoofing and misrepresentation.
- input
- In the context of the certificate profile feature, it defines the enrollment form for a particular certificate profile. Each input is set, which then dynamically creates the enrollment form from all inputs configured for this enrollment.
- intermediate CA
- A CA whose certificate is located between the root CA and the issued certificate in a certificate chain.
- IP spoofing
- The forgery of client IP addresses.
- IPv4 and IPv6
- Certificate System supports both IPv4 and IPv6 address namespaces for communications and operations with all subsystems and tools, as well as for clients, subsystem creation, and token and certificate enrollment.
J
- JAR file
- A digital envelope for a compressed collection of files organized according to the Java™ archive (JAR) format.
- Java™ archive (JAR) format
- A set of conventions for associating digital signatures, installer scripts, and other information with files in a directory.
- Java™ Cryptography Architecture (JCA)
- The API specification and reference developed by Sun Microsystems for cryptographic services. See http://java.sun.com/products/jdk/1.2/docs/guide/security/CryptoSpec.Introduction.
- Java™ Development Kit (JDK)
- Software development kit provided by Sun Microsystems for developing applications and applets using the Java™ programming language.
- Java™ Native Interface (JNI)
- A standard programming interface that provides binary compatibility across different implementations of the Java™ Virtual Machine (JVM) on a given platform, allowing existing code written in a language such as C or C++ for a single platform to bind to Java™. See http://java.sun.com/products/jdk/1.2/docs/guide/jni/index.html.
- Java™ Security Services (JSS)
- A Java™ interface for controlling security operations performed by Network Security Services (NSS).
K
- KEA
- key
- A large number used by a cryptographic algorithm to encrypt or decrypt data. A person's public key, for example, allows other people to encrypt messages intended for that person. The messages must then be decrypted by using the corresponding private key.
- key exchange
- A procedure followed by a client and server to determine the symmetric keys they will both use during an SSL session.
- Key Exchange Algorithm (KEA)
- An algorithm used for key exchange by the US Government.
- KEYGEN tag
- An HTML tag that generates a key pair for use with a certificate.
L
- Lightweight Directory Access Protocol (LDAP)
- A directory service protocol designed to run over TCP/IP and across multiple platforms. LDAP is a simplified version of Directory Access Protocol (DAP), used to access X.500 directories. LDAP is under IETF change control and has evolved to meet Internet requirements.
- linked CA
- An internally deployed certificate authority (CA) whose certificate is signed by a public, third-party CA. The internal CA acts as the root CA for certificates it issues, and the third- party CA acts as the root CA for certificates issued by other CAs that are linked to the same third-party root CA. Also known as "chained CA" and by other terms used by different public CAs.
M
- manual authentication
- A way of configuring a Certificate System subsystem that requires human approval of each certificate request. With this form of authentication, a servlet forwards a certificate request to a request queue after successful authentication module processing. An agent with appropriate privileges must then approve each request individually before profile processing and certificate issuance can proceed.
- MD5
- A message digest algorithm that was developed by Ronald Rivest. See also one-way hash.
- message digest
- See one-way hash.
- misrepresentation
- The presentation of an entity as a person or organization that it is not. For example, a website might pretend to be a furniture store when it is really a site that takes credit-card payments but never sends any goods. Misrepresentation is one form of impersonation. See also spoofing.
N
- Network Security Services (NSS)
- A set of libraries designed to support cross-platform development of security-enabled communications applications. Applications built using the NSS libraries support the Secure Sockets Layer (SSL) protocol for authentication, tamper detection, and encryption, and the PKCS #11 protocol for cryptographic token interfaces. NSS is also available separately as a software development kit.
- non-TMS
- Non-token management system. Refers to a configuration of subsystems (the CA and, optionally, KRA and OCSP) which do not handle smart cards directly.
See Also token management system (TMS).
- nonrepudiation
- The inability by the sender of a message to deny having sent the message. A digital signature provides one form of nonrepudiation.
O
- object signing
- A method of file signing that allows software developers to sign Java code, JavaScript scripts, or any kind of file and allows users to identify the signers and control access by signed code to local system resources.
- object-signing certificate
- A certificate that is associated private key is used to sign objects; related to object signing.
- OCSP
- Online Certificate Status Protocol.
- one-way hash
- 1. A number of fixed-length generated from data of arbitrary length with the aid of a hashing algorithm. The number, also called a message digest, is unique to the hashed data. Any change in the data, even deleting or altering a single character, results in a different value.2. The content of the hashed data cannot be deduced from the hash.
- operation
- The specific operation, such as read or write, that is being allowed or denied in an access control instruction.
- output
- In the context of the certificate profile feature, it defines the resulting form from a successful certificate enrollment for a particular certificate profile. Each output is set, which then dynamically creates the form from all outputs configured for this enrollment.
P
- password-based authentication
- Confident identification by means of a name and password. See also authentication, certificate-based authentication.
- PKCS #10
- The public-key cryptography standard that governs certificate requests.
- PKCS #11
- The public-key cryptography standard that governs cryptographic tokens such as smart cards.
- PKCS #11 module
- A driver for a cryptographic device that provides cryptographic services, such as encryption and decryption, through the PKCS #11 interface. A PKCS #11 module, also called a cryptographic module or cryptographic service provider, can be implemented in either hardware or software. A PKCS #11 module always has one or more slots, which may be implemented as physical hardware slots in some form of physical reader, such as for smart cards, or as conceptual slots in software. Each slot for a PKCS #11 module can in turn contain a token, which is the hardware or software device that actually provides cryptographic services and optionally stores certificates and keys. Red Hat provides a built-in PKCS #11 module with Certificate System.
- PKCS #12
- The public-key cryptography standard that governs key portability.
- PKCS #7
- The public-key cryptography standard that governs signing and encryption.
- PKIX Certificate and CRL Profile
- A standard developed by the IETF for a public-key infrastructure for the Internet. It specifies profiles for certificates and CRLs.
- private key
- One of a pair of keys used in public-key cryptography. The private key is kept secret and is used to decrypt data encrypted with the corresponding public key.
- proof-of-archival (POA)
- Data signed with the private Key Recovery Authority transport key that contains information about an archived end-entity key, including key serial number, name of the Key Recovery Authority, subject name of the corresponding certificate, and date of archival. The signed proof-of-archival data are the response returned by the Key Recovery Authority to the Certificate Manager after a successful key archival operation. See also Key Recovery Authority transport certificate.
- public key
- One of a pair of keys used in public-key cryptography. The public key is distributed freely and published as part of a certificate. It is typically used to encrypt data sent to the public key's owner, who then decrypts the data with the corresponding private key.
- public-key cryptography
- A set of well-established techniques and standards that allow an entity to verify its identity electronically or to sign and encrypt electronic data. Two keys are involved, a public key and a private key. A public key is published as part of a certificate, which associates that key with a particular identity. The corresponding private key is kept secret. Data encrypted with the public key can be decrypted only with the private key.
- public-key infrastructure (PKI)
- The standards and services that facilitate the use of public-key cryptography and X.509 v3 certificates in a networked environment.
R
- RC2, RC4
- Cryptographic algorithms developed for RSA Data Security by Rivest. See also cryptographic algorithm.
- Red Hat Certificate System
- A highly configurable set of software components and tools for creating, deploying, and managing certificates. Certificate System is comprised of five major subsystems that can be installed in different Certificate System instances in different physical locations: Certificate Manager, Online Certificate Status Manager, Key Recovery Authority, Token Key Service, and Token Processing System.
- registration
- See enrollment.
- root CA
- The certificate authority (CA) with a self-signed certificate at the top of a certificate chain. See also CA certificate, subordinate CA.
- RSA algorithm
- Short for Rivest-Shamir-Adleman, a public-key algorithm for both encryption and authentication. It was developed by Ronald Rivest, Adi Shamir, and Leonard Adleman and introduced in 1978.
- RSA key exchange
- A key-exchange algorithm for SSL based on the RSA algorithm.
S
- sandbox
- A Java™ term for the carefully defined limits within which Java™ code must operate.
- secure channel
- A security association between the TPS and the smart card which allows encrypted communciation based on a shared master key generated by the TKS and the smart card APDUs.
- Secure Sockets Layer (SSL)
- A protocol that allows mutual authentication between a client and server and the establishment of an authenticated and encrypted connection. SSL runs above TCP/IP and below HTTP, LDAP, IMAP, NNTP, and other high-level network protocols.
- security domain
- A centralized repository or inventory of PKI subsystems. Its primary purpose is to facilitate the installation and configuration of new PKI services by automatically establishing trusted relationships between subsystems.
- Security-Enhanced Linux (SELinux)
- Security-enhanced Linux (SELinux) is a set of security protocols enforcing mandatory access control on Linux system kernels. SELinux was developed by the United States National Security Agency to keep applications from accessing confidential or protected files through lenient or flawed access controls.
- self tests
- A feature that tests a Certificate System instance both when the instance starts up and on-demand.
- server authentication
- The process of identifying a server to a client. See also client authentication.
- server SSL certificate
- A certificate used to identify a server to a client using the Secure Sockets Layer (SSL) protocol.
- servlet
- Java™ code that handles a particular kind of interaction with end entities on behalf of a Certificate System subsystem. For example, certificate enrollment, revocation, and key recovery requests are each handled by separate servlets.
- SHA
- Secure Hash Algorithm, a hash function used by the US government.
- signature algorithm
- A cryptographic algorithm used to create digital signatures. Certificate System supports the MD5 and SHA signing algorithms. See also cryptographic algorithm, digital signature.
- signed audit log
- See audit log.
- signing certificate
- A certificate that is public key corresponds to a private key used to create digital signatures. For example, a Certificate Manager must have a signing certificate that is public key corresponds to the private key it uses to sign the certificates it issues.
- signing key
- A private key used for signing only. A signing key and its equivalent public key, plus an encryption key and its equivalent public key, constitute a dual key pair.
- Simple Certificate Enrollment Protocol (SCEP)
- A protocol designed by Cisco to specify a way for a router to communicate with a CA for router certificate enrollment. Certificate System supports SCEP's CA mode of operation, where the request is encrypted with the CA signing certificate.
- single sign-on
- 1. In Certificate System, a password that simplifies the way to sign on to Red Hat Certificate System by storing the passwords for the internal database and tokens. Each time a user logs on, he is required to enter this single password.2. The ability for a user to log in once to a single computer and be authenticated automatically by a variety of servers within a network. Partial single sign-on solutions can take many forms, including mechanisms for automatically tracking passwords used with different servers. Certificates support single sign-on within a public-key infrastructure (PKI). A user can log in once to a local client's private-key database and, as long as the client software is running, rely on certificate-based authentication to access each server within an organization that the user is allowed to access.
- slot
- The portion of a PKCS #11 module, implemented in either hardware or software, that contains a token.
- smart card
- A small device that contains a microprocessor and stores cryptographic information, such as keys and certificates, and performs cryptographic operations. Smart cards implement some or all of the PKCS #11 interface.
- spoofing
- Pretending to be someone else. For example, a person can pretend to have the email address
jdoe@example.com
, or a computer can identify itself as a site calledwww.redhat.com
when it is not. Spoofing is one form of impersonation. See also misrepresentation. - SSL
- subject
- The entity identified by a certificate. In particular, the subject field of a certificate contains a subject name that uniquely describes the certified entity.
- subject name
- subordinate CA
- A certificate authority that is certificate is signed by another subordinate CA or by the root CA. See CA certificate, root CA.
- symmetric encryption
- An encryption method that uses the same cryptographic key to encrypt and decrypt a given message.
T
- tamper detection
- A mechanism ensuring that data received in electronic form entirely corresponds with the original version of the same data.
- token
- A hardware or software device that is associated with a slot in a PKCS #11 module. It provides cryptographic services and optionally stores certificates and keys.
- token key service (TKS)
- A subsystem in the token management system which derives specific, separate keys for every smart card based on the smart card APDUs and other shared information, like the token CUID.
- token management system (TMS)
- The interrelated subsystems — CA, TKS, TPS, and, optionally, the KRA — which are used to manage certificates on smart cards (tokens).
- token processing system (TPS)
- A subsystem which interacts directly the Enterprise Security Client and smart cards to manage the keys and certificates on those smart cards.
- Transport Layer Security (TLS)
- A set of rules governing server authentication, client authentication, and encrypted communication between servers and clients.
- tree hierarchy
- The hierarchical structure of an LDAP directory.
- trust
- Confident reliance on a person or other entity. In a public-key infrastructure (PKI), trust refers to the relationship between the user of a certificate and the certificate authority (CA) that issued the certificate. If a CA is trusted, then valid certificates issued by that CA can be trusted.
U
- UTF-8
- The certificate enrollment pages support all UTF-8 characters for specific fields (common name, organizational unit, requester name, and additional notes). The UTF-8 strings are searchable and correctly display in the CA, OCSP, and KRA end user and agents services pages. However, the UTF-8 support does not extend to internationalized domain names, such as those used in email addresses.
V
- virtual private network (VPN)
- A way of connecting geographically distant divisions of an enterprise. The VPN allows the divisions to communicate over an encrypted channel, allowing authenticated, confidential transactions that would normally be restricted to a private network.
X
- X.509 version 1 and version 3
- Digital certificate formats recommended by the International Telecommunications Union (ITU).
Index
A
- accelerators, Tokens for Storing Certificate System Subsystem Keys and Certificates
- active logs
- default file location, Logs
- message categories, Services That Are Logged
- adding new directory attributes, Adding New or Custom Attributes
- agent certificate, User Certificates
- agents
- authorizing key recovery, Recovering Keys
- port used for operations, Planning Ports
- algorithm
- cryptographic, Encryption and Decryption
- archiving
- rotated log files, Log File Rotation
- authentication
- certificate-based, Certificate-Based Authentication
- client and server, Authentication Confirms an Identity
- password-based, Password-Based Authentication
- See also client authentication, Certificate-Based Authentication
- See also server authentication, Certificate-Based Authentication
- automatic revocation checking, Enabling Automatic Revocation Checking on the CA
B
- buffered logging, Buffered and Unbuffered Logging
C
- CA
- certificate, Types of Certificates
- defined, A Certificate Identifies Someone or Something
- hierarchies and root, CA Hierarchies
- trusted, How CA Certificates Establish Trust
- CA chaining, Linked CA
- CA decisions for deployment
- CA renewal, Renewing or Reissuing CA Signing Certificates
- distinguished name, Planning the CA Distinguished Name
- root versus subordinate, Defining the Certificate Authority Hierarchy
- signing certificate, Setting the CA Signing Certificate Validity Period
- signing key, Choosing the Signing Key Type and Length
- CA hierarchy, Subordination to a Certificate System CA
- root CA, Subordination to a Certificate System CA
- subordinate CA, Subordination to a Certificate System CA
- CA scalability, CA Cloning
- CA signing certificate, CA Signing Certificates, Setting the CA Signing Certificate Validity Period
- Certificate Manager
- as root CA, Subordination to a Certificate System CA
- as subordinate CA, Subordination to a Certificate System CA
- CA hierarchy, Subordination to a Certificate System CA
- CA signing certificate, CA Signing Certificates
- chaining to third-party CAs, Linked CA
- cloning, CA Cloning
- KRA and, Planning for Lost Keys: Key Archival and Recovery
- certificate profiles
- Windows smart card login, Using the Windows Smart Card Logon Profile
- certificate-based authentication
- defined, Authentication Confirms an Identity
- certificates
- authentication using, Certificate-Based Authentication
- CA certificate, Types of Certificates
- chains, Certificate Chains
- contents of, Contents of a Certificate
- issuing of, Certificate Issuance
- renewing, Certificate Expiration and Renewal
- revoking, Certificate Expiration and Renewal
- S/MIME, Types of Certificates
- self-signed, CA Hierarchies
- verifying a certificate chain, Verifying a Certificate Chain
- changing
- DER-encoding order of DirectoryString, Changing the DER-Encoding Order
- ciphers
- defined, Encryption and Decryption
- client authentication
- SSL/TLS client certificates defined, Types of Certificates
- cloning, CA Cloning
- configuration file, CS.cfg Files
- CRL signing certificate, Other Signing Certificates
- CRLs
- Certificate Manager support for, CRLs
- publishing to online validation authority, OCSP Services
- CS.cfg, CS.cfg Files
- comments and TPS, Overview of the CS.cfg Configuration File
D
- deployment planning
- CA decisions
- distinguished name, Planning the CA Distinguished Name
- root versus subordinate, Defining the Certificate Authority Hierarchy
- signing certificate, Setting the CA Signing Certificate Validity Period
- signing key, Choosing the Signing Key Type and Length
- token management, Smart Card Token Management with Certificate System
- DER-encoding order of DirectoryString, Changing the DER-Encoding Order
- digital signatures
- defined, Digital Signatures
- directory attributes
- adding new, Adding New or Custom Attributes
- supported in CS, Changing DN Attributes in CA-Issued Certificates
- distinguished name (DN)
- extending attribute support, Changing DN Attributes in CA-Issued Certificates
- for CA, Planning the CA Distinguished Name
E
- email, signed and encrypted, Signed and Encrypted Email
- encryption
- defined, Encryption and Decryption
- public-key, Public-Key Encryption
- symmetric-key, Symmetric-Key Encryption
- Error log
- defined, Tomcat Error and Access Logs
- extending directory-attribute support in CS, Changing DN Attributes in CA-Issued Certificates
- extensions
- structure of, Structure of Certificate Extensions
- external tokens
F
- flush interval for logs, Buffered and Unbuffered Logging
H
- hardware accelerators, Tokens for Storing Certificate System Subsystem Keys and Certificates
- hardware tokens, Tokens for Storing Certificate System Subsystem Keys and Certificates
- See external tokens, Tokens for Storing Certificate System Subsystem Keys and Certificates
- how to search for keys, Archiving Keys
I
- installation, Installing and Configuring Certificate System
- planning, A Checklist for Planning the PKI
- internal tokens, Tokens for Storing Certificate System Subsystem Keys and Certificates
K
- key archival, Archiving Keys
- how it works, Archiving Keys
- how keys are stored, Archiving Keys
- how to set up, Manually Setting up Key Archival
- where keys are stored, Archiving Keys
- key length, Choosing the Signing Key Type and Length
- key recovery, Recovering Keys
- how to set up, Setting up Agent-Approved Key Recovery Schemes
- Key Recovery Authority
- setting up
- key archival, Manually Setting up Key Archival
- key recovery, Setting up Agent-Approved Key Recovery Schemes
- keys
- defined, Encryption and Decryption
- management and recovery, Key Management
- KRA
- Certificate Manager and, Planning for Lost Keys: Key Archival and Recovery
L
- linked CA, Linked CA
- location of
- active log files, Logs
- logging
- buffered vs. unbuffered, Buffered and Unbuffered Logging
- log files
- archiving rotated files, Log File Rotation
- default location, Logs
- timing of rotation, Log File Rotation
- log levels, Log Levels (Message Categories)
- default selection, Log Levels (Message Categories)
- how they relate to message categories, Log Levels (Message Categories)
- significance of choosing the right level, Log Levels (Message Categories)
- services that are logged, Services That Are Logged
- types of logs, Logs
- Error, Tomcat Error and Access Logs
O
- OCSP responder, OCSP Services
- OCSP server, OCSP Services
- OCSP signing certificate, Other Signing Certificates
P
- password
- using for authentication, Authentication Confirms an Identity
- password-based authentication, defined, Password-Based Authentication
- password.conf
- configuring contents, Configuring the password.conf File
- configuring location, Configuring the password.conf File
- contents, Configuring the password.conf File
- passwords
- configuring the password.conf file, Configuring the password.conf File
- for subsystem instances, Managing System Passwords
- used by subsystem instances, Configuring the password.conf File
- PKCS #11 support, Tokens for Storing Certificate System Subsystem Keys and Certificates
- planning installation, A Checklist for Planning the PKI
- ports
- for agent operations, Planning Ports
- how to choose numbers, Planning Ports
- private key, defined, Public-Key Encryption
- public key
- defined, Public-Key Encryption
- management, Key Management
- publishing
- of CRLs
- to online validation authority, OCSP Services
- queue, Enabling and Configuring a Publishing Queue
- (see also publishing queue)
- publishing queue, Enabling and Configuring a Publishing Queue
R
- recovering users' private keys, Recovering Keys
- root CA, Subordination to a Certificate System CA
- root versus subordinate CA, Defining the Certificate Authority Hierarchy
- rotating log files
- archiving files, Log File Rotation
- how to set the time, Log File Rotation
- RSA, Choosing the Signing Key Type and Length
S
- S/MIME certificate, Types of Certificates
- self-signed certificate, CA Hierarchies
- setting up
- key archival, Manually Setting up Key Archival
- key recovery, Setting up Agent-Approved Key Recovery Schemes
- signing certificate
- signing key, for CA, Choosing the Signing Key Type and Length
- smart cards
- Windows login, Using the Windows Smart Card Logon Profile
- SSL/TLS
- client certificates, Types of Certificates
- SSL/TLS client certificate, SSL/TLS Server and Client Certificates
- SSL/TLS server certificate, SSL/TLS Server and Client Certificates
- subordinate CA, Subordination to a Certificate System CA
- subsystems
- configuring password file, Configuring the password.conf File
T
- timing log rotation, Log File Rotation
- Token Key Service, Smart Card Token Management with Certificate System
- Token Processing System and, Smart Card Token Management with Certificate System
- Token Processing System, Smart Card Token Management with Certificate System
- scalability, Using Smart Cards
- Token Key Service and, Smart Card Token Management with Certificate System
- tokens
- defined, Tokens for Storing Certificate System Subsystem Keys and Certificates
- external, Tokens for Storing Certificate System Subsystem Keys and Certificates
- internal, Tokens for Storing Certificate System Subsystem Keys and Certificates
- viewing which tokens are installed, Viewing Tokens
- Windows login, Using the Windows Smart Card Logon Profile
- topology decisions, for deployment, Smart Card Token Management with Certificate System
- TPS
- comments in the CS.cfg file, Overview of the CS.cfg Configuration File
- Windows smart card login, Using the Windows Smart Card Logon Profile
- trusted CA, defined, How CA Certificates Establish Trust
U
- unbuffered logging, Buffered and Unbuffered Logging
- user certificate, User Certificates
W
- Windows smart card login, Using the Windows Smart Card Logon Profile
Appendix A. Revision History
Revision History | |||
---|---|---|---|
Revision 10.3-0 | Tue Feb 22 2022 | ||
| |||
Revision 10.2-0 | Wed Jul 14 2021 | ||
| |||
Revision 10.1-2 | Fri Feb 27 2021 | ||
| |||
Revision 10.1-1 | Mon Jan 25 2021 | ||
| |||
Revision 10.1-0 | Wed Dec 3 2020 | ||
| |||
Revision 10.0-1 | Tues Nov 3 2020 | ||
| |||
Revision 10.0-0 | Thur Sep 17 2020 | ||
|