Chapter 7. Step 4: Migrating Security Databases
For every Certificate System subsystem instance migration, the data from the old Certificate System's certificate (cert7.db or cert8.db) and key (key3.db) security databases must be extracted and copied into the new Certificate System's alias/ directory. Follow the migration procedure corresponding to the Certificate System being migrated.
Determine if the Certificate Management System 4.1 Certificate Authority (CA) being migrated uses security databases, HSM, or both. There are four possible migration scenarios; follow the appropriate process for the deployment scenario being migrated.
Remove all the security databases in the new Certificate System which will receive migrated data.
rm /var/lib/instance_ID/alias/cert8.db rm /var/lib/instance_ID/alias/key3.db
Copy the certificate and key security databases from the old server to the new server.
cpold_server_root/cert-old_CA_instance/config/cert-old_CA_instance-cert7.db /var/lib/instance_ID/alias/cert7.db cpold_server_root/cert-old_CA_instance/config/cert-old_CA_instance-key3.db /var/lib/instance_ID/alias/key3.db
As the Certificate System user account, open the new Certificate System alias/ directory.
cd /var/lib/instance_ID/alias/
Log in as root, and set the file user and group to the Certificate System user and group.
su chownuser:groupcert7.db chownuser:groupkey3.db
Log out as root. As the Certificate System user, set the permissions on the security database files.
chmod 00600 cert7.db
chmod 00600 key3.db
Use the certutil tool to list all of the old Certificate System certificates. In this example, -L lists the certificates, and -X forces them to be read/write.
certutil -L -X -d .Server-Cert cert-old_CA_instancecu,cu,cucaSigningCert cert-old_CA_instancecu,cu,cu
Remove the cert7.db file from the alias/ directory.
rm cert7.db
Open the CS.cfg configuration file in the CA instance directory.
cd /var/lib/instance_ID/conf vi CS.cfg
Modify the values for the ca.signing.cacertnickname and ca.ocsp_signing.cacertnickname attributes to reflect the new CA instance.
ca.signing.cacertnickname= caSigningCert cert-old_CA_instanceca.ocsp_signing.cacertnickname= caSigningCert cert-old_CA_instance
In the same directory, edit the serverCertNick.conf file to contain the old certificate nickname. For example:
vi serverCertNick.conf Server-Cert cert-old_CA_instance
Remove all the security databases in the new Certificate System which will receive migrated data.
rm /var/lib/instance_ID/alias/cert8.db rm /var/lib/instance_ID/alias/key3.db
Copy the certificate and key security databases from the old server to the new server.
cpold_server_root/cert-old_CA_instance/config/cert-old_CA_instance-cert7.db /var/lib/instance_ID/alias/cert7.db cpold_server_root/cert-old_CA_instance/config/cert-old_CA_instance-key3.db /var/lib/instance_ID/alias/key3.db
As the Certificate System user account, open the new Certificate System's alias/ directory.
cd /var/lib/instance_ID/alias/
Log in as root, and set the file user and group to the user and group as whom the Certificate System runs.
su chownuser:groupcert7.db chownuser:groupkey3.db
Log out as root. As the Certificate System user, set the permissions on the security database files.
chmod 00600 cert7.db
chmod 00600 key3.db
Use the certutil tool to list all of the old Certificate Management System certificates. In this example, -L lists the certificates, and -X forces them to be read/write.
certutil -L -X -d .Server-Cert cert-old_CA_instancecu,cu,cu caSigningCert cert-old_CA_instancecu,cu,cu
Export the public/private key pairs of each entry in the Certificate System databases using the pk12util tool; -o exports the key pairs to a PKCS #12 file, and -n sets the name of the certificate and the old database prefix.
pk12util -o ServerCert.p12 -n "Server-Cert cert-old_CA_instance" -d .Enter Password or Pin for "NSS Certificate DB":******** Enter password for PKCS12 file: ******** Re-enter password: ******** pk12util: PKCS12 EXPORT SUCCESSFULpk12util -o caSigningCert.p12 -n "caSigningCert cert-old_CA_instance" -d .Enter Password or Pin for "NSS Certificate DB":******** Enter password for PKCS12 file: ******** Re-enter password: ******** pk12util: PKCS12 EXPORT SUCCESSFUL
The old security databases may contain additional public/private key pairs; these can also be extracted using pk12util.
Remove the security databases from the alias/ directory.
rm cert7.db
rm cert8.db
rm key3.db
Register the new HSM in the new token database.
modutil -nocertdb -dbdir . -addnew_HSM_token_name-libfilenew_HSM_library_path/new_HSM_library
Identify the new HSM slot name.
modutil -dbdir . -nocertdb -list
Create new security databases.
certutil -N -d .
Import the public/private key pairs for each entry from the PKCS #12 files into the new HSM; -i imports the specified file, and -h sets the name for the new HSM.
pk12util -i ServerCert.p12 -d . -hnew_HSM_slot_nameEnter Password or Pin for "new_HSM_slot_name":******** Enter password for PKCS12 file: ******** pk12util: PKCS12 IMPORT SUCCESSFULpk12util -i caSigningCert.p12 -d . -hnew_HSM_slot_nameEnter Password or Pin for "new_HSM_slot_name":******** Enter password for PKCS12 file: ******** pk12util: PKCS12 IMPORT SUCCESSFUL
Optionally, delete the PKCS #12 files from the alias/ directory.
rm ServerCert.p12
rm caSigningCert.p12
Set the trust bits on the public/private key pairs that were imported into the new HSM; -t sets the trust.
certutil -M -n "new_HSM_slot_nameServer-Cert cert-old_CA_instance" -t "cu,cu,cu" -d . -hnew_HSM_token_namecertutil -M -n "new_HSM_slot_name:caSigningCert cert-old_CA_instance" -t "CTu,CTu,CTu" -d . -hnew_HSM_token_name
Open the CS.cfg configuration file in the new CA instance directory.
cd /var/lib/instance_ID/conf/ vi CS.cfg
Modify the value for the ca.signing.cacertnickname and ca.ocsp_signing.cacertnickname attributes to reflect the new HSM information.
ca.signing.cacertnickname=new_HSM_slot_name:caSigningCert cert-old_CA_instanceca.ocsp_signing.cacertnickname=new_HSM_slot_name:caSigningCert cert-old_CA_instance
In the same directory, edit the serverCertNick.conf file to contain the old certificate nickname. For example:
vi serverCertNick.confnew_HSM_slot_name:Server-Cert cert-old_CA_instance
Extract the public/private key pairs from the HSM. The format for the extracted key pairs should be portable, such as a PKCS #12 file.
The pk12util tool provided by the Certificate System cannot extract public/private key pairs from an HSM because of requirements in the FIPS 140-1 standard which protect the private key portion of an entry. To extract this information, contact the HSM vendor for more information. The extracted keys should not have any dependencies, such as nickname prefixes, on the HSM.
Copy this PKCS #12 file from the old server to the new server.
cpold_server_root/cert-old_CA_instance/config/ServerCert.p12 /var/lib/instance_ID/alias/ServerCert.p12 cpold_server_root/cert-old_CA_instance/config/caSigningCert.p12 /var/lib/instance_ID/alias/caSigningCert.p12
Log into the new server machine as the Certificate System user account. Open the new server alias/ directory.
cd /var/lib/instance_ID/alias/
Log in as root and change the file user and group to the Certificate System user and group.
su chownuser:groupServerCert.p12 chownuser:groupcaSigningCert.p12
Log out as root. As the regular Certificate System user, change the permissions on the key pair files.
chmod 00600 ServerCert.p12
chmod 00600 caSigningCert.p12
Import the public/private key pairs from the PKCS #12 files into the security databases; -i imports the designated file.
pk12util -i ServerCert.p12 -d .Enter Password or Pin for "NSS Certificate DB":******** Enter password for PKCS12 file: ******** pk12util: PKCS12 IMPORT SUCCESSFULpk12util -i caSigningCert.p12 -d .Enter Password or Pin for "NSS Certificate DB":******** Enter password for PKCS12 file: ******** pk12util: PKCS12 IMPORT SUCCESSFUL
Optionally, delete the PKCS #12 files from the alias/ directory.
rm ServerCert.p12
rm caSigningCert.p12
Set the trust bits on the public/private key pairs that were imported into the new security databases; -t sets the trust.
certutil -M -n "Server-Cert cert-old_CA_instance" -t "cu,cu,cu" -d .certutil -M -n "caSigningCert cert-old_CA_instance" -t "CTu,CTu,CTu" -d .
Open the new CA instance's CS.cfg file.
cd /var/lib/instance_ID/conf/ vi CS.cfg
Edit the ca.signing.cacertnickname and ca.ocsp_signing.cacertnickname attributes to reflect the new CA instance directory.
ca.signing.cacertnickname= caSigningCert cert-old_CA_instanceca.ocsp_signing.cacertnickname= caSigningCert cert-old_CA_instance
In the same directory, edit the serverCertNick.conf file to contain the old certificate nickname. For example:
vi serverCertNick.conf Server-Cert cert-old_CA_instance
Extract the public/private key pairs from the HSM. The format for the extracted key pairs should be portable, such as a PKCS #12 file.
The pk12util tool provided by the Certificate System cannot extract public/private key pairs from an HSM because of requirements in the FIPS 140-1 standard which protect the private key portion of an entry. To extract this information, contact the HSM vendor for more information. The extracted keys should not have any dependencies, such as nickname prefixes, on the HSM.
Copy the data from the old server to the new server.
cpold_server_root/cert-old_CA_instance/config/ServerCert.p12 /var/lib/instance_ID/alias/ServerCert.p12 cpold_server_root/cert-old_CA_instance/config/caSigningCert.p12 /var/lib/instance_ID/alias/caSigningCert.p12
Log into the new server machine as the Certificate System user, and open the new Certificate System alias/ directory.
cd /var/lib/instance_ID/alias/
Login as root, and set the file owner to the Certificate System user and group.
su chownuser:groupServerCert.p12 chownuser:groupcaSigningCert.p12
Log out of root. As the regular Certificate System user, set the permissions on the files.
chmod 00600 ServerCert.p12
chmod 00600 caSigningCert.p12
Register the new HSM in the new token database.
modutil -nocertdb -dbdir . -addnew_HSM_token_name-libfilenew_HSM_library_path/new_HSM_library
Identify the new HSM slot name.
modutil -dbdir . -nocertdb -list
Import the public/private key pairs for each entry from the PKCS #12 files into the new HSM; -i imports the specified file, and -h sets the name for the new HSM.
pk12util -i ServerCert.p12 -d . -hnew_HSM_slot_nameEnter Password or Pin for "new_HSM_slot_name":******** Enter password for PKCS12 file: ******** pk12util: PKCS12 IMPORT SUCCESSFULpk12util -i caSigningCert.p12 -d . -hnew_HSM_slot_nameEnter Password or Pin for "new_HSM_slot_name":******** Enter password for PKCS12 file: ******** pk12util: PKCS12 IMPORT SUCCESSFUL
Optionally, delete the PKCS #12 files from the alias/ directory.
rm ServerCert.p12
rm caSigningCert.p12
Set the trust bits on the public/private key pairs that were imported into the new HSM.
certutil -M -n "new_HSM_slot_name:Server-Cert cert-old_CA_instance" -t "cu,cu,cu" -d . -hnew_HSM_token_namecertutil -M -n "new_HSM_slot_name:caSigningCert cert-old_CA_instance" -t "CTu,CTu,CTu" -d . -hnew_HSM_token_name
Open the new CA instance CS.cfg file.
cd /var/lib/instance_ID/conf/ vi CS.cfg
Edit the ca.signing.cacertnickname and ca.ocsp_signing.cacertnickname attributes in the CS.cfg file to reflect the new CA instance directory.
ca.signing.cacertnickname=new_HSM_slot_name:caSigningCert cert-old_CA_instanceca.ocsp_signing.cacertnickname=new_HSM_slot_name:caSigningCert cert-old_CA_instance
In the same directory, edit the serverCertNick.conf file to contain the old certificate nickname. For example:
vi serverCertNick.confnew_HSM_slot_name:Server-Cert cert-old_CA_instance