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)