On 26/11/10 23:47, Philip Prindeville wrote: > I recently rebuilt a failing mail server (sendmail and cyrus-imapd), > replacing the hardware and building the replacement machine offline (leaving > the current server in place while I did so). > > This would seem normal enough to do, but had some unintended pitfalls that > really should be more addressable. > > Because the new machine was built offline while the old machine was still > in-place, all of the packages that generate certificates--and there are a > fair number of them: > > sendmail > cyrus-imapd > openssl > openssh > httpd/mod_ssl > > did so incorrectly. That is, they ended up using localhost.localdomain as > the identity of the machine... and once I had the machine in place, I brought > it up to find that various clients were now complaining about invalid certs. > > So I had to dig through what had happened, why, and what needed to be done > (or redone) to fix this. > > Here are some observations and their accompanying conclusions. > > * A lot of packages generate their certs silently as part of the %post > scripting > > This is certainly true of mod_ssl and cyrus-imapd. > > * A lot of packages also provide default answers to the certificate fields: > > Running: > > # rpm -q --scripts mod_ssl > > will get you: > > ... > at<< EOF | /usr/bin/openssl req -new -key > /etc/pki/tls/private/localhost.key \ > -x509 -days 365 -set_serial $RANDOM \ > -out /etc/pki/tls/certs/localhost.crt 2>/dev/null > -- > SomeState > SomeCity > SomeOrganization > SomeOrganizationalUnit > ${FQDN} > r...@${fqdn} > EOF > ... > > > or > > # rpm -q --scripts cyrus-imapd > ... > /bin/cat<< EOF | make cyrus-imapd.pem > -- > SomeState > SomeCity > SomeOrganization > SomeOrganizationalUnit > localhost.localdomain > r...@localhost.localdomain > EOF > ... > > etc. It seems to be fairly common. > > Openssl provides the script /etc/pki/tls/certs/make-dummy-cert, which > contains the function answers(): > > > answers() { > echo -- > echo SomeState > echo SomeCity > echo SomeOrganization > echo SomeOrganizationalUnit > echo localhost.localdomain > echo r...@localhost.localdomain > } > > which is used to pipe form data to "openssl req" when generating a new > certificate request. > > > This seems to be duplicated in several places, and indeed some of the > information could easily be captured statically at install time, and other > data gleaned from the running system (such as the last two fields). > > * The certificate fields should be consistent > > The easiest way to do this is to have a standard file containing the first 5 > fields above (C, ST, L, O, OU). This file could be populated by > Anaconda/Kickstart during installation. > > It's presence would then be a requirement for other packages that dynamically > create certs at install time. > > * A permanent or 'real' identity should be an RPM requirement > > Packages should have the ability to have the system configured as its > ultimate identity before being installed. > > This could be accomplished by an RPM pseudo-requirement that some package > generates (via Provides:) as part of its installation. > > This could be the same package that provides the certificate "seed" > information, but would also check to make sure that hostname, the domain, > etc. were proper values. > > * If a machine gets relocated, it should be able to re-seed its certificates > > This last one is perhaps the most obscure change. > > If I build a machine "offline", test it with a temporary identity, and decide > its "ready for prime-time", I should be able to reboot it with its new > identity, and manually re-run the RPM scripts (or some idempotent portion of > them) that regenerates all of the identity-derived information... typically > this would be based on hostname, domain, IP address, and the certificate seed > information (C, ST, L, O, and OU). > > We'd need a %post subsection that could be run idempotently to generate new > certificates, for instance. > > In the examples of the above packages (openssl, mod_ssl, cyrus-imapd, etc) > new .crt, .key, or .pem files would be generated... the serial number > incremented (where necessary), and the service restarted. > > * This affects a lot more than just the packages that generate certs and keys > > This also would affect rpm (and possibly yum as well), in addition to the > Anaconda/Kickstart. > > It might even be necessary to have a new package that runs early at boot time > that checks packages (services) for "refreshed" certificates, and disables > (chkconfig service off) any services that have out-of-date certificates/keys. > > > So how far into left field am I on this, anyway? > > Thanks, > > -Philip > >
I don't agree. If you are replacing a production machine, you take the keys from the old machine and use them. If you don't want to do that, you buy new, probably stronger, certificates that are also valid. I think your case only covers self-signed certificates. -- devel mailing list devel@lists.fedoraproject.org https://admin.fedoraproject.org/mailman/listinfo/devel