addy0604 11 Geschrieben 22. Oktober 2018 Melden Teilen Geschrieben 22. Oktober 2018 Hallo Zusammen, mir wachsen gerade graue Haare, ich hoffe ihr könnt mir helfen... Ich habe hier XML-Dateien, für die ich jeweils eine Signatur-Datei mittels einem PEM-Zertifikat mit openssl erstellen muss. Mit openssl dgst -sha512 -binary -out <Dateiname-mit-Suffix>.sig -sign Zertifikat.pem <Dateiname-mit-Suffix> geht das auch prima. Man wird nach der Pass-Phrase gefragt und nach Eingabe des Kennwortes wird die Signaturdatei erstellt. Nun hab ich aber 1097 XML-Dateien und zukünftig werden täglich Dateien erzeugt, die genauso bearbeitet werden müssen. Mir tun bei dem Gedanken jetzt schon die Finger weh, deshalb würde ich das gern automatisieren. Gibt es die Möglichkeit das Kennwort für die Pass-Phrase dort mit einzubauen? In den Howto's zu OpenSSL hab ich jedenfalls nichts gefunden. Hat da schon jemand Erfahrungen mit? Das Kennwort aus dem Zertifikat entfernen wird wahrscheinlich nicht gehen, weil es dann nicht mehr in der Gegenstelle (BZSt) verifiziert werden kann. Und wenn ja, wie könnte ein Script aussehen, das nach und nach alle 1097 Dateien aus dem Verzeichnis mit einer Signaturdatei versieht? Ich denke da an eine for-Schleife, hab aber wenig Erfahrungen damit... Grüße Matthias Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 22. Oktober 2018 Melden Teilen Geschrieben 22. Oktober 2018 (bearbeitet) Moin, dasselbe Kennwort für mehrere (oder gar alle) privaten Schlüssel wäre ziemlich sinnfrei. Was ist denn die Anforderung, wozu soll das dienen? mir scheint, ich war auf dem falschen Dampfer. Kannst du bitte trotzdem mal beschreiben, was da eigentlich erreicht werden soll? Gruß, Nils bearbeitet 22. Oktober 2018 von NilsK Zitieren Link zu diesem Kommentar
addy0604 11 Geschrieben 22. Oktober 2018 Autor Melden Teilen Geschrieben 22. Oktober 2018 Hallo Nils, mach ich gerne. Also: Ich hab hier die besagten 1097 XML-Dateien, die zum BZSt (Bundeszentralamt für Steuern) hochgeladen werden müssen. Das BZSt schreibt vor, das zu jeder XML-Datei eine Signaturdatei erzeugt und mit hochgeladen werden muss. Die Signaturdatei soll mit dem gleichen PEM-Zertifikat erzeugt werden, mit dem wir uns auch am online-Portal vom BZSt anmelden. Ich denke mal, das BZSt nutzt die Signaturdatei als Sicherheit zur Verifizierung der Dateien. Als Tool wird vom BZSt das OpenSSL Commandline-Tool vorgeschlagen. Mit einer einzelnen Datei funktioniert das in der Dos-Box auch prima. Man gibt openssl mit allen Parametern ein (siehe oben), gibt danach nach Aufforderung das Kennwort für das PEM-Zertifikat ein, die Sig-Datei wird erzeugt, fertig. Bei über 1000 Dateien wird das ganze recht eintönig... Deshalb war meine Frage, ob jemand einen Trick kennt, um das Kennwort mit in diesen Befehl zu packen. Es muss ja auch nicht unbedingt OpenSSL sein. Vielleicht gibt es auch andere Tools, die das können.... Die zweite Frage wäre, wie eine Schleife aussehen könnte, das für alle Dateien nacheinander eine Signatur erstellt wird... Grüße Matthias Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 22. Oktober 2018 Melden Teilen Geschrieben 22. Oktober 2018 Schau mal hier: https://stackoverflow.com/questions/42249433/signing-all-xml-files-in-directory-using-batch-script Man braucht das Rad ja nicht immer wieder neu erfinden. Zitieren Link zu diesem Kommentar
addy0604 11 Geschrieben 24. Oktober 2018 Autor Melden Teilen Geschrieben 24. Oktober 2018 Ich werd verrückt, da hat doch jemand genau mein Problem.... wieso hab ich das nicht gefunden??? Mein Google muss kaputt sein... Ich schau mir das morgen früh mal in Ruhe an, momentan ist es etwas stressig... Zitieren Link zu diesem Kommentar
addy0604 11 Geschrieben 25. Oktober 2018 Autor Melden Teilen Geschrieben 25. Oktober 2018 Hmm, so richtig klappt es mit dem Script aus dem oben genannten Link nicht. Hier noch einmal das Script: @echo off Rem placeholder for cert-file set cert="" for %%g in (*.pem) do ( echo "Certificate found: " %%g set cert=%%g Rem exit loop as we found a cert-file goto :SignFiles ) echo "No cert file found" exit :SignFiles Rem Ask user for Cert-Password set /p password="Please input cert-password: " Rem debug echo %password% Rem sign all xml-files in directory for %%g in (*.xml) do ( echo "Sign XML-File: " %%g Rem sign file and pass saved password for signing openssl dgst -binary -sha512 -out %%g.sig -sign=%cert% %%g < %password% ) pause exit Das Zertifikat wird gefunden und möchte das Kennwort haben. Soweit so gut. Danach kommt die Meldung: Das System kann die angegebene Datei nicht finden. -> Das Problem hatte der User im Link von BOfH_666 (siehe oben) auch gehabt. Mit den Antworten in dem Forum komme ich nicht zurecht: You need to echo %password%| openssl..., that is the redirector should be pipe. Using < expects a file named %password% which probably doesn't exist, so the error messsage you report is generated. After I changed the openssl command to correctly pass the password via -passin parameter it works. Thanks for helping me by showing my syntax errors! Mit dem -passin Parameter hatte ich es auch schon probiert. Da kommt allerdings die Meldung: dgst: Can only sign or verify one file. Und das mit dem "echo %password%| openssl... " hab ich gar nicht verstanden. Hat noch jemand eine Idee?? Grüße Matthias Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 25. Oktober 2018 Melden Teilen Geschrieben 25. Oktober 2018 Hmmm ... also ich bin kein Freund von Batch/cmd und auch nie richtig warm geworden damit, aber wenn ich das nicht falsch verstanden habe, sollte es mit Powershell ungefähr so funktionieren: $SourcePath = 'Pfad zum Ordner mit XML-Dateien' $CertFile = 'Zertifikat.pem' # am Besten vermutlich inclusive Pfad Get-ChildItem -Path $SourcePath -Filter *.xml | ForEach-Object { $outfile = $_.BaseName + '.sig' Start-Process -FilePath openssl -ArgumentList "dgst -sha512 -binary -out $outfile -sign $CertFile $_.FullName -passin pass:""hier das Passwort""" } Probier ma! (natürlich erstmal nur an 2 oder 3 Test-XML-Dateien) Zitieren Link zu diesem Kommentar
addy0604 11 Geschrieben 25. Oktober 2018 Autor Melden Teilen Geschrieben 25. Oktober 2018 Hallo BOfH_666, es knirschelt noch etwas. Mit dem SourcePath scheint etwas nicht zu stimmen und das Script will das Zertifikat öffnen und fragt nach einem entsprechenden Programm... siehe Screenshot Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 25. Oktober 2018 Melden Teilen Geschrieben 25. Oktober 2018 Hmmm ... wenn Du noch ne Weile in "Windows-Umgebungen unterwegs sein möchtest", nimmst Du Dir bei nächster Gelegenheit mal bitte etwas Zeit und schaffst Dir die Grundlagen von Powershell drauf. Ich glaube, es wird sich für Dich auszahlen und man kommt in Zukunft einfach nicht mehr dran vorbei. Bei der Zuweisung der Variablen gehören die "Werte" in Anführungszeichen - so wie es oben in meinem Code-Beispiel zu sehen ist. Zitieren Link zu diesem Kommentar
addy0604 11 Geschrieben 25. Oktober 2018 Autor Melden Teilen Geschrieben 25. Oktober 2018 Grundsätzlich hast du natürlich recht, das immer mehr mit Powershell gemacht wird. Leider, ich gestehe, ich bin eingefleischter Mausschubser und finde Powershell zum... übergeben, sorry. Ich finde da echt keinen Draht hin. Aber auch Grundlagen (selbst wenn ich sie hätte) verblassen, wenn man einmal im Jahr ein kleines Script braucht. Eine Batchdatei ist für mich halbwegs nachvollziehbar, Powershell ist für mich ein Sack voll Hieroglyphen und bin da völlig überfordert. Wenn du noch etwas Geduld mit mir hast würde ich gern noch einmal zu deinem Script zurückkommen. Nachdem die Hochkommata eingefügt sind kommt zumindest keine Fehlermeldung mehr. Es erscheint nur ganz kurz ein Konsolenfenster. Allerdings wird auch keine Signaturdatei erstellt. Ich hab mal versucht mit > Output.txt eine Ursache zu finden, aber die Datei bleibt leider leer. Wäre auch zu einfach gewesen ;) Gibt es da andere Möglichkeiten herauszufinden, wo es klemmt? Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 25. Oktober 2018 Melden Teilen Geschrieben 25. Oktober 2018 Häng an das Start-Process die Parameter -wait und -nonewwindow an. Dann sollten evtl. Fehler angezeigt werden. Evtl. fehlt der Pfad zu Openssl und die Endung (.exe). Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 25. Oktober 2018 Melden Teilen Geschrieben 25. Oktober 2018 (bearbeitet) vor 52 Minuten schrieb addy0604: Grundsätzlich hast du natürlich recht, das immer mehr mit Powershell gemacht wird. Leider, ich gestehe, ich bin eingefleischter Mausschubser und finde Powershell zum... übergeben, sorry. Ich finde da echt keinen Draht hin. Aber auch Grundlagen (selbst wenn ich sie hätte) verblassen, wenn man einmal im Jahr ein kleines Script braucht. Eine Batchdatei ist für mich halbwegs nachvollziehbar, Powershell ist für mich ein Sack voll Hieroglyphen und bin da völlig überfordert. Wenn Du die Grundlagen einer Technologie einmal richtig gelernt hast, dann hilft Dir das auch weiter, wenn Du sie nur selten benutzt - 'ist wie Fahrradfahren - Du fällst ja auch nicht um, nur weil Du mal n' halbes Jahr nicht gefahren bist. Ein guter und sogar ansatzweise unterhaltsamer Einstieg gelingt mit dem kostenlosen Videokurs der Microsoft Virtual Acadmy - Getting Started with Microsoft Poswershell. Das Anschauen der enthaltenen Videos dauert nur ca 8-10 Stunden, aber es wird Dir die Augen öffnen und vielleicht in Zukunft eine Menge Deiner Arbeitszeit einsparen weil Du viele Sachen einfach automatisieren kannst. Wenn man des Englishen mächtig ist, ist Powershell-Code in Grenzen quasi selbsterklärend, weil eben keine Hieroglyphen benutzt werden, wie das z.B. bei machen Linux-Tools üblich ist oder war. z.B. braucht man cmdlets wie Test-Path oder Get-Process oder Get-Service nicht wirklich aufwändig erklären, oder? Nun zum Script: Wie Dukel schon geschrieben hat: Wenn die Openssl.exe nicht in der Umgebungsvariable "Path" zu finden ist, musst Du den kompletten Pfad angeben, inclusive der Erweiterung. Die Parameter -Wait und -NoNewWindow zu ergänzen kann auch nicht schaden. -NoNewWindow leitet die Konsolenausgabe von OpenSSL in die Powershell-Konsole um und -Wait wartet einfach mit der Ausführung bis die Aufgerufene externe Anwendung (also OpenSSL in diesem Fall) fertig ist und die Kontrolle wieder abgegeben hat. bearbeitet 25. Oktober 2018 von BOfH_666 Tippfehler korrigiert 1 Zitieren Link zu diesem Kommentar
addy0604 11 Geschrieben 25. Oktober 2018 Autor Melden Teilen Geschrieben 25. Oktober 2018 Ich fürchte ich muss mir das wirklich irgendwann mal zur Gemüte führen. Wahrscheinlich mal an einem Wochenende. Denn selbst in der Zeit, in der ich gerade deinen Text gelesen hab, war der Vorstand bei mir, weil die Mails nicht schnell genug auf seinem Blackberry landen und ein anderer mit Papierstau im MFP 2 Etagen über mir. Ich kann manchmal froh sein, wenn ich mal 30 min konzentriert an einer Sache arbeiten kann. Aber ich will auch nicht jammern oder mich beklagen, sind alles liebe Kollegen ;) Aber zurück zum Script... Ich hab also den ganzen Pfad der OpenSSL.exe angegeben und auch die beiden Schalter angehangen. Nun sieht man auch was gemacht wird. Leider kommt wieder die altbekannte Meldung: dgst: Can only sign or verify one file. Ich denke das wird mit dem Schalter -passin zusammenhängen. Das Problem hatte ich schon in der Batchdatei. Dann wird es wohl kein generelles Problem mit Batch oder Powershell sein, sondern eher ein Problem mit openssl.... Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 25. Oktober 2018 Melden Teilen Geschrieben 25. Oktober 2018 vor 1 Minute schrieb addy0604: Leider kommt wieder die altbekannte Meldung: dgst: Can only sign or verify one file. Ich denke das wird mit dem Schalter -passin zusammenhängen. Ich würde ja eher auf die Übergabe des Dateinamens der zu bearbeitenden Datei tippen. Was passiert denn, wenn Du das Kommando manuell mit einem spezifischen Dateienamen in einer Powershell-Konsole eingibst? Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 25. Oktober 2018 Melden Teilen Geschrieben 25. Oktober 2018 Da wäre jetzt hilfreich, wenn Du den aktuell verwendeten Skriptcode mal herzeigst. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.