Rootserver-Serie VI: Die eigene CA für Web, Mail und FTP

In heutigen Zeiten (ich erspare mir nähere Ausführungen….) ist es praktisch unerlässlich (auch) gesicherte Kommunikation zu betreiben.

Sei es der Zugriff auf den Webmail per Browser, das verschicken von eMails oder das nutzen von FTP-Servern. Überall werden die Daten prinzipiell unverschlüsselt gesendet.
Glücklicherweise bieten heutzutage aber alle Dienste auch TLS für ihre Protokolle an. Selbiges muss man nur noch nutzen. Das Hauptproblem neben den unterschiedlichen Zertifikatsformen ist, dass SSL-Zertifikate immer viel Geld kosten wenn sie ordentlich unterschrieben sein sollen.

Es gibt zwar gute Gründe für das unterschreiben von SSL-Zertifikaten von autorisierten Stellen, jedoch ist dies nicht zwingend nötig.

Um verschlüsselte Kommunikation zu betreiben reichen eigentlich selbstunterschriebene Zertifikate. Man muss nur dafür sorgen, dass man nicht alle Nase lange die Zertifikate bestätigen muss, weil sie ja „unsicher„ sind.
Lösung des Problems ist das Erstellen einer eigenen CA. Diese unterschreibt alle nötigen Zertifikate, welche unser Server für die verschiedenen Dienste braucht.
Das öffentliche Zertifikat der CA wird für interessierte Benutzer angeboten, damit sie es in ihre Client-Software/-OS importieren können und fortan sowohl eine sichere Kommunikation als auch keine Sicherheitwarnungen bekommen.

Bei dem weiteren Vorgehen stütze ich mich auf diesen alten Blogeintrag Die eigene CA aufbauen.

Installation

Bei CentOS versteckt sich CA.pl unter /etc/pki/tls/misc/CA.pl. Enthalten ist es im Paket openssl-perl.

CA erstellen

Um seine eigene CA zu erstellen verfolgt man am besten dem ersten Teil von diesem Tutorial:
cd /etc/pki/tls/misc/
CA.pl -newca
Die nun folgenden Fragen sollte man halbwegs vernünftig beantworten ;-).
Als Common Name sollte der (Firmen-) Name verwendet werden.

CA auf dem Client installieren

Die Datei /etc/pki/CA/cacert.pem kann direkt in Firefox und Thinderbird (jeweils!) unter Extras > Erweitert > Verschlüsselung > Zertifikate anzeigen > importieren in Firefox bzw. Thunderbird importiert werden.

Für den InternetExplorer/Windows (und damit auch Outlook) muss man etwas tiefer in die Trickkiste greifen:
openssl x509 -in /etc/pki/CA/cacert.pem -out /etc/pki/CA/cacert.der -outform DER
Diese DER-Datei kann man nun per Doppelklick öffnen und dann Zertifikat installieren wählen.

So wird es in Zukunft bei der gesicherten Serverkommunikation keine Warnhinweise mehr geben.

Web I: Zertifikate für Webs aus ISPconfig

Webs aus ISPconfig lassen sich nun ganz einfach absichern.
Bei dem Web muss SSL aktiviert sein (pro IP kann nur ein Web SSL haben!) und dann kann die Lasche SSL geöffnet werden.
Dort trägt man alle nötigen Daten ein und wählt aus dem Drop-Down-Menü ‚Zertifikat erstellen‚.
Nach dem speichern der Seite sind SSL-Request und SSL-Zertifikat gefüllt.

Mit dem Inhalt von SSL-Request legt man eine Datei unter /etc/pki/misc/newreq.pem an.
Nach einem Aurfur von ./CA.pl -sign, der Eingabe des Passwortes der CA und dem Abnicken der Daten erhält man die Datei /etc/pki/misc/newcert.pem.

Aus dieser Datei kopiert man den Bereich (einschließlich)
-----BEGIN CERTIFICATE-----
MIIDHDCCAoWgAwIBAgIJANa3AzJ4Spp5MA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD
...
WX3XO9gEWlD+TVJl29tdxI/ORGuRYp9p/lbv4TM+tdE=
-----END CERTIFICATE-----
zurück nach ISPconfig unter SSL-Zertifikat.
Im Drop-Down-Menü wird noch ‚Zertifikat speichern‚ gewählt und die Seite über ‚Speichern‚ verlassen.

Nun entweder warten bis der Apache neugestartet wurde oder ihn per Hand neustarten.
Fertig

Web II: Zertifikat für ISPconfig selber

Der ISPconfig-Apache soll natürlich auch noch ein „gültiges„ Zertifikat bekommen. Das vorgehen ähnelt dabei sehr dem von oben:

Der SSL-Request liegt glücklicherweise schon als Datei vor (Wenn bei der Installation von ISPconfig keine vernünftigen Werte angegeben wurden so muss man einen neuen SSL-Request erstellen – s.o.) und kann direkt unterschrieben werden:
cd /etc/pki/tls/misc
cp /root/ispconfig/httpd/conf/ssl.csr/server.csr newreq.pem
./CA.pl -sign

Ist dies geschen kopiert man wieder aus der Datei newcert.pem kopiert man den Bereich (einschließlich)
-----BEGIN CERTIFICATE-----
MIIDHDCCAoWgAwIBAgIJANa3AzJ4Spp5MA0GCSqGSIb3DQEBBQUAMIGMMQswCQYD
...
WX3XO9gEWlD+TVJl29tdxI/ORGuRYp9p/lbv4TM+tdE=
-----END CERTIFICATE-----

in die Datei /root/ispconfig/httpd/conf/ssl.crt/server.csr. Dabei ersetzt man eifnach das schon bestehene.

Zu guter letzt wird der ISPconfig-Apache neugestartet /etc/init.d/ispconfig restart

Mail I: Zertifikat für Postfix

Jenachdem wie Postfix installiert wurde existieren schon Dummy-Zertifikate.
Da dies nicht zwingend der Fall ist (und um ein bisschen Übung zu bekommen) erstellen wir die Zertifikate „from scratch„. Dabei gehe ich von folgender Postfix-Konfiguration aus (main.cf):
smtpd_tls_key_file = /etc/pki/postfix/private/postfix.pem
smtpd_tls_cert_file = /etc/pki/postfix/certs/postfix.pem

Zunächst erstellen wir einen neuen SSL-Request. Dabei muss der CommonName so vergeben werden, dass er mit dem FQDN des Mailserver übereinstimmt. Das PEM Passwort wird nur kurzfristig benötigt und muss daher nicht sonderlich sicher sein:
cd /etc/pki/tls/misc
./CA.pl -newreq

Mittels ./CA.pl -sign wird der Request wieder unterschrieben (s.o.).
Dummerweise ist nun aber der Private Key des Zertifikates verschlüsselt und das mag Postfix überhaupt nicht. Daher wird selbiger noch kurzerhand entschlüsselt (nicht mit dem CA-Passwort sondern mit dem PEM Passwort!):
openssl rsa -in newkey.pem > smtpd.key
Als letztes wird noch alles für Postfix an die richtige Stelle kopiert und Postfix neugestartet:
mkdir /etc/pki/postfix/certs
mkdir /etc/pki/postfix/private
cp smtpd.key /etc/pki/postfix/private/postfix.pem
cp newcert.pem /etc/pki/postfix/certs/postfix.pem

Es ist zwingend darauf zu achten, dass der Private Key ausschließlich von root gelesen werden kann!

Mail II: Zertifikat für Dovecot

Die Erstellung eines Zertifikates für Dovecot läuft genauso ab wie für Postfix.
Dabei gehe ich von folgender Dovecot-Konfiguration aus (dovecot.cont):
ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem
ssl_key_file = /etc/pki/dovecot/private/dovecot.pem

Da alles gleich ist hier nur noch die nötigen Befehle:
cd /etc/pki/tls/misc
./CA.pl -newreq
./CA.pl -sign
openssl rsa -in newkey.pem > dovecot.key
mkdir ../../dovecot
mkdir ../../dovecot/certs
mkdir ../../dovecot/private
cp newcert.pem ../../dovecot/certs/dovecot.pem
cp dovecot.key ../../dovecot/private/dovecot.pem
chmod 600 ../../dovecot/private/dovecot.pem
/etc/init.d/dovecot restart

Es ist zwingend darauf zu achten, dass der Private Key ausschließlich von root gelesen werden kann!

FTP: Zertifikat für ProFTPd

Zu guter letzt wird das FTPS-Zertifikat noch getauscht. Beim letzten Mal haben wir ja nur ein Dummy-Zertifikat erzeugt:

cd /etc/pki/tls/misc
./CA.pl -newreq
./CA.pl -sign
openssl rsa -in newkey.pem > proftpd.key
mkdir ../../proftpd
mkdir ../../proftpd/certs
mkdir ../../proftpd/private
cp newcert.pem ../../proftpd/certs/proftpd.pem
cp proftpd.key ../../proftpd/private/proftpd.pem
chmod 600 ../../proftpd/private/proftpd.pem
/etc/init.d/proftpd restart

Dieses setzt natürlich voraus, dass folgende Konfiguration für ProFTPd in Benutzung ist:
/etc/proftpd.conf
<IfModule mod_tls.c>
TLSEngine on
TLSRSACertificateFile /etc/pki/proftpd/certs/proftpd.pem
TLSRSACertificateKeyFile /etc/pki/proftpd/private/proftpd.pem
...
</IfModule>

/etc/proftpd_ispconfig.conf
<VirtualHost ...>
...
# Begin FTPS
TLSEngine on
TLSRSACertificateFile /etc/pki/proftpd/certs/proftpd.pem
TLSRSACertificateKeyFile /etc/pki/proftpd/private/proftpd.pem
# End FTPS
</VirtualHost>

Andernfalls muss die Konfiguration (und das Template!) angepasst werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *