Zertifikat für Dovecot anpassen
Vor kurzem hatte ich das Problem, dass ein Mailclient nicht das selbst signierte Zertifikat eines Dovecot Mailservers auf einem Debian-System akzeptieren wollte. Das Zertifikat, stellte sich heraus, hatte einen abweichenden CN gegenüber dem Servernamen, mit dem der Client den Mailserver kontaktierte. Das konnte ich mit
$ openssl x509 -in /etc/ssl/certs/dovecot.pem -text -noout | less
verifizieren.
Wie wird eigentlich dieses Zertifikat erzeugt?
Ich hatte den Server vor kurzer Zeit aufgesetzt und dabei war das Zertifikat automatisch angelegt worden. Auf blog.reidster.net fand ich einen Artikel, der mich auf die richtige Spur brachte und kurz und bündig beschreibt, wie man selbst signierte Zertifikate für Dovecot und Exim aktualisiert. Allerdings wollte ich kein abgelaufenes Zertifikat erneuern, sondern das vorhandene ändern. Also musste ich etwas tiefer in die Materie einsteigen.
Wie geht es nun genau?
Wenn ich dpkg-reconfigure dovecot-common
aufrufe, ruft dieses seinerseits
das Skript /var/lib/dpkg/info/dovecot-common.postinst mit dem Argument
configure
auf, woraufhin die Zeilen für die Erzeugung des Zertifikats
aktiviert werden.
Die relevanten Zeilen sind:
SSL_CERT="/etc/ssl/certs/dovecot.pem"
SSL_KEY="/etc/ssl/private/dovecot.pem"
FQDN=`hostname -f`
openssl req -new -x509 -days 365 -nodes \
-out $SSL_CERT -keyout $SSL_KEY > /dev/null 2>&1 <<+
.
.
.
Dovecot mail server
$FQDN
$FQDN
root@$MAILNAME
+
Der CN des Zertifikats wird also der Variable $FQDN entnommen und diese
wiederum wird mit hostname -f
bestimmt.
Nun habe ich die Möglichkeit, diese Zeilen in ein eigenes Skript zu packen und die Variable $FQDN explizit anders zu benennen.
Oder ich modifiziere die Ausgabe von hostname -f
. Mal sehen, was da geht.
Die englische Handbuchseite von hostname
sagt:
Technically: The FQDN is the name getaddrinfo(3) returns for the host name returned by gethostname(2). The DNS domain name is the part after the first dot
Bei Systemen mit mehreren IP-Adressen ist es problematisch, den
Rechnernamen mit hostname
zu bestimmen, aber dieser hatte nur eine.
In /etc/nsswitch.conf war der Vorrang von /etc/hosts vor dem DNS
eingestellt.
Also reichte es, die Zeile mit der IP-Adresse des Servers in /etc/hosts
anzupassen, die Einstellung mit hostname -f
zu kontrollieren und dann konnte
ich mit
# rm /etc/ssl/cert/dovecot.pem
# rm /etc/ssl/private/dovecot.pem
# dpkg-reconfigure dovecot-common
ein passendes Zertifikat erzeugen. Wenn in einem Jahr das Zertifikat abgelaufen ist, kann ich es auf diese Art auch wieder verlängern.
Posted 2013-12-21