addy0604 11 Geschrieben 26. Oktober 2018 Autor Melden Teilen Geschrieben 26. Oktober 2018 Guten Morgen, hier noch einmal der Code: $SourcePath = 'C:\Test\Signaturdateien\' $CertFile = 'C:\Test\Signaturdateien\Zertifikat.pem' Get-ChildItem -Path $SourcePath -Filter *.xml | ForEach-Object { $outfile = $_.BaseName + '.sig' Start-Process -FilePath c:\test\signaturdateien\openssl.exe -ArgumentList "dgst -sha512 -binary -out $outfile -sign $CertFile $_.FullName -passin pass:""Kennwort""" -wait -nonewwindow } Als Ausgabe kommt die oben genannte Meldung: dgst: Can only sign or verify on file. Wenn ich den Passus -passin pass:""Kennwort"" komplett herausnehme, werde ich nach einem Kennwort für das Zertifikat gefragt. Nach Eingabe des Kennwortes kommt allerdings die Meldung: Testdatei.xml.FullName: No such file or directory Es wird dann eine Testdatei.sig erstellt, die aber leer ist. Erst wenn ich den richtigen Dateinamen in das Script schreibe... Start-Process -FilePath c:\test\signaturdateien\openssl.exe -ArgumentList "dgst -sha512 -binary -out Testdatei.xml.sig -sign $CertFile Testdatei.xml" -wait -nonewwindow ... wird eine Testdatei.xml.sig mit Inhalt erstellt. Aber auch wieder erst nach Eingabe eines Kennwortes. Grüße Matthias Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 26. Oktober 2018 Melden Teilen Geschrieben 26. Oktober 2018 vor 53 Minuten schrieb addy0604: Nach Eingabe des Kennwortes kommt allerdings die Meldung: Testdatei.xml.FullName: No such file or directory Benutze dafür "$($_.FullName)": Start-Process -FilePath c:\test\signaturdateien\openssl.exe -ArgumentList "dgst -sha512 -binary -out $outfile -sign $CertFile $($_.FullName) -passin pass:""Kennwort""" -wait 1 Zitieren Link zu diesem Kommentar
addy0604 11 Geschrieben 26. Oktober 2018 Autor Melden Teilen Geschrieben 26. Oktober 2018 Hab ich gleich mal getestet: Es kommt zwar keine Fehlermeldung mehr und die Signatur-Datei hat jetzt einen Inhalt, heißt aber nach wie vor Testdatei.sig anstatt Testdatei.xml.sig. Aber das ist nicht so tragisch. Es funktioniert halt nach wie vor nur ohne -passin pass:Kennwort und einer manuellen Eingabe des Kennwortes. Ich glaube fast, das openssl bzw. der Schalter -passin gar nicht dafür ausgelegt ist, um das Zertifikatskennwort automatisiert angeben zu können. Denn das ist das gleiche wie bei meiner for-Schleife in der Batchdatei... Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 26. Oktober 2018 Melden Teilen Geschrieben 26. Oktober 2018 (bearbeitet) Das liegt daran, dass "$_.BaseName" halt auch nur der Name der Datei ohne Erweiterung ist. Entweder hängst du an "$_.BaseName" '.xml.sig' an oder du nimmst "$._Name" und hängst '.sig' an. bearbeitet 26. Oktober 2018 von testperson Zitieren Link zu diesem Kommentar
addy0604 11 Geschrieben 26. Oktober 2018 Autor Melden Teilen Geschrieben 26. Oktober 2018 Ich glaub ich gebe auf. Ich habe gelesen, das Microsoft nun endlich die Funktion Strg+C und V in die cmd.exe und Powershell eingebaut hat. Zumindest bei Windows 10 und Server 2016. Dann drück ich halt 1000 mal Strg+V und Enter, aber immerhin besser als 1000 mal das Kennwort einzugeben. Aber das Powershell-Video werde ich mir auf jeden Fall mal anschauen. Vielleicht werde ich ja noch warm damit :) Viele Grüße und Danke für die Hilfe Matthias Hallo Testperson, danke für den Hinweis, wieder was gelernt. Damit passt zwar nun die Signaturdatei, aber es ändert leider nichts an der Tatsache, das ich für jede XML-Datei das Kennwort eingeben muss :( Wie gesagt, unter Windows 10 kann ich das Kennwort zumindest mit Strg+V eingeben... Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 26. Oktober 2018 Melden Teilen Geschrieben 26. Oktober 2018 Schreibe das Kennwort in der PwoerShell einfach in eine Variable und übergebe die doch einfach an -passin. $SourcePath = "C:\Test\Signaturdateien\" $CertFile = "C:\Test\Signaturdateien\Zertifikat.pem" $pwd = "D3in_g3he!mesPW" Get-ChildItem -Path $SourcePath -Filter *.xml | ForEach-Object { $outfile = $_.BaseName + ".xml.sig" Start-Process -FilePath c:\test\signaturdateien\openssl.exe -ArgumentList "dgst -sha512 -binary -out $outfile -sign $CertFile $($_.FullName) -passin $pwd -wait -nonewwindow } Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 26. Oktober 2018 Melden Teilen Geschrieben 26. Oktober 2018 (bearbeitet) vor einer Stunde schrieb addy0604: Damit passt zwar nun die Signaturdatei, aber es ändert leider nichts an der Tatsache, das ich für jede XML-Datei das Kennwort eingeben muss :( hmmmm ... ich glaube ja, dass Du zu schnell aufgibst ... Du bist auf der Zielgeraden und willst jetzt die Flinte ins Korn werffen?? ... schau Dir doch nochmal die Doku zu OpenSSL und den Kommandozeilenoptionen an. Dort gibt es noch weitere Optionen, wie man das Passwort an das Tool übergeben kann. bearbeitet 26. Oktober 2018 von BOfH_666 1 Zitieren Link zu diesem Kommentar
addy0604 11 Geschrieben 26. Oktober 2018 Autor Melden Teilen Geschrieben 26. Oktober 2018 Hmpf... auch mit der Variable hat es nicht geklappt.... :( Aber ich schau mir am Wochenende noch mal die Optionen von openssl an. Unter https://github.com scheint es auch eine Art Forum für openssl zu geben. Vielleicht finde ich da was... Euch schon mal ein schönes Wochenende Matthias Zitieren Link zu diesem Kommentar
addy0604 11 Geschrieben 30. Oktober 2018 Autor Melden Teilen Geschrieben 30. Oktober 2018 Hallo Zusammen, ich hab mir das am Wochenende noch mal angeschaut. So wie ich das verstanden habe, wird der Schalter -passin genutzt, um ein Zertifikat mit Kennwort mittels openssl zu erstellen. Zusammen mit -dgst funktioniert das nicht. Ich hab auch keine Möglichkeit und kein Argument gefunden, in dem ich das Kennwort irgendwie automatisiert mitgeben kann. Wenn ich -dgst -sha512 -binary -out $outfile -sign $CertFile $_.FullName normal ausführe, werde ich nach dem Kennwort gefragt. Sobald ich aber irgendein weiteres Argument hinzufüge, in welcher Syntax auch immer, auch wenn es nur ein schnödes -x ist, kommt sofort die Meldung: dgst: Can only sign or verify one file. Wenn der Schnaps demnächst nach Eisen schmeckt, nicht wundern, ich hab die Flinte in den Korn geworfen... Trotzdem besten Dank Matthias Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 2. November 2018 Melden Teilen Geschrieben 2. November 2018 So ... jetze ich ... Ich hab mir mal den Spaß gemacht, mir ein selbstsigniertes Zertifikat erstellt, hab mir ein paar XML-Dateien zusammengesucht und ein bissl rumprobiert. Und was soll ich sagen - es scheint zu funktionieren. Jedenfalls erhalte ich keine Fehlermeldungen und die Signaturdateien werden erstellt. :-D Hier ist der passende Code: $OpenSSL_EXE = 'C:\_Temp\openssl\openssl.exe' $SourcePath = 'C:\_Temp\xml' $CertFile = 'C:\_Temp\cert.pem' Get-ChildItem -Path $SourcePath -Filter *.xml | ForEach-Object { $outfile = Join-Path -Path $_.Directory -ChildPath $($_.Name + '.sig') Start-Process -FilePath $OpenSSL_EXE -ArgumentList "dgst -sha512 -binary -out $outfile -sign $CertFile -passin pass:""passw0rd!"" $($_.FullName)" -NoNewWindow } !! Nicht wundern - trotz des Parameters -NoNewWindow poppt in der ISE kurz ein weiteres Konsolenfenster auf - vielleicht für die 1000+ XML-Dateien einfach die normale Konsole nutzen ... 1 Zitieren Link zu diesem Kommentar
addy0604 11 Geschrieben 2. November 2018 Autor Melden Teilen Geschrieben 2. November 2018 Nee oder? Ich krieg die Kriese.... wieso funktioniert das nun plötzlich... Ich hab mir die Scripte mal angeschaut und noch mal durchprobiert. Es liegt echt daran, das die Parameter in einer bestimmten Reihenfolge angeordnet sein müssen. An die Möglichkeit hab ich nicht gedacht und ist auch nirgends extra erwähnt worden. Ich hab dein Script vom letzten Donnerstag übernommen und damit experimentiert. Dort war hinter -out und -sign immer erst die XML-Datei und zum Schluss der Schalter -passin angegeben. Auf die Idee, die Reihenfolge der Schalter mal zu ändern, bin ich auch nicht gekommen. Du hast nun den Schalter -passin direkt hinter -sign gesetzt und zum Schluss die zu signierende XML-Datei... und schon geht es.... kleine Ursache, große Wirkung... 1000 Dank, das du so hartnäckig warst... ihr seid echte Profis Beitrag kann erfolgreich geschlossen werden. Grüße Matthias Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 2. November 2018 Melden Teilen Geschrieben 2. November 2018 vor 10 Minuten schrieb addy0604: ... das die Parameter in einer bestimmten Reihenfolge angeordnet sein müssen. .... Es ist wohl nicht nur das gewesen, sondern irgendwie eine Kombination. Bei meiner Recherche hatte ich irgendwo gelesen -es ging eigentlich um einen anderen Fehler - dass das Tool den zu verarbeitenden Dateinamen als letztes in der Zeile erwartet. Und wenn es den Parameter an letzter Stelle nicht interpretieren kann, geht es davon aus, dass es ein Dateiname ist. Deshalb auch die Meldung, dass es immer nur eine Datei signieren/verarbeiten kann. Na egal ... schön, dass es doch funktioniert vor 20 Minuten schrieb addy0604: Beitrag kann erfolgreich geschlossen werden. ... einfach die entsprechende Antwort als "die Lösung" kennzeichnen! 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.