![Ausgehende Mails automatisch mit Postfix (S/MIME) signieren](https://rvso.com/image/617828/Ausgehende%20Mails%20automatisch%20mit%20Postfix%20(S%2FMIME)%20signieren.png)
Ich möchte ausgehende Mails automatisch mit Postfix signieren. Ich habe ein Skript gefunden und es in Postfix integriert. Das funktioniert größtenteils wie erwartet, hat aber zwei Fehler und ich hoffe, Sie können mir helfen, diese zu beheben.
/home/xxx/sign.sh
#!/bin/bash
WORKDIR="/tmp"
SENDMAIL="/usr/sbin/sendmail -G -i"
EX_UNAVAILABLE=69
SENDER="$2"; RECIPIENT="$4"
MESSAGEFILE="$WORKDIR/message.$$"
trap "rm -f $MESSAGEFILE; rm -f $MESSAGEFILE.signed" 0 1 2 3 15
umask 077
cat > $MESSAGEFILE || { echo Cannot save mail to file; exit $EX_UNAVAILABLE;}
SUBJECT=$(reformail -x "Subject:" < $MESSAGEFILE)
openssl smime -sign -in $MESSAGEFILE -out $MESSAGEFILE.signed -from $SENDER -to $RECIPIENT -subject "$SUBJECT" -signer /home/xxx/sign.crt -inkey /home/xxx/sign_key.crt -text || { echo Problem signing message; exit $EX_UNAVAILABLE; }
$SENDMAIL "$@" < $MESSAGEFILE.signed
exit $?
Dies ist die Implementierung in Postfix:
smtp inet n - - - - smtpd
-o content_filter=spamassassin
-o content_filter=meinfilter:dummy
meinfilter unix - n n - 2 pipe
flags=Rq user=xxx null_sender=
argv=/home/xxx/sign.sh -f ${sender} -- ${recipient}
Die Fehler sind
die Betreffzeile ist immer leer,dies liegt an fehlenden Softwareabhängigkeiten- die zugestellte Nachricht hat einen doppelten Header (im normalen Header und in der Nachricht)
Hier der Roh-E-Mail-Header und -Text. Sie können den doppelten Header unten erkennen
To: xxx
From: xxx
Subject: Testsubject
MIME-Version: 1.0
Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg="sha-256"; boundary="----2466B05A8CF1ACF5CD6D9B7B8AE72747"
This is an S/MIME signed message
------2466B05A8CF1ACF5CD6D9B7B8AE72747
Content-Type: text/plain
Return-Path: <xxx>
Received: from [127.0.0.1] (xxx [xxx])
by xxx (Postfix) with ESMTPSA id xxx
for <xxx>; Fri, 13 Sep 2013 02:49:22 +0000 (UTC)
Message-ID: <xxx>
Date: Fri, 13 Sep 2013 04:49:21 +0200
From: xxx
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20130801 Thunderbird/17.0.8
MIME-Version: 1.0
To: xxx
Subject: Testsubject
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit
Testmessage
------2466B05A8CF1ACF5CD6D9B7B8AE72747
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
LONGTEXTLONGTEXTWITHPUBLICKEYLONGTEXTLONGTEXTWITHPUBLICKEY
LONGTEXTLONGTEXTWITHPUBLICKEYLONGTEXTLONGTEXTWITHPUBLICKEY
LONGTEXTLONGTEXTWITHPUBLICKEYLONGTEXTLONGTEXTWITHPUBLICKEY
...
LONGTEXTLONGTEXTWITHPUBLICKEYLONGTEXTLONGTEXTWITHPUBLICKEY
LONGTEXTLONGTEXTWITHPUBLICKEYLONGTEXTLONGTEXTWITHPUBLICKEY
LONGTEXTLONGTEXTWITHPUBLICKEYLONGTEXTLONGTEXTWITHPUBLICKEY
Wie könnten diese beiden Probleme gelöst werden?
Antwort1
Wenn Sie nicht möchten, dass Ihrer signierten E-Mail die Klartext-Header hinzugefügt werden, entfernen Sie die -text
Option aus dem OpenSSL-Befehl im sign.sh-Skript. Wie angegebenHier
-Text
this option adds plain text (text/plain) MIME headers to the supplied message if encrypting or signing. If decrypting or verifying it strips off text headers: if the decrypted or verified message is not of MIME type text/plain then an error occurs.
Um nur ausgehende E-Mails zu signieren, sollten Sie den Übermittlungsport (587) oder SMTP (465) in Ihrem Gerät aktivieren und die E-Mail nur auf diesen Port master.cf
verschieben.-o content_filter=meinfilter:dummy
#submission
submission inet n - n - - smtpd
-o content_filter=meinfilter:dummy
Das bedeutet, dass nur E-Mails, die über diesen Port gesendet werden (der normalerweise mit TLS und Authentifizierung verknüpft ist), von Ihrem Skript signiert werden. Sie möchten möglicherweise auch sicherstellen, dass nur authentifizierte, TLS-verschlüsselte Verbindungen über Ihren Server weitergeleitet werden dürfen.