NB. lo so che questa pillola stona un pochino con tutte le altre… ma la mia necessità resta comunque quella di poter “pilotare” in qualche modo un sw libero (come FireFox) in un ambiente proprietario 😛
L’idea di base è quella di utilizzare il tool certutil per aggiungere una CA attendibile al database di Firefox.
In fase di login, viene eseguito uno script VBScript, il quale importa il certificato NOMECERTIFICATO.crt nel DB di Firefox per il profilo dell’utente corrente.
Questa la documentazione relativa al tool: https://developer.mozilla.org/en-US/docs/NSS/tools/NSS_Tools_certutil
Questi i sorgenti: https://developer.mozilla.org/en-US/docs/NSS/Tools
Questi gli eseguibili compilati per Window$: ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_10_RTM/WIN954.0_OPT.OBJ/nss-3.10.zip
Questo lo script richiamato tramite netlogon
Option Explicit 'On error resume next ' ---------------------------------------------------------- ' Impostare il percorso in cui si trovano i certificati ' e il nickname impostato in fase di importazione delle CA ' ---------------------------------------------------------- Const strCertDirPath = "\\srvad1\netlogon\ca" Const NickName = "kattive.levico.locale" ' ---------------------------------------------------------- Const DEBUGGING = true const SCRIPT_VERSION = 0.1 Const EVENTLOG_WARNING = 0 Const CERTUTIL_EXCUTABLE = "certutil.exe" Const ForReading = 1 Dim strCertutil, files, slashPosition, dotPosition, strCmd, message Dim file, filename, filePath, fileExtension Dim WshShell : Set WshShell = WScript.CreateObject("WScript.Shell") Dim objFilesystem : Set objFilesystem = CreateObject("Scripting.FileSystemObject") Dim certificates : Set certificates = CreateObject("Scripting.Dictionary") Dim objCertDir Dim UserFirefoxDBDir Dim UserFirefoxDir Dim vAPPDATA Dim objINIFile Dim strNextLine,Tmppath,intLineFinder strCertutil = strCertDirPath & "\" & CERTUTIL_EXCUTABLE vAPPDATA = WshShell.ExpandEnvironmentStrings("%APPDATA%") UserFirefoxDir = vAPPDATA & "\Mozilla\Firefox" if objFilesystem.FileExists( UserFireFoxDir & "\profiles.ini") Then Set objINIFile = objFilesystem.OpenTextFile( UserFireFoxDir & "\profiles.ini", ForReading) Do Until objINIFile.AtEndOfStream strNextLine = objINIFile.Readline intLineFinder = InStr(strNextLine, "Path=") If intLineFinder <> 0 Then Tmppath = Split(strNextLine,"=") UserFirefoxDBDir = UserFirefoxDir & "\" & replace(Tmppath(1),"/","\") End If Loop objINIFile.Close 'output UserFirefoxDBDir If objFilesystem.FolderExists(strCertDirPath) And objFilesystem.FileExists(strCertutil) Then Set objCertDir = objFilesystem.GetFolder(strCertDirPath) Set files = objCertDir.Files For each file in files slashPosition = InStrRev(file, "\") dotPosition = InStrRev(file, ".") fileExtension = Mid(file, dotPosition + 1) filename = Mid(file, slashPosition + 1, dotPosition - slashPosition - 1) If LCase(fileExtension) = "crt" Then WshShell.CurrentDirectory=WshShell.ExpandEnvironmentStrings("%ProgramFiles%") & "\Mozilla Firefox" strCmd = chr(34) & strCertutil & chr(34) &" -A -a -n " & chr(34) & NickName & chr(34) & " -i " & chr(34) & file & chr(34) & " -t " & chr(34) & "TCu,TCu,TCu" & chr(34) & " -d " & chr(34) & UserFirefoxDBDir & chr(34) 'output(strCmd) WshShell.Exec(strCmd) End If Next WshShell.LogEvent EVENTLOG_WARNING, "Aggiornamento CA - Firefox: " & WScript.ScriptFullName & " - version:" & SCRIPT_VERSION & vbCrLf & vbCrLf & message End If End If function output(message) If DEBUGGING Then Wscript.echo message End if End function Set WshShell = Nothing Set objFilesystem = Nothing
Questo il contenuto della cartella condivisa:
certutil.exe (scompattato da nss-3.10.zip) nss3.dll (scompattato da nss-3.10.zip) smime3.dll (scompattato da nss-3.10.zip) softokn3.dll (scompattato da nss-3.10.zip) NOME_CERTIFICATO.crt (file contenente la CA)