Ausgehende Mails automatisch mit Postfix (S/MIME) signieren

Ausgehende Mails automatisch mit Postfix (S/MIME) signieren

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 -textOption 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.cfverschieben.-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.

verwandte Informationen