Jump to content

Signaturdatei mit openssl als Batch


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

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

Link zu diesem Kommentar
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 

 

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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
} 

 

Link zu diesem Kommentar
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
Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
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!  ;-)

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...