Drop_selfsign_functionality#
__NOTOC__
Not to be confused with V3/Drop_selfsign, a RFE to only drop the –selfsign option.
Overview#
Ticket 3494 Drop –selfsign server functionality:
IPA supports 2 flavors of certificate management:
IPA with pki-ca (dogtag) with either a self-signed certificate or with a certificate signed by external CA (–external-ca option)
IPA with no pki-ca installed (i.e CA-less), with certificates signed and provided by an external CA.
Previously, IPA had a “self-signed” mode, where certificate management was done without pki-ca. This mode will be replaced by CA-less mode on upgrade.
Use Cases#
User upgrades a server that uses the self-signed CA
The CA functionality is removed.
User uses commands below to manage certificates manually.
Design#
On upgrade, selfsign masters will be converted to CA-less. The existing certificate database and files the selfsign CA used will be left on disk and may be used to issue new certificates manually.
IPA’s cert-*
commands will be no longer available. The following
commands will no longer issue certificates automatically:
host-del
host-mod
host-disable
service-del
service-mod
service-disable
Certificates may be issued manually (see instructions below) and loaded
with host-mod
or service-mod
.
Server certificates tracked by certmonger will be untracked during the upgrade.
The self-sign CAs were incapable of replication. With this change, replicas can be created given appropriate (possibly wildcard) server certificates.
Manual certificate management#
This section shows commands that the removed selfsign backend ran behind the scenes. This serves as a baseline or tutorial – the reason why IPA no longer runs the commands manually is to provide flexibility for users that need it. If you want a simple solution, please use IPA’s default Dogtag backend.
Selfsign CA files#
NSS database#
The NSS database containing certs and keys is in /etc/httpd/alias
.
Noise file#
A noise file is generally put at /etc/httpd/alias/noise.txt
. Fill it
with random data whenever you need it:
`` head -c12 /dev/random | sha1sum | cut -d’ ‘ -f1 > /etc/httpd/alias/noise.txt``
Be sure to remove the file after it’s used.
NSS database password#
The NSS database password is stored in /etc/httpd/alias/pwdfile.txt
.
Serial number#
The file /var/lib/ipa/ca_serialno
contains the CA’s serial numbers
in INI format:
[selfsign]
nextreplica = 500000
replicainterval = 500000
lastvalue = 1005
Of these values, only lastvalue
is used (replication of selfsign CAs
was never implemented). It is recommended to note the number, store it
in a more convenient format, and delete the ca_serialno
file.
Each certificate issued by a particular CA must have a unique serial
number. To ensure this, increment the lastvalue
before using it.
Installation#
Note that installation is not needed after an upgrade from selfsign; these files are not removed by the upgrade.
Store a password in /etc/httpd/alias/pwdfile.txt
.
Then run:
`` /usr/bin/certutil -d /etc/httpd/alias -N -f /etc/httpd/alias/pwdfile.txt``
Create a noise file (see above), and create a CA cert by:
`` /usr/bin/certutil -d /etc/httpd/alias -S -n “$REALM IPA CA” -s “CN=$REALM Certificate Authority” -x -t CT,,C -1 -2 -5 -m $NEXT_SERIAL -v 120 -z $NOISE_FILE -f /etc/httpd/alias/pwdfile.txt``
Give the following answers:
Create key usage extension:
0 - Digital Signature
1 - Non-repudiation
5 - Cert signing key
Is this a critical extension [y/N]? y
Create basic constraint extension
Is this a CA certificate [y/N]? y
Enter the path length constraint, enter to skip [<0 for unlimited path]
0
Is this a critical extension [y/N]? y
Extensions:
5 6 7 9 n (SSL, S/MIME, Object signing CA)
Export the CA cert:
`` /usr/bin/pk12util -d /etc/httpd/alias -o /etc/httpd/alias/cacert.p12 -n “$REALM IPA CA” -w /etc/httpd/alias/pwdfile.txt -k /etc/httpd/alias/pwdfile.txt``
Generating a certificate request#
Create a noise file (see above).
`` /usr/bin/certutil -d /etc/httpd/alias -R -s CN=$HOSTNAME,O=IPA -o $CERTREQ_FILENAME -k rsa -g 2048 -z /etc/httpd/alias/noise.txt -f /etc/httpd/alias/pwdfile.txt -a``
Example values:
HOSTNAME=ipaserver.ipadomain.example.com
CERTREQ_FILENAME=/tmp/service.csr
Issuing a certificate#
First generate a certificate request (see above). Then run:
NEXT_SERIAL=$(($NEXT_SERIAL + 1)) # (be sure to also store the number on disk!)
/usr/bin/certutil -d /etc/httpd/alias -C -c "CN=$REALM Certificate Authority" -i $CERTREQ_FILENAME -o $CERT_FILENAME -m $NEXT_SERIAL -v 120 -f /etc/httpd/alias/pwdfile.txt -1 -5 -a
Example values:
REALM=IPADOMAIN.EXAMPLE.COM
CERTREQ_FILENAME=/tmp/service.csr
CERT_FILENAME=/tmp/service.cert
NEXT_SERIAL - unique serial number, see above
For a server certificate (e.g. for a new replica), give the following answers:
Create key usage extension:
2 - Key encipherment
9 - done
n - not critical
Create netscape cert type extension:
1 - SSL Server
9 - done
n - not critical
For an object signing certificate, give the following answers:
Create key usage extension:
0 - Digital Signature
5 - Cert signing key
9 - done
n - not critical
Create netscape cert type extension:
3 - Object Signing
9 - done
n - not critical
For a service certificate (ipa service-add, ipa cert-request, ipa
host-add), add the -6
option. The IPA commands also validate the
certificate, and with Dogtag, the old host/service certis revoked. These
steps are left entirely to the user. Answer:
Create key usage extension:
0 - Digital Signature
1 - Cert signing key
2 - Key encipherment
3 - Data encipherment
9 - done
n - not critical
Create netscape cert type extension:
0 - Server Auth
9 - done
n - not critical
Create extended key usage extension:
1 - SSL Server
9 - done
n - not critical
This will put a PEM-encoded certificate in $CERT_FILENAME.
You may want to import the certificate into the DB, and track it; see below.
Importing issued certificate into the database#
If you have a PEM certificate, open it in an editor, remove the start and end markers, and save it in a new file. This will be a
`` /usr/bin/certutil -d /etc/httpd/alias -A -i $CERT_DER_FILENAME -n $CERT_NICKNAME -a -t ,,``
Example values:
CERT_DER_FILENAME=/tmp/service.der
CERT_NICKNAME=Server-Cert
Exporting server cert into PKCS#12#
Run:
`` /usr/bin/pk12util -o $CERT_PKCS_FILENAME -n $CERT_NICKNAME -d /etc/httpd/alias -k /etc/httpd/alias/pwdfile.txt -w /etc/httpd/alias/pwdfile.txt``
Example values:
CERT_PKCS_FILENAME=/tmp/service.p12
CERT_NICKNAME=Server-Cert
The resulting file can be given to ipa-replica-prepare
, with
contents of /etc/httpd/alias/pwdfile.txt as the password.
Tracking a certificate with certmonger#
systemctl enable certmonger.service
systemctl start certmonger.service
`` /usr/bin/ipa-getcert start-tracking -d /etc/httpd/alias -n $CERT_NICKNAME -p /etc/httpd/alias/pwdfile.txt``
Implementation#
No additional requirements or changes discovered during the implementation phase.
Feature Managment#
N/A
Major configuration options and enablement#
Upgrading from selfsign sets the following env settings (/etc/ipa/default.conf):
enable_ra=False
ra_plugin=none
Replication#
Self-signed CAs were incapable of replication. With this change, replicas can be created given appropriate (possibly wildcard) server certificates.
Updates and Upgrades#
Selfsign certificates will be converted to CA-less on upgrade.
Dependencies#
N/A
External Impact#
Documentation may need updating.