Jump to content

Empfohlene Beiträge

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
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 

 

  • Like 1

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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...

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von testperson

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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...

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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
} 

 

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
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 von BOfH_666
  • Danke 1

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

So ... jetze ich ... ;-):D 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 ...  ;-)

  • Like 1

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Nee oder? Ich krieg die Kriese.... wieso funktioniert das nun plötzlich... :shock2:

 

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.... :D kleine Ursache, große Wirkung... ;-)

 

1000 Dank, das du so hartnäckig warst... ihr seid echte Profis :thumb1:

Beitrag kann erfolgreich geschlossen werden.

 

Grüße

Matthias

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
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!  ;-)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

×