Courier und Postfix mit TLS/SSL einrichten

Auf die Installation der Pakete möchte ich nicht weitergehen und deren Einrichtung. Hier geht es nur um das erstellen der Zertifikate und den Config-Einträgen. Hierzu habe ich auf meinem System(Debian Lenny) folgende Packages installiert:

courier-authdaemon courier-authlib courier-authlib-mysql courier-authlib-userdb courier-base courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-ssl
postfix postfix-mysql
openssl

Diese sind nicht alle zwingend notwendig, ich betreibe postfix und courier aber mit mysql, daher benötige ich diese Pakete.

Erstmal benötigen wir einen Arbeitsplatz. Da wir sowieso root-Zugriff benötigen habe ich mich als root angemeldet.

mkdir /root/ssl/
cd /root/ssl/

In /root/ssl/ werden wir alle unsere Zertifikate erstellen.

Jetzt benötigen wir die CA für die Zertifikate:

openssl req -new -x509 -newkey rsa:2048 -keyout cakey.pem -out cacert.pem -days 3650
chmod 600 cakey.pem

openssl fordert dann zur Eingabe eines Passworts auf, diese ist durchaus sinnig, da ansonsten jeder mit unserer CA Zertifikate signieren kann. Außerdem fragt openssl nach ein paar Angaben bezüglich Land und Firmenname. Diese können beliebig ausgefüllt werden.

Nun erstellen wir den Serverzertifikatschlüssel:

openssl genrsa -out serverkey.pem -aes128 2048 -days 3650

Es muss wieder ein Passwort eingegeben werden, dass wir allerdings im folgenden wieder entfernt.

openssl rsa -in serverkey.pem -out serverkey.pem

Nun erstellen wir einen Certificate Signing Request(CSR).

openssl req -new -key serverkey.pem -out req.pem -nodes

Die abgefragten Daten können identisch zu den der CA sein. Wichtig ist hier nur, dass Common Name die Domain ist, der als MX-Record gesetzt ist.

Nun öffnen wir die /etc/ssl/openssl.cnf und passen folgendes an:

dir             = .              # Where everything is kept
new_certs_dir   = $dir           # default place for new certs
private_key     = $dir/cakey.pem # The private key
RANDFILE        = $dir/.rand     # private random number file
default_days    = 3650           # how long to certify for
[ policy_match ]:

stateOrProvinceName     = optional

Alles andere in der Datei kann bleiben wie es ist.

Bevor wir nun den CSR mit der CA signieren fehlt noch folgendes:

echo 01 > serial
touch index.txt

Jetzt können wir den CSR signieren:

openssl ca -in req.pem -notext -out servercert.pem

Hier muss wieder das cakey.pem Passwort eingegeben werden. Die 2 Ja/Nein Fragen muss man mit Ja bzw Y beantworten.

Jetzt haben wir die Zertifikate. Benötigt werden prinzipiell immer nur servercert.pem, serverkey.pem und cacert.pem. Die Datei cakey.pem sollte man an einem sicheren Ort lagern und nicht auf dem Server liegen lassen.

Die Zertifikate für Courier leg ich in /etc/courier/ssl/ ab:

mkdir /etc/courier/ssl/

Courier benötigt den Schlüssel und das Zertifikat in einer Datei. Daher muss man diese erst einmal zusammenfügen.

cat /root/ssl/serverkey.pem > /etc/courier/ssl/pop3d.pem
cat /root/ssl/servercert.pem >> /etc/courier/ssl/pop3d.pem

Da der Imapd auch ein Zertifikat braucht und beide identisch sind folgt noch ein:

cp /etc/courier/ssl/pop3d.pem /etc/courier/ssl/imapd.pem

Nun öffnen wir die Datei /etc/courier/imapd-ssl, suchen die folgenden Eintrag und ändern diesen wie folgt ab.

TLS_CERTFILE=/etc/courier/ssl/imapd.pem

Dann öffnen wir die Datei /etc/courier/pop3d-ssl suchen die folgenden Eintrag und ändern diesen wie folgt ab.

TLS_CERTFILE=/etc/courier/ssl/pop3d.pem

Jetzt fehlt nur noch:

/etc/init.d/courier-pop-ssl restart
/etc/init.d/courier-imap-ssl restart

Erstmal erstellen wir wieder einen Ordner für die Zertifikate.

mkdir /etc/postfix/ssl/

Dort kopieren wir cacert.pem servercert.pem serverkey.pem:

cp /root/ssl/cacert.pem /etc/postfix/ssl/
cp /root/ssl/servercert.pem /etc/postfix/ssl/
cp /root/ssl/serverkey.pem /etc/postfix/ssl/

Nun öffnen wir die Datei /etc/postfix/main.cf und tragen folgendes ein bzw. passen es an wenn es bereits existiert.

smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/postfix/ssl/servercert.pem
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_key_file = /etc/postfix/ssl/serverkey.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes

Jetzt fehlt nur noch:

/etc/init.d/postfix restart

Wenn jetzt alles richtig gelaufen ist hast du ein Mailsystem, bei dem man Mails per SSL abrufen und senden kann.