PGP-signieren mehrteilige E-Mails mit Python

8

Ich versuche derzeit, mein kleines E-Mail-Sende-Skript (das verwendet Python 3.x und python-gnupg -Modul).

Der Code, der die Nachricht signiert, lautet:

%Vor%

( basemsg entspricht dem Typ email.message.Message .)

Und messageFromSignature Funktion ist:

%Vor%

Dann füge ich alle benötigten Header zur Nachricht hinzu ( msg ) und sende sie.

Dies funktioniert gut für nicht mehrteilige Nachrichten, schlägt jedoch fehl, wenn basemsg mehrteilig ist ( multipart/alternative oder multipart/mixed ).

Manuelles Überprüfen der Signatur gegen das entsprechende Stück Text funktioniert, aber Evolution und Mutt melden, dass die Signatur schlecht ist.

Kann mir bitte jemand auf meinen Fehler hinweisen?

    
Dmitry Shachnev 08.05.2012, 10:32
quelle

3 Antworten

5

Das Problem ist, dass Pythons email.generator -Modul vor dem Signaturteil keinen Zeilenumbruch hinzufügt. Ich habe das Upstream als Ссылка gemeldet.

    
Dmitry Shachnev 08.06.2012, 08:31
quelle
2

Was ist eigentlich die MIME-Struktur von basemsg ? Es scheint, dass es zu viele verschachtelte Teile darin hat. Wenn Sie eine signierte Nachricht von z. Evolution, du wirst sehen, dass es nur zwei Teile hat: den Körper und die Signatur.

Hier ist ein Beispiel, das eine Nachricht auf stdout erzeugt, die gelesen werden kann und die Signatur sowohl für mutt ( mutt -f test.mbox ) als auch Evolution (Datei - & gt; Import) verifiziert hat.

%Vor%

Beachten Sie, dass hier ein Schlüsselring mit einer Passphrase angenommen wird, aber Sie brauchen das nicht.

    
Fabian Fagerholm 31.05.2012 09:15
quelle
0

Es gibt viel mehr Probleme mit der integrierten Python-Bibliothek email . Wenn Sie die Prozedur as_string aufrufen, werden die Header nur in der aktuellen Klasse nach maxlinelength und in den Childs ( _payload ) nicht durchsucht! So:

%Vor%

Ich habe msgMix.to_string() unterzeichnet und dann die signierte Nachricht an die msgRoot angehängt. Beim Senden an SMTP war der msgMix -Teil jedoch anders, die Header in msgMix wurden nicht verschoben. Ofc, das Zeichen war ungültig.

Es hat zwei Tage gedauert, bis ich alles verstanden habe. Hier ist mein Code, der funktioniert und ich benutze ihn für das Senden von automatischen E-Mails:

%Vor%

Ich würde gerne Spenden annehmen:

Ethereum: 0x610E3B4e804b367c182c5FC4D65d09c089723389

BTC: 1iFA88LxbGYpVgis6v6PzN8JeV1C58wJd

    
iFA88 20.03.2018 13:02
quelle