S/MIME - Zertifikat per User

millilenium

Benutzer
Mitglied seit
03. Feb 2014
Beiträge
168
Punkte für Reaktionen
4
Punkte
18
Hallo zusammen,

habe mal wieder eine Frage: ist es möglich in Kopano direkt für einen Mailbox-User ein S/MIME-Zertifikat zu hinterlegen sodass alle Mails die via SMTP und sender_relay mit diesem Zertifikat automatisiert ausgestattet werden?
Ziel wäre es ein gültiges Zertifikat (z.B. von GlobalSign) einem Mailbox-User zuzuweisen und die Benutzer müssten sich dann nicht um das Signieren kümmern, das sollte dann der Spooler übernehmen.

Vielleicht weiß hier jemand einen Tipp oder Rat ob dies so überhaupt möglich ist.
Ich konnte in den Dokus zu Kopano leider nichts finden.

Danke im Voraus!
 

millilenium

Benutzer
Mitglied seit
03. Feb 2014
Beiträge
168
Punkte für Reaktionen
4
Punkte
18
Habe nun einen Versuch gewagt mit folgenden Skripten:

Code:
SENDMAIL="/usr/sbin/sendmail -G -i" # NEVER NEVER NEVER use "-t" here.
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
SMIMEDIR="/etc/kopano/mailcert"
CERT=$SMIMEDIR"/zertifikat.crt"
INSPECT_DIR=$SMIMEDIR"/work"

FROM=$2
TO=$4

# Clean up when done or when aborting.
trap "rm -f in.$$ in.$$.encrypted" 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || {
 echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }

cat >in.$$ || {
 echo Cannot save mail to file; exit $EX_TEMPFAIL; }

#Perform encryption here using OpenSSL
SUBJECT="$(formail < in.$$ -x Subject)"
openssl smime -encrypt -in in.$$ -out in.$$.encrypted -subject "$SUBJECT" -to $TO -from $FROM -aes256 $CERT || { echo Problem encrypting message; exit $EX_UNAVAILABLE; }

$SENDMAIL "$@" <in.$$.encrypted

exit $?

Und in der master.cf folgendes eingetragen:

Code:
smtp      inet  n       -       y       -       -       smtpd -o content_filter=meinfilter:dummy
meinfilter      unix    -       n       n       -       2       pipe
  flags=Rq user=kopano null_sender=
  argv=/etc/kopano/mailcert/postfixsmime.sh -f ${sender} -- ${recipient}

Leider erhalte ich in der mail.log den Hinweis wenn ich den User "kopano" verwende.
Andere User kann ich nicht eintragen, es klappt nicht - auch nicht mit dem sender_relay:

Code:
User kopano:
Nov 13 05:26:53 diskstation pipe[10680]: fatal: pipe_command: execvp /etc/kopano/mailcert/postfixsmime.sh: No such file or directory

User admin:
Nov 13 05:19:36 diskstation postfix/pipe[9096]: fatal: get_service_attr: unknown username: admin

Hat hier noch jemand eine Idee?
Danke!
 

millilenium

Benutzer
Mitglied seit
03. Feb 2014
Beiträge
168
Punkte für Reaktionen
4
Punkte
18
Bin wieder ein Stück weiter... nun stimmen alle Rechte und auch der User "kopano" klappt, nun geht es aber leider nicht über den relay und signiert nicht...

Code:
Nov 13 09:56:41 diskstation postfix/pipe[14788]: 42E3E2ABA9: to=<xxx@xxx.com>, relay=meinfilter, delay=0.05, delays=0.03/0.01/0/0.02, dsn=5.3.0, status=bounced (service unavailable. Command output: /etc/kopano/mailcert/postfixsmime.sh: 33: /etc/kopano/mailcert/postfixsmime.sh: formail: not found unable to load certificate 140667728675968:error:0909006C:PEM routines:get_name:no start line:../crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE Problem encrypting message )
 

millilenium

Benutzer
Mitglied seit
03. Feb 2014
Beiträge
168
Punkte für Reaktionen
4
Punkte
18
Wieder ein Update, es würde nun für die bestimmten Absender funktionieren, also Mail raussenden und postfix signiert diese.
Allerdings nur Mails im reinen Text-Format - dann kann ich die Mail durch postfix signieren gültig signieren lassen.

Im HTML-Format (via Outlook versendet) erhalte ich die Meldung dass die Nachricht nach dem Signieren verändert wurde.
Evtl. hat hier noch jemand Rat? Jetzt komme ich endgültig nicht weiter...

Und weiß jemand ob man das Paket "maildrop" auf der Syno installieren kann?
Das würde ich für den Befehl reformail benötigen.

Code:
#!/bin/bash
WORKDIR="/etc/kopano/mailcert/work"
SENDMAIL="/usr/sbin/sendmail -G -i"
EX_UNAVAILABLE=69
SENDER="$2"; RECIPIENT="$4"
if test $SENDER = "xxx@xxx.com" ; then
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 -signer /etc/kopano/mailcert/xxx.pem || { echo Problem signing message; exit $EX_UNAVAILABLE; }
$SENDMAIL "$@" < $MESSAGEFILE.signed
exit $?
else
        cat | $SENDMAIL "$@"
        exit $?
fi

DANKE!
 

Tosoboso

Benutzer
Mitglied seit
27. Aug 2012
Beiträge
1.256
Punkte für Reaktionen
52
Punkte
74
Hi, es gibt eine SMIME Plugin für WebApp / DeskApp und das solltest du Nutzen, das kann dann kompfortabel Signieren und Verschlüsseln.
Plugin Aktivieren unter WebApp Einstellungen Plugins; neu Einloggen, wieder Einstellungen, SMIME und entsprechen Konfigurieren (=>Kopano Help)
Aktivieren für Alle geht auch über K4S-Admin-GUI, Config, Plugin Wählen, =>DEFINE('PLUGIN_SMIME_USER_DEFAULT_ENABLE_SMIME', true);
Was du da aufzeigst passt eher zu einer DKIM Signatur für alle Nutzer und nicht für SMIME. Versuche doch bitte den offiziellen Weg und 'keep us posted'
-TosoBoso
 

millilenium

Benutzer
Mitglied seit
03. Feb 2014
Beiträge
168
Punkte für Reaktionen
4
Punkte
18
Hallo TosoBoso,

das hab ich mir schon angesehen allerdings arbeiten wir hier noch mit Outlook und dem ZarafaClient.
Und es soll für manche User ein Zertifikat angegeben werden (serverseitig), dann können sie es nicht vergessen.

Es klappt soweit auch mit Textnachrichten aus Outlook wunderbar, allerdings nicht mit HTML-formatieren Nachricvhten.
Werde aber weiter berichten, mit DKIM hab ich keine Erfahrung.

Es werden S/MIME-Zertifikate der CA Sectigo verwendet.
 

Tosoboso

Benutzer
Mitglied seit
27. Aug 2012
Beiträge
1.256
Punkte für Reaktionen
52
Punkte
74
Ahh, ok verstanden. Naja in Outlook würde ich eigentlich dort SMIM Nutzen, aber das mit der Zwangs Signierung ist natürlich ein Punkt.
Glück auf mit der Lösung.
Was DKIM angeht, so ist das eine Vertrauensbildende Anti-SPAM Massnahme, dass alle ausgehenden Mails signiert werden und im DNS der Schlüssel zu Verifizieren abgelegt wird. Es gibt da auch OpenDKIM, was z.B: Synology Mail-Server nutzt und auch amavis kann das; habe ich aber noch nicht abschliessend Getestet zwecks Umsetzung..
Aktuell plane ich von amavis weg zu rspamd zu gehen für k4s, das kombiniert mit einem 'Decompose' auf mehrere Container und Nutzung von Docker-Compose (Spolier Alert..)
PS: ich verwende (My)WiseId (https://wiseid.com/) für SMIME; das funktioniert gut direkt unter OL mit Zarafa Client und ist als Basis Angebot frei.
-TosoBoso
 
Zuletzt bearbeitet:

millilenium

Benutzer
Mitglied seit
03. Feb 2014
Beiträge
168
Punkte für Reaktionen
4
Punkte
18
So nun weiß ich warum Text-Files funktionieren und html nicht. Hier wird der Header im Skript nicht ausgelesen sondern mit text/plain gesendet.

Nun meine Frage an Euch: weiß jemand wie ich die Header der Original-Nachricht (Content-Type und Content-Transfer-Encoding) auslese und in die openssl smime Mail einbauen kann?
So wie analog dem reformail-Befehl - aber eben nicht das Subject?

Hier nochmals das aktuelle Skript das eigentlich nun meinen Bedarf erfüllt (außer html-Mails):

Code:
#!/bin/bash
WORKDIR="/etc/kopano/mailcert/work"
SENDMAIL="/usr/sbin/sendmail -G -i"
EX_UNAVAILABLE=69
SENDER="$2"; RECIPIENT="$4"
if test $SENDER = "xxx@xxx.com" ; then
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 /etc/kopano/mailcert/xxx.pem || { echo Problem signing message; exit $EX_UNAVAILABLE; }
$SENDMAIL "$@" < $MESSAGEFILE.signed
exit $?
else
        cat | $SENDMAIL "$@"
        exit $?
fi
 

millilenium

Benutzer
Mitglied seit
03. Feb 2014
Beiträge
168
Punkte für Reaktionen
4
Punkte
18
Geschafft, habe nun ein Skript "sign.sh" dass nun alle meine Wünsche erfüllt und die Mails signiert beim Versand via postfix.
Vielleicht kann es jemand von Euch ebenso benötigen:

Code:
#!/bin/bash

USERNAME="kopano"
SIGN_DIR="/etc/kopano/mailcert/work"
CERT_DIR="/etc/kopano/mailcert"
SENDMAIL="/usr/sbin/sendmail -G -i"
OPENSSL="/usr/bin/openssl"
CERT_FILE="${CERT_DIR}/$2.pem"

E_TEMPFAIL=75

cd ${SIGN_DIR} || {
  printf "${SIGN_DIR} does not exist"
  exit ${E_TEMPFAIL}
}

trap "rm -f in.$$ body.$$ body2.$$ header1.$$ header2.$$ header.$$ signed.$$" 0 1 2 3 15

cat >in.$$

sed '/^$/q' <in.$$ >header1.$$
sed '$d' <header1.$$ >header.$$

CONTENT_TYPE=`sed -n '/Content-Type:/p' <header1.$$`

printf "\r\n" >body.$$
sed '1,/^$/ d' <in.$$ >>body.$$

if [[ -f "${CERT_FILE}" ]] && [[ $CONTENT_TYPE != *"signed"* ]]; then

  MSG="Signed mail from $2"

  CONTENT_TYPE_BODY=`sed -n '/Content-Type/,+1p' header.$$`
  printf "${CONTENT_TYPE_BODY}\n" > body2.$$
  cat body.$$ >>body2.$$
  sed '/Content-Type/,+1 d' <header.$$ >header2.$$

  ${OPENSSL} smime -sign -signer ${CERT_FILE} -noattr -nodetach -in body2.$$ -out signed.$$
  sed '/Content-Type/,+1 d' <header.$$ >header2.$$

  cat header2.$$ signed.$$ | ${SENDMAIL} "$@"
else
  MSG="Unsigned mail from $2 because message already signed"
  cat in.$$ | ${SENDMAIL} "$@"
fi

STATUS=$?

if [ "${STATUS}" -eq 0 ]; then
  LOG_LEVEL="notice"
else
  LOG_LEVEL="err"
fi
logger -p "mail.${LOG_LEVEL}" -t "sign.sh" "${MSG}"

exit ${STATUS}
 
  • Like
Reaktionen: fbartels


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat