logo Homepage Wolfgang Wilhelm :: v 0.9.1 21.02.2006 :: (v.0.9 __ 14.04.03)  
 
impressum :: feedback ::  Rubiks Magic ::  aktuelles   
Startseite
 LINKWEG ::: inhalt / sendmail als MTA / starke Verschlüsselung


sendmail als Mail Transport Agent

 

starttls  starke Verschlüsselung

anker Zertifikate
anker Sendmail Macro Konfiguration
anker Relay per Clientzertifikat
anker EMail Clientsoftware

 

Zertifikate  
seitenanfang
 

eigene Zertifikatsauthorität

Für eine starke kryptographische Verschlüsselung ist eine link Openssl Installation vonnöten. Nach dieser Anleitung (*lol*) wurde sendmail bereits mit STARTTLS link 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.


Zertifikat und privater Schlüssel


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`.0
Sendmail benötigt die Schlüsseldatei ohne Passphrase, daher ist diese noch in RSA zu wandeln.
Zu Beachten sind noch die Berechtigungen der Dateien, der private Key sollte doch nicht world writeable/readable sein :-)


Zertifikatsauthorität installieren


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:

Die MIME-Types signalisieren dem Browser, das es sich um ein Zertifikat handelt.
 openssl x509 -in cacert.pem -out cacert.der -outform der

Beispiel: Zertifikat installieren 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  
seitenanfang
 

Sendmail Macro

Der sendmail Konfigurationsdatei wird per Anweisung die Lage der Zertifikate/Schlüssel mitgeteilt. Ich übernehme o.g. Pfade/Namen:

download
  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')dnl
Nachdem die Konfigurationsdatei link neu erstellt worden ist und der linksendmail 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  
seitenanfang
 

Relay per SMTP-AUTH

Die Möglichkeit des Relays per SMTP-AUTH ist in link Sendmail als Server bereits abgehandelt.

Relay per Clientzertifikat

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 link 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  
seitenanfang
 

Clientsoftware

Nur eine begrenzte Anzahl von link 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

 




left  SMTP Authentifizierung
Milter Schnittstelle  right
 
Seitenanfang
           © 2003 by Wolfgang Wilhelm • mail:   wwilhelm at rz-online dot de handmade by xemacs   Valid XHTML 1.0!
Last modified: Tuesday, 11-Apr-2006 11:02:42 CEST
counter