Homepage Wolfgang Wilhelm :: v 0.9.1 21.02.2006 :: (v.0.9 __ 14.04.03) | ||
LINKWEG ::: inhalt / sendmail als MTA / starke Verschlüsselung |
sendmail als Mail Transport Agent
starke Verschlüsselung
Zertifikate
Sendmail Macro Konfiguration
Relay per Clientzertifikat
EMail Clientsoftware
Zertifikate | |
Für eine starke kryptographische Verschlüsselung ist eine Openssl Installation vonnöten. Nach dieser Anleitung
(*lol*) wurde sendmail bereits mit STARTTLS kompiliert.
Nun in das bei der Kompilation angegebene OpenSSL Verzeichniss wechseln ( /var/ssl ).
sendmail benötigt
Um eine eigene Zertifikatsauthorität zu werden muss erst ein solches CA Cert erzeugt werden:
mkdir certs crl newcerts private echo "01" > serial cp /dev/null index.txt cp /usr/local/openssl/openssl.cnf.sample openssl.cnf
Dann noch die openssl.cnf editieren und den eigenen Gegebenheiten anpassen.
In der Beispieldatei muss mindestens noch das Arbeitsverzeichnis verändert und auf das aktuelle gesetzt werden (anstatt demoCA).
[...] [ CA_default ] dir = ./ # Where everything is kept ^^^^ certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. new_certs_dir = $dir/newcerts # default place for new certs.Mittels
openssl req -new -x509 -keyout private/cakey.pem -out cacert.pem -days 365 -config openssl.cnf
wird eine Zertifikatsauthorität erstellt, als Name (eg. Your name) kann bsp. Geek-O-mat Root CA Authority
stehen, dieser taucht später in allen unterschriebenen Zertifikaten auf.
Am besten der Datei cacert.pem noch das Attribut immutable verpassen, damit diese nicht versehentlich überschrieben wird. Ein CA Passwort sollte vergeben werden denn später werden die persönlichen Zertifikate ja noch unterschrieben
und mit dieser CA als gültig markiert.
sendmail braucht nun noch ein unterschriebenes (also quasi authorisieres Zertifikat) und einen privaten Schlüssel. Mit Hilfe des erzeugten CA Zertifikats können nun beliebige Zertifikate für alle möglichen mit SSL verschlüsselten Dienste erzeugt werden (POP3s, IMAPs, https oder sonstige SSL getunnelte Verbindungen).
Um ein neues Zertifikat zu erstellen:openssl genrsa -des3 -out servername.key 2048 openssl req -new -key servername.key -out servername.csr -days 365 -config openssl.cnf
Die entsprechenden Daten im Dialogfeld eintragen,
Wichtig: Als Name (eg. Your Name:) muss der FQDN, also der genaue Name, mit dem der rechner angesprochen wird, angegeben werden.
(Zertifikatsanfrage und privater Schlüsselsind nun in servername.key|csr enthalten)
Um das Zertifikat mit der CA zu signieren:
openssl ca -config openssl.cnf -policy policy_anything -in servername.csr -out servername.pem
Zum Signieren muss das Passwort eingegeben werden, das sonst einfach beliebige Zertifikate erstellt und unterschrieben werden könnten.
*Note: Die Signatur muss quasi zweimal bestätigt werden, dies scheint ein häufiger r00kie Fehler zu sein :-)
servername.pem enthält das unterschriebene Zertifikat, servername.key den privaten Schlüssel. sendmail nutzt beide Dateien sowie eine Kopie der CA. Die Dateien nach /etc/mail/cert kopieren und hashen.
mkdir -p /etc/mail/cert cp servername.pem /etc/mail/certs/MYcert.pem openssl rsa -in servername.key -out servername.key.rsa cp servername.key.rsa /etc/mail/certs/MYkey.pem cp cacert.pem /etc/mail/certs/CAcert.pem cd /etc/mail/certs ln -s CAcert.pem `openssl x509 -noout -hash < CAcert.pem`.0 ln -s MYcert.pem `openssl x509 -noout -hash < MYcert.pem`.0Sendmail benötigt die Schlüsseldatei ohne Passphrase, daher ist diese noch in RSA zu wandeln.
Damit der Browser auch alle unterschriebenen Zertifikate als gültig betrachtet muss die eigene CA noch im Browser als vertrauenswürdig installiert werden.Die erzeugten CA-Zertifikate lassen sich in den Applikationen relativ einfach importiereni,es wird im (binären) DER-Format vom HTTP-Server als eine der folgenden MIME-Typen an den Browser geschickt:
openssl x509 -in cacert.pem -out cacert.der -outform der
Beispiel: Geek-O-mat Root CA Authority installieren
Im folgenden Dialog noch der CA erlauben Websites zu identifizieren und den weiteren Anleitungen folgen.
Für Mozilla kann dies über Bearbeiten --> Einstellungen --> Datenschutz & Sicherheit --> Zertifikate über die Schaltfläche Zertifikate verwalten und unter dem Karteireiter Authorities überprüft werden.
Für M$ Ausblick wird die CA Authority über den IE installiert.
Sendmail Macro Konfiguration | |
Der sendmail Konfigurationsdatei wird per Anweisung die Lage der Zertifikate/Schlüssel mitgeteilt. Ich übernehme o.g. Pfade/Namen:
dnl ------- dnl SSL/TLS dnl ------- define(`CERT_DIR', `MAIL_SETTINGS_DIR`'certs')dnl define(`confCACERT_PATH', `CERT_DIR')dnl define(`confCACERT', `CERT_DIR/CAcert.pem')dnl define(`confSERVER_CERT', `CERT_DIR/MYcert.pem')dnl define(`confSERVER_KEY', `CERT_DIR/MYkey.pem')dnl define(`confCLIENT_CERT', `CERT_DIR/MYcert.pem')dnl define(`confCLIENT_KEY', `CERT_DIR/MYkey.pem')dnlNachdem die Konfigurationsdatei neu erstellt worden ist und der sendmail Daemon gestartet wurde kann durch ein Verbindungsaufbau die Antwort festgestellt werden:
[mulder ~]$ telnet localhost 25 Trying 127.0.0.1... Connected to localhost.home.lan (127.0.0.1). Escape character is '^]'. 220 mulder.home.lan ESMTP Sendmail 8.13.4/8.13.4; Fri, Fri, 5 Dec 2003 11:53:15 +0100 EHLO localhost 250-mulder.home.lan Hello localhost.home.de [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 250-STARTTLS 250-DELIVERBY 250 HELP
Falls keine STARTTLS Zeile auftaucht sollten eventuelle Sicherheitsprobleme und die Logfiles überprüft werden (unsichere Dateien). Um mehr Informationen in den Logdateien zu erhalten ist es sinnvoll den LogLevel auf 13 zu erhöhen.
define(`confLOG_LEVEL',`13')
Der Received-Header einer EMail gibt Aufschluss darüber, ob STARTTLS benutzt wurde. Er enthält eine zusätzliche Zeile:
(version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})
Received: from home.lan (mulder.home.de [192.168.5.90]) by mulder.home.lan (8.13.4/8.13.4) with ESMTP id h3OMSrS3013589 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO) for <wwilhelm@home.lan>; Fri, 25 Apr 2003 00:28:55 +0200 Message-ID: <3EA86525.7080901@home.lan>
Relay per Clientzertifikat | |
Die Möglichkeit des Relays per SMTP-AUTH ist in Sendmail als Server bereits abgehandelt.
Eine interessante Möglichkeit bietet die Authentifizierung per SSL Zertifikat, dies ermöglicht ein Relay ohne extra einen Benutzer auf dem System anzulegen. Somit wird der Mailserver um eine Möglichkeit erweitert, die keine tieferen Eingriffe in das System nötig macht. Dies könnte natürlich auch ganz die Methode SMTP-AUTH ersetzen und das Problem des unverschlüsselten Passwortes wäre gelöst. Ich kenne nun nicht jeden MTA, sodas ich nicht voraussetzen kann das jede EMailsoftware mit Zertifikaten ausgerüstet werden kann. Allerding kann auch nicht jeder MTA SSL zur Verschlüsselung sprechen
.
Die Idee ist das SMTP STARTTLS verwendet wird, um fremden Clients die sich erfolgreich authentifiziert haben, das Weiterleiten von Nachrichten zu erlauben. Dies geschieht im Regelsatz RelayAuth. Schlägt die Überprüfung des Zertifikates fehl (${verify} != OK), wird das Weiterleiten anhand der ülichen Regeln entschieden. Andernfalls wird der DN des Herausgebers in der Access Datenbank mit dem vorangestellten Kennzeichen CERTISSUER nachgeschlagen. Ist das resultierende Ergebnis RELAY, wird das Weiterleiten von Nachrichten erlaubt. Lautet das Ergebnis SUBJECT, wird als nächstes der DN des Zertifikat(-Gegenstandes) mit dem vorangestelltem Kennzeichen CERTSUBJECT in der Access Datenbank nachgeschlagen. Auch hierbei werden Weiterleitungen erlaubt, falls das Ergebnis RELAY ist.
Lange Rede, kurzer Sinn:
Um jedem mit einem Zertifikat von
/C=DE/ST=Rheinland-Pfalz / Germany/O=private Home Inc./CN=Geek-O-mat Root CA Authority/Email=cert@home.lan
Weiterleitungen zu erlauben, benutze einfach:
CertIssuer:/C=DE/ST=Rheinland-Pfalz+20/+20Germany/O=private+20Home+20Inc./CN=Geek-O-mat+20Root+20CA+20Authority/Email=cert@home.lan RELAY
in /etc/mail/access
jedes nicht-druckbare Zeichen und die Zeichen '<', '>', '(', ')', '"', '+' und das Leerzeichen werden in ihren entsprechenden Hexadezimalwert mit einem vorangestellten '+' umgewandelt.
Serverseitig ist sendmail nun für relay per SSL Zertifikat konfiguriert, es fehlt nur noch ein Clientzertifikat für dem MUA, dieser erwartet ein pkcs Format. Zuerst wie beschrieben ein Zertifikat erzeugen, signieren und umwandeln
. Als Bezeichnung sowohl bei der Zertifikatserzeugung sowie des Fingerprintes sollte ein sinnvoller Name vergeben werden anhand das Zertifikat eindeutig wiedererkennbar ist.
openssl x509 -fingerprint -in newcert.pem > fingerprint.pem openssl pkcs12 -export -in fingerprint.pem -inkey newreq.pem -certfile /var/ssl/cacert.pem -name "MY CERTIFICATE" -out newcert.p12
Ein vergebenes Passwort wird bei der Einbindung in den MUA abgefragt. Mozilla installiert dieses über Bearbeiten --> Einstellungen --> Datenschutz & Sicherheit --> Zertifikate Schaltfläche Zertifikate verwalten unter dem Karteireiter Ihre Zertifikate. Dort über den Knopf Importieren die Datei newcert.p12 öffnen und einbinden.
Mail User Agent | |
Nur eine begrenzte Anzahl von EMail Clientsoftware ( Mail User Agent ) unterstützt SASL, die wohl häufigste Methode unter UNIX ist der direkte Aufruf von sendmail. Somit sollte der lokale sendmail Daemon sich gegenüber dem Providerserver SMTP AUTHentifizieren können.
Klartext Passwörter sind einfach
, da mit deren Einsatz so gut wie jeder System umgehen kann. Ein bedeutender Nachteil ist das diese nur für verschlüsselte Netzwerkverbindungen in Frage kommen.
Es sollte keine Klartextmethode wie PLAIN oder LOGIN zum Einsatz kommen wenn nicht eine starke kryptographische Verbindung besteht (bsp. via STARTTLS)!.
Netscape Messenger oder Mozilla versuchen sich stets am Mailserver anzumelden sobald dieser ein AUTH sendet, auch wenn diese Option in der Benutzereinstellungen abgeschaltet ist. Als Lösung habe ich
user_pref("mail.auth_login", false);
in die Netscape/Mozilla preferences Datei eingetragen
SMTP Authentifizierung |
© 2003 by Wolfgang Wilhelm • mail: wwilhelm at rz-online dot de |