Using proper FreeIPA certificates on Cockpit
Posted on do 10 juni 2021 in misc
Cockpit and FreeIPA
A couple of years ago, I did a video on Youtube on using FreeIPA / IdM certificates in Cockpit. According to some comments (that I only saw way after the fact...), for some people, my way of doing that didn't work.
Therefore, I redid the video for RHEL7 and RHEL8, connected to IdM from RHEL8. This should work with recent Fedora as well, since I'm using that at home :)
How it works
#SELinux
Both on RHEL7 and RHEL8, the certmonger process that is actually "in charge" of getting
the certificates, cannot write to /etc/cockpit/ws-certs.d
due to SELinux. Therefore,
before we tell it to go fetch certificates through ipa-getcert
, we need to tweak
SELinux a bit.
The following command works on RHEL7, RHEL8 and recent Fedora and relabels
/etc/cockpit/ws-certs.d
to certs_t
instead of etc_t
. This makes it possible for
certmonger to write there.
semanage fcontext -a -t cert_t "/etc/cockpit/ws-certs.d(/.*)?"
restorecon -FvR /etc/cockpit/ws-certs.d
RHEL7
On RHEL7, cockpit expects a combined file for the certificate and key information, so we need to concatenate what we get from certmonger before we give to cockpit.
We can pass ipa-getcert
a post-save command, that is issued after storing the
certificate, but that can be only a single command. Therefore we use a script:
#!/bin/bash
name=$1
cat /etc/pki/tls/certs/${name}.cert /etc/pki/tls/private/${name}.key > /etc/cockpit/ws-certs.d/50-${name}.cert
chown root:cockpit-ws /etc/cockpit/ws-certs.d/50-${name}.cert
chmod 0640 /etc/cockpit/ws-certs.d/50-${name}.cert
After we issue that command, we can request the certificate:
ipa-getcert request -f /etc/pki/tls/certs/$(hostname -f).cert -k /etc/pki/tls/private/$(hostname -f).key -D $(hostname -f) -C "/usr/local/sbin/cockpit_certs.sh $(hostname -f)" -K host/$(hostname -f)
This should result in a certificate in /etc/cockpit/ws-certs.d
that we'll never have
to touch again :)
RHEL8
On RHEL8 and recent Fedora, we don't need a script to concatenate the key and the certificate, because recent cockpit can handle two separate files for them.
Therefore, we only have to issue the ipa-getcert
command:
ipa-getcert request -f /etc/cockpit/ws-certs.d/$(hostname -f).cert -k /etc/cockpit/ws-certs.d/$(hostname -f).key -D $(hostname -f) -K host/$(hostname -f) -m 0640 -o root:cockpit-ws -O root:root -M 0644
This again should result in a certificate that we'll never have to touch again until we decommission this machine!
Hope this helps!