TLS Verständniss Frage pem/cert/csr/key

Lord_Icon

Member
Hi,

ich habe meinen Server neu aufgesetzt und alles neu eingerichtet.
An POP3s + IMAPs hänge ich mal wieder

Bevor ich jetzt die Logs + postconf -n poste, würde ich das Problem erstmal selbst Verstehen. Sicherlich kann ich das Problem dann selbst lösen.

Also:
In /etc/postfix/tls hab ich folgende Zertifikate erzeugt.
mail.cert mail.csr mail.key

Diese habe ich in Dovecot für TLS-Verschlüsselung drin.

Nun muß ich noch postfic (main.cf) entsprechend einrichten.
In den Howto's wird aber immer:
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_cert_file = /etc/postfix/ssl/certs/postfixcert.pem
smtpd_tls_key_file = /etc/postfix/ssl/certs/postfixkey.pem
beschrieben.

MEine Verständnissfrage lautet deshalb:

Was ist der öffentliche Schlüssel und welches der Private. Und in welchen Verhältniss steht die Endung pem ? Ich das nur eine andere Endung für csr/key/cert ?

Wenn ich das richtig im Kopf habe, dann kann ich eine Frage schon selbst beantworten:

csr = Privater Schlüssel (dieser sollte nicht auf den Server liegen, sondern ggf. gebrannt werden und weggeschlossen werden)

Vielen Dank
 
Was ist der öffentliche Schlüssel
Der öffentliche Schlüssel steckt im Zertifikat. (crt)

welches der Private.
key ist der private Schlüssel und muss gut bewacht werden. ;)

Und in welchen Verhältniss steht die Endung pem?
Pem ist das Format. Du kannst die Files nennen wie du willst. z.B. .crt, .key und .csr.

Das ist der certificate sign request. Und der enthält den privaten Schlüssel nicht. Er wird für die SSL-Kommunikation nicht benötigt und muss deshalb nicht auf dem Server liegen.
 
Hab Dank,

wobei ich jetzt nochmal nachfragen muß. (Was jetzt nicht heißen soll, das ich deine Aussage in Frage stelle!)

Zitat:
welches der Private.
key ist der private Schlüssel und muss gut bewacht werden.
Bist du dir da sicher ?

Weil es heißt doch überall:
smtpd_tls_key_file
smtp_tls_key_file
ssl_key_file

Und in Dovecot hab ich *key sogar mit angegeben.
ssl_cert_file = /etc/postfix/tls/mail.cert
ssl_key_file = /etc/postfix/tls/mail.key

Somit würde das doch falsch sein. Also von mir, da es sich ja dann um den Privaten Schlüssel handelt und der sollte wenn möglich doch gut verwahrt werden. Sollte zumindest nicht auf den Server liegen.


Und in welchen Verhältniss steht die Endung pem?
Pem ist das Format. Du kannst die Files nennen wie du willst. z.B. .crt, .key und .csr.
hmmmm.... **leicht wirr**

Wenn ich das jetzt richtig verstanden habe, dann würde das heißen:
Ich habe ja 3 Datein erzeugt.
mail.cert
mail.csr
mail.key

Diese hätten z.b. auch ... lauten können.
mail_cert.pem
mail_csr.pem
mail_key.pem

Wenn das so sein sollte, dann verstehe ich den Nutzen davon nicht. Das ganze ist doch länger und nur noch durch den Dateinamen korrekt zuzuordnen.
 
smtpd_tls_CAfile = die CA (zur not eine selbst erstellte SnakeOil CA)
smtpd_tls_cert_file = das von der CA signierte Zertifikat (also Public)
smtpd_tls_key_file = der beim Certificate Signing Request generierte Private Key

Dein Verständnis bezüglich der "Geheimhaltung" des Private-Keys bedarf offenbar einer kleinen Korrektur: Das Private-key-File muss natürlich am Server liegen, sonst kann es der Postfix/Dovecot/Apache oder wofür du es auch immer verwendest ja nicht nutzen. Es sollte aber bezüglich der Berechtigungen so eingeschränkt sein, dass es keinesfalls world-readable ist, sondern im besten Fall nur vom nutzenden Service (Postfix/Dovecot/Apache, ...) gelesen werden kann.
 
Der Key muß auf dem Server liegen - schließlich soll er sich ja damit ausweisen :cool:
Du solltest halt nur sicherstellen, daß er nicht auf einem anderen Server zu liegen kommt, der sich dann als Du ausweist :p
Also: Postfix soll (umd muß) den Key sehen, ein anderer Nutzer / Gast / Hacker :D besser nicht.
Directory traversals passieren oft mit den Rechten des Webservers - der sollte also schon mal keinen Zugriff haben. Am besten ist mode 400 oder 600.
Wenn Du ganz paranoid bist, schützt Du den Key mit einem Paßwort. Das mußt Du dann aber jedesmal nach einem Neustart des Servers eingeben, damit der Prozeß losläuft.
 
ahhh... vielen Dank dafür.
Bzwgl. des Privaten Keys hatte ich dann wohl ein falschen Wissenstand.

Gut... damit es hier nicht allzu sehr Off-Topic wird, dann mal eine konkrete Frage:

Die 3 Zertifikate, kann ich doch überall Verwenden. Oder hab ich da auch einen falschen Wissensstand.

Also hierfür z.b.
Code:
smtpd_tls_CAfile = /etc/postfix/tls/mail.csr
smtpd_tls_cert_file = /etc/postfix/tls/mail.cert
smtpd_tls_key_file = /etc/postfix/tls/mail.key

Oder sollte ich die in ein Separates Verzeichniss kopieren, da dovecot die Datein bereits verwendet ?

Letzte Frage.
smtpd_tls_CAfile
smtp_tls_CAfile

Wo liegt hier der Unterschied. Hat smtpd was mit den pam.d Dienst zu tun (?)
 
Das CSR-File ist der Request und ist für die Akten.
Das CA-File ist die ausstellende CA.

Bei Selfsigned-Zertifikaten lässt man die Option einfach weg. (Auch bei öffentlichen Zertifikaten, deren CA in den CA-Speichern der Clients enthalten ist, ist es nicht nötig, das extra anzugeben.)

Da die Zertifikate an einen Hostname (CN) gebunden sind und nicht an eine Applikation, kannst du ein Zertifikat für alle Services benutzen, die über diesen Hostname angesprochen werden.

Der Unterschied zwischen smtp und smtpd ist, dass das eine SMTP-Prozesse (smtp) sind. Also Clients die Mails verschicken. smtpd sind SMTP-Daemons, also Server-Prozesse, die Mails entgegen nehmen. Wenn du alles über den selben Hostname abwickelst, kannst du beide Optionen identisch konfigurieren.
 
In PEM kann private-key (key) und certficate (crt) zusammen rein. Dann kannst du wie in deinem ersten Post, smtpd_tls_cert_file und smtpd_tls_key_file auf diese eine PEM-Datei zeigen lassen.
 
oki.... dann bleibt noch die -Frage bzwgl. den Unterscheid:
smtp und smtpd => denn hier scheint genau das Problem zu liegen.

Also muß ich leider doch etwas direkter werden, da ich das Problem selbst nicht gelöst bekomme...

Outlook eingrichtet => Email addy rein und POP3 auf 995 gelegt. Geht Super ohne Fehler.
Danach nochmal email Kotno bearbeitet und bei der Frage:
"Verwenden Sie folgenden Verschlüsselten Verbindungstyp"
auf TLS und später auch auf SSL versucht.

Dann ein Kontotest durchgeführt. Am Posteingang erfolgreich angemeldet. Beim Senden einer Testnachricht kommt eine allg. Fehlermeldung (an Sysamdin melden) und bringt ab. Kurz darauf bekomme ich dann eine Fehlermeldung vom System selbst:

Transcript of session follows.

Out: 220 mailserver.meine_domain.de ESMTP Postfix
In: EHLO laptop
Out: 250-mailserver.meine_domain.de
Out: 250-PIPELINING
Out: 250-SIZE
Out: 250-VRFY
Out: 250-ETRN
Out: 250-STARTTLS
Out: 250-AUTH PLAIN LOGIN
Out: 250-AUTH=PLAIN LOGIN
Out: 250-ENHANCEDSTATUSCODES
Out: 250-8BITMIME
Out: 250 DSN
In: STARTTLS
Out: 454 4.7.0 TLS not available due to local problem

Session aborted, reason: lost connection

Aus der mail (log) steht am meinsten drin:
Jan 28 14:04:09 mailsystem postfix/smtpd[4721]: initializing the server-side TLS engine
Jan 28 14:04:09 mailsystem postfix/smtpd[4721]: warning: connect to private/tlsmgr: No such file or directory
Jan 28 14:04:10 mailsystem postfix/smtpd[4721]: warning: connect to private/tlsmgr: No such file or directory
Jan 28 14:04:10 mailsystem postfix/smtpd[4721]: warning: problem talking to server private/tlsmgr: No such file or directory
Jan 28 14:04:10 mailsystem postfix/smtpd[4721]: warning: no entropy for TLS key generation: disabling TLS support
Jan 28 14:04:10 mailsystem postfix/smtpd[4721]: connect from dslb-094-123-209-142.pools.arcor-ip.net[94.123.209.142]
Jan 28 14:04:10 mailsystem postfix/smtpd[4721]: lost connection after STARTTLS from dslb-094-123-209-142.pools.arcor-ip.net[94.123.209.142]
Jan 28 14:04:10 mailsystem postfix/cleanup[4725]: DCE08E044: message-id=<20090128130410.DCE08E044@mailserver.meine_domain.de>
Jan 28 14:04:10 mailsystem postfix/smtpd[4721]: disconnect from dslb-094-123-209-142.pools.arcor-ip.net[94.123.209.142]
Jan 28 14:04:10 mailsystem postfix/qmgr[4662]: DCE08E044: from=<double-bounce@mailserver.meine_domain.de>, size=982, nrcpt=1 (queue active)
Jan 28 14:04:10 mailsystem postfix/cleanup[4725]: E7970E04C: message-id=<20090128130410.DCE08E044@mailserver.meine_domain.de>
Jan 28 14:04:10 mailsystem postfix/qmgr[4662]: E7970E04C: from=<double-bounce@mailserver.meine_domain.de>, size=1162, nrcpt=1 (queue active)
Jan 28 14:04:10 mailsystem postfix/local[4727]: DCE08E044: to=<postmaster@mailserver.meine_domain.de>, orig_to=<postmaster>, relay=local, delay=0.08, delays=0.05/0.01/0/0.02, dsn=2.0.0, status=sent (forwarded as E7970E04C)
Jan 28 14:04:10 mailsystem postfix/qmgr[4662]: DCE08E044: removed


Ich poste jetzt mal nur den Ausschnitt aus der main.cf, die für den smtp und smtpd Teil zuständig ist. Ansonsten sagen, wenn komplett postconf -n gepostet werden soll.

Code:
smtpd_sender_restrictions = reject_unknown_address
smtpd_client_restrictions = reject_invalid_hostname
smtpd_helo_restrictions = reject_invalid_hostname
smtpd_recipient_restrictions = permit_mynetworks, reject_unknown_recipient_domain, permit_sasl_authenticated, reject_unauth_destination
smtpd_tls_CAfile = /etc/postfix/tls/mail.csr
smtpd_tls_cert_file = /etc/postfix/tls/mail.cert
smtpd_tls_key_file = /etc/postfix/tls/mail.key
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_ask_ccert = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_helo_required = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = no
smtpd_sasl_auth_enable = yes

smtp_tls_CAfile = /etc/postfix/tls/mail.csr
smtp_tls_cert_file = /etc/postfix/tls/mail.cert
smtp_tls_key_file = /etc/postfix/tls/mail.key
smtp_tls_note_starttls_offer = yes
smtp_sasl_auth_enable = no
smtp_use_tls = yes


tls_daemon_random_source = dev:/dev/urandom
tls_random_source = dev:/dev/urandom
 
smtpd ist für Empfang und smtp für Versand. Mailserver können nämlich auch untereinander verschlüsselt kommunizieren.
 
ohh... sry.

Nein. SUSE. Suse 11.1 um genau zu sein.

Postfix + Devocot + Sasl2

Und nein. Möchte behaupten, das das Paket: postfix-tls ein Debian Paket ist. Unter Suse kann ich es nicht finden. Auch nicht manuell in den Repos.

Mal so eine Idee von mir.
kann die master.cf bezüglich smtp die Schwierigkeiten machen ?
Die is noch auf Default.
Im Bezug auf ssl war doch da irgendwas einzutragen. (?)

Code:
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
 
Nachtrag:
Das Paket selbst gibt es zwar nicht, was aber egal ist, da es postfix anscheind selbst schon mitbringt.

Code:
[B]ldd /usr/sbin/postfix[/B]
        linux-vdso.so.1 =>  (0x00007fff8bbff000)
        libpostfix-global.so.1 => /usr/lib64/libpostfix-global.so.1 (0x00007f89836e0000)
        libpostfix-util.so.1 => /usr/lib64/libpostfix-util.so.1 (0x00007f89834ad000)
        libldap-2.4.so.2 => /usr/lib64/libldap-2.4.so.2 (0x00007f8983269000)
        liblber-2.4.so.2 => /usr/lib64/liblber-2.4.so.2 (0x00007f8983059000)
        libpcre.so.0 => /usr/lib64/libpcre.so.0 (0x00007f8982e29000)
        libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00007f8982c0e000)
        libssl.so.0.9.8 => /usr/lib64/libssl.so.0.9.8 (0x00007f89829c0000)
        libcrypto.so.0.9.8 => /usr/lib64/libcrypto.so.0.9.8 (0x00007f8982643000)
        libdb-4.5.so => /usr/lib64/libdb-4.5.so (0x00007f898230b000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f89820f3000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f8981edc000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f8981b83000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f898197f000)
        libz.so.1 => /lib64/libz.so.1 (0x00007f8981769000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f898154d000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f8983916000)
 
Ich habs hinbekommen.

Es war ein Zertifikat-Problem. Wobei ich nicht ganz verstehe, warum das vorherige Zert, erstellen nicht klappte.

ALT:(works not)
Code:
openssl genrsa -out mail.key 2048 
openssl req -new -key mail.key -out mail.csr
openssl x509 -req -days 3650 -in mail.csr -out mail.cert -signkey mail.key

main.cf
Code:
smtpd_tls_CAfile = /etc/postfix/tls/mail.csr
smtpd_tls_cert_file = /etc/postfix/tls/mail.cert
smtpd_tls_key_file = /etc/postfix/tls/mail.key
gleiches natürlich auch für smtp_***

-----------------------------------------------------------------------------------------------
NEU: (works)
Code:
$>mkdir /etc/postfix/ssl
$>cd cd /etc/postfix/ssl/
$>openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024 
$>chmod 600 smtpd.key
$>openssl req -new -key smtpd.key -out smtpd.csr
$>openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
$>openssl rsa -in smtpd.key -out smtpd.key.unencrypted
$>mv -f smtpd.key.unencrypted smtpd.key
$>openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

main.cf
Code:
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
gleiches natürlich auch für smtp_***


Damit klappt der Abruf über Outlook, wenn ich auf TLS umstelle.


Erstmal natürlich glücklich, weil es geht.
Nun aber die eher lächerliche Frage: Was hab ich gemacht ?
Bzw. eigendlich.... wo ist denn der Unterschied ?
Vermuten tu ich ja stark, das hier immer das Problem lag: smtpd_tls_CAfile

Gibt es denn einen einfacheren Weg, die Zertifikate zu erstellen?
Würde mir das gern als Howto in mein Blog reinpacken, damit ich später mal wieder drauf zurückgreifen kann.
 
Back
Top