Probleme beim Verifizieren einer mit Python signierten Datei

9

Ich versuche, eine signierte Datei mit OpenSSL und Python zu erstellen, und ich erhalte keine Fehlermeldung, aber der Prozess funktioniert nicht richtig und ich kann den Grund nicht finden.

Unten ist meine Schritt-für-Schritt-Anleitung, um die Datei zu signieren und die Signatur zu überprüfen:

  1. Zuerst erstelle ich den crt in der Befehlszeile

    openssl req -nodes -x509 -sha256 -newkey rsa:4096 -keyout "cert.key" -out "cert.crt" -subj "/C=BR/ST=SP/L=SP/O=Company/OU=IT Dept/CN=cert"

An dieser Stelle habe ich zwei Dateien: cert.key und cert.crt

  1. Unterschreiben Sie die Datei mit einem Python-Skript wie folgt:

    %Vor%

Alles funktioniert gut und nachdem ich die Dateien gespeichert habe, habe ich noch drei weitere Dateien: my_file.csv (das Original), my_file.txt.sha256 und my_file.txt.sha256.base64 . An dieser Stelle kann ich die Base64-Datei dekodieren und mit der signierten vergleichen und beide sind in Ordnung.

Das Problem ist, wenn ich versuche, die Signatur mit dem folgenden Befehl zu überprüfen:

%Vor%

An diesem Punkt erhalte ich immer den "Verifikationsfehler" und verstehe nicht warum.

Vielleicht ist das Problem mein Mangel an Pythons Wissen, denn wenn ich die Datei unter Verwendung des folgenden Befehls signiere (nach Schritt 1 und vor der Verwendung des in 2 beschriebenen Python-Skripts), funktioniert die gleiche Überprüfung gut.

%Vor%

Mache ich etwas falsch?

AKTUALISIEREN

Basierend auf den Kommentaren, habe ich das Skript in einem lokalen virtualnv mit Python 2.7 ausprobiert und es hat funktioniert, also muss das Problem in den Lese- / Schreiboperationen liegen.

Ich aktualisiere diese Frage mit dem vollständigen Skript, einschließlich der Lese- / Schreiboperationen, weil ich es lokal ausführen kann, aber ich bekomme immer noch keinen Fehler in der GAE-Umgebung und kann nicht verstehen, warum.

Der erste Schritt ist die CSV-Erstellung und Speicherung im Google Storage (Bucket) mit dem Skript unter

%Vor%

Es funktioniert einwandfrei und speichert eine CSV-Datei im richtigen Pfad im Google-Speicher. Nach diesem Teil ist die nächste Lese- / Schreiboperation die Signatur der Datei.

%Vor%

Die inner_upload_file , speichern Sie einfach die neuen Dateien im selben Bucket:

%Vor%

Hier finden Sie die App.yaml als Referenz. Die von der Befehlszeile generierten Schlüssel cert.key und cert.crt werden in einem statischen Ordner im App-Ordner (demselben Verzeichnis, in dem sich meine app.yaml befindet) gespeichert.

UPDATE 2

Nach den Kommentaren habe ich versucht, den Signaturprozess lokal auszuführen und dann die Dateien zu vergleichen. Im Folgenden finden Sie Schritt für Schritt und Ergebnisse.

Zuerst habe ich den Signaturprozess so angepasst, dass er als python sign.py file_name ausgeführt wird.

%Vor%

Ich habe den automatischen Prozess ausgeführt, der die signierte Datei im GCS-Bucket (zusammen mit der ursprünglichen CSV-Datei) gespeichert hat. Danach lade ich beide Dateien über Google Web Panel für GCS herunter.

Ich habe den Befehl python sign.py gcs_file_original.csv in einem virtualenv mit python 2.7.10 mit der CSV-Datei, die ich gerade heruntergeladen habe, ausgeführt.

Danach habe ich die beiden signierten Dateien mit cmp -b gcs_signed.txt.sha256 locally_signed.txt.sha256 verglichen, was zu folgendem Ergebnis führte:

  

gcs_signed.txt.sha256 local_signed.txt.sha256 unterscheiden: Byte 1, Zeile 1 ist 24 ^ T 164 t

Mit dem VisualBinaryDiff sieht das Ergebnis aus wie zwei völlig verschiedene Dateien.

Jetzt kenne ich das Problem, habe aber keine Ahnung, wie ich es beheben kann. Dieses Problem ist sehr Trick.

    
James 20.10.2017, 21:33
quelle

1 Antwort

2

Ich habe das Problem endlich gefunden. Ich war so konzentriert in der Suche nach einem Problem in der OpenSSL Signatur Prozess und nicht auf die alte Strg + C / Ctrl + V Problem.

Zu Testzwecken habe ich den 'Read from GCS' kopiert 'Beispiel aus diesem Tutorial .

Als ich den Test in die reale Anwendung verschoben habe, habe ich die Seite nicht mehr gelesen und% code% nicht bemerkt.

Wie ich in der ursprünglichen Frage gesagt habe, bin ich kein Python-Spezialist, aber diese Zeile liest nur einen Teil der GCS-Datei, also unterscheidet sich die Signatur tatsächlich von der ursprünglichen.

Schneiden Sie einfach diese Zeile meiner Lesemethoden und jetzt funktioniert alles gut.

    
James 26.10.2017, 19:22
quelle