#!hs2 #!load hwindows.hsm var( $i, $j, $b ) var( $Shell, $OpenSSL, $Import_Dir, $FileExt, $Export_Dir ) var( $FilesList, $File, $FileList, $Zeile, $CertList ) varset( $CRLF, chr(13) + chr(10) ) MsgBox( "Zur Verwendung eines Verzeichnisses als Zertifikatsspeicher "+_ "müssen die Zertifikate in einem betimmten Format vorliegen, "+_ "damit sie von den OpenSSL Krypto-Bibliotheken gefunden werden "+_ "können:" +$CRLF+_ "Der Dateiname muß dem Hashwert entsprechen, die Erweiterung ist "+_ "'0'. Ein möglicher Dateiname wäre also beispielsweise '54edfa5d.0'."_ +$CRLF+$CRLF+_ "Dieses Skript erstellt aus allen bereits vorhandenen "+_ "Zertifikatsspeichern eines bestimmten Verzeichnisses folgende "+_ "Dateien:"+$CRLF+_ $CRLF+_ "1. eine Kopie jedes Zertifikats mit dem Namen '[Hash].0'" +$CRLF+_ "2. eine Datei mit Informationen über das jeweilige Zertifikat "+_ "mit dem Namen '[Hash].txt'",_ "SSL-Cert-Hash", $MB_ICONINFORMATION ) $Shell = IniRead( "", "SSL-Cert-Hash", "Shell", DirWindows + "command.com" ) if( !fileexists( $Shell ) ) if( FileExists( DirSystem + "cmd.exe") ) $Shell = DirSystem + "cmd.exe" IniWrite( "", "SSL-Cert-Hash", "Shell", $Shell ) else $Shell = StoreValue( "Shell",_ "Es wurde kein Kommandozeileninterpreter gefunden!"+$CRLF+$CRLF+_ "Bitte geben sie den vollständigen Pfad zu Ihrem Kommandozeileninterpreter an.",_ "" ) endif if( !fileexists( $Shell ) ) MsgBox( "Datei '" + $Shell + "' existiert nicht!", "Fehler", $MB_ICONERROR ) quit endif endif $OpenSSL = IniRead( "", "SSL-Cert-Hash", "OpenSSL", "" ) if( !fileexists( $OpenSSL ) ) $OpenSSL = StoreValue( "OpenSSL",_ "Bitte geben Sie den vollständigen Pfad zur Datei 'openssl.exe' an",_ "c:\openssl-0.9.6c\out\openssl.exe" ) if( !fileexists( $OpenSSL ) ) MsgBox( "Datei '" + $OpenSSL + "' existiert nicht!", "Fehler", $MB_ICONERROR ) quit endif endif $Import_Dir = IncludeBackslash( StoreValue( "Import-Dir",_ "Bitte geben Sie das Verzeichnis an, in dem sich die Zertifikate "+_ "befinden, die konvertiert werden sollen.",_ IniRead( "", "SSL-Cert-Hash", "Import-Dir", "C:\WINDOWS\Desktop\" ) ) ) CheckDir( $Import_Dir ) $FileExt = StoreValue( "File-Extension",_ "Welche Dateinamenerweiterung haben die Zertifikate, "+$CRLF+_ "die konvertiert werden sollen?",_ IniRead( "", "SSL-Cert-Hash", "File-Extension", "pem" ) ) $Export_Dir = IncludeBackslash( StoreValue( "Export-Dir",_ "Bitte geben Sie das Verzeichnis an, in das die Zertifikate "+_ "exportiert werden sollen.",_ IniRead( "", "SSL-Cert-Hash", "Export-Dir", "C:\Crypto\CA" ) ) ) CheckDir( $Export_Dir ) $FilesList = ListAlloc $FileList = ListAlloc $CertList = ListAlloc ListFiles( $FilesList, $Import_Dir + "*." + $FileExt , True ) for( $i, 0, ListCount( $FilesList ) - 1, 1 ) $File = ListGet( $FilesList, $i ) print( "Lade Datei '", $File, "'" ) ListClear( $FileList ) if( ListLoad( $FileList, $File ) < 0 ) warning( "Datei '" + $File +_ "' existiert nicht oder ist fehlerhaft!", "Fehler", $MB_ICONERROR ) continue endif $b = False for( $j, 0, ListCount( $FileList ) - 1, 1 ) $Zeile = ListGet( $FileList, $j ) if( $Zeile == "-----BEGIN CERTIFICATE-----" ) $b = True ListClear( $CertList ) endif if( $b ) ListAdd( $CertList, $Zeile ) endif if( ( $b ) && ( $Zeile == "-----END CERTIFICATE-----" ) ) $b = False print( "Zertifikat in '", $File, "' gefunden." ) HashCert( $CertList ) ListClear( $CertList ) endif endfor endfor ListFree( $CertList ) ListFree( $FileList ) ListFree( $FilesList ) quit # ------------------------------------------------------------------------- sub HashCert( $CertList ) var( $ExitCode, $Hash, $Text, $FileName ) $Hash = ListAlloc $Text = ListAlloc FileDelete( $Import_Dir + "Cert.tmp" ) FileDelete( $Import_Dir + "Hash.tmp" ) FileDelete( $Import_Dir + "Text.tmp" ) if( ListSave( $CertList, $Import_Dir + "Cert.tmp" ) == 0 ) execute( $Shell + " /C " + $OpenSSL + " x509 -hash -noout -in Cert.tmp " +_ ">> Hash.tmp", $Import_Dir, 2, True, $ExitCode ) if( $ExitCode != 0 ) warning( "Exitcode=", $Exitcode, " ", $Shell, " /C ", $OpenSSL,_ " x509 -hash -noout -in Cert.tmp >> Hash.tmp" ) return else if( ListLoad( $Hash, $Import_Dir + "Hash.tmp" ) == 0 ) $FileName = $Export_Dir + ListGet( $Hash, 0 ) + ".0" if( ListSave( $CertList, $FileName ) == 0 ) print( "X.509 Zertifikat unter '", $FileName, "' abgespeichert." ) else warning( "Fehler beim Abspeichern des Zertifikats unter '",_ $FileName, "'!" ) endif else return endif endif execute( $OpenSSL + " x509 -text -in Cert.tmp -noout -out Text.tmp",_ $Import_Dir, 2, True, $ExitCode ) if( $ExitCode != 0 ) warning( "Exitcode=", $Exitcode, " ", $OpenSSL,_ " x509 -text -in Cert.tmp -noout -out Text.tmp" ) return else if( ListLoad( $Text, $Import_Dir + "Text.tmp" ) == 0 ) $FileName = $Export_Dir + ListGet( $Hash, 0 ) + ".txt" if( ListSave( $Text, $FileName ) == 0 ) print( "Zertifikatsinformationen unter '", $FileName, "' abgespeichert." ) else warning( "Fehler beim Abspeichern der Zertifikatsinformationen unter '",_ $FileName, "'!" ) endif else return endif endif endif ListFree( $Hash ) ListFree( $Text ) FileDelete( $Import_Dir + "Cert.tmp" ) FileDelete( $Import_Dir + "Hash.tmp" ) FileDelete( $Import_Dir + "Text.tmp" ) endsub sub StoreValue( $Ident, $Text, $Default ) var( $Value, $ReturnCode ) $Value = InputBox( $Text, "SSL-Cert-Hash", $Default, $ReturnCode ) if( $ReturnCode == False ) quit endif IniWrite( "", "SSL-Cert-Hash", $Ident, $Value ) return( $Value ) endsub sub IncludeBackslash( $String ) $String = trim( $String ) if( copy( $String, len( $String ), 1 ) != "\" ) return( $String + "\" ) else return( $String ) endif endsub sub CheckDir( $Dir ) if( !DirExists( $Dir ) ) MsgBox( "Verzeichnis '" + $Dir + "' existiert nicht!", "Fehler", $MB_ICONERROR ) quit endif endsub