2010-12-27 12 views
8

He creado un certificado de máquina. Aparece en la carpeta del repositorio de certificados Certificados (Computadora local) \ Personal \ Certificados. Ahora deseo extraer su huella digital usando una utilidad de línea de comandos.¿Hay una utilidad de línea de comandos para extraer la huella digital del certificado?

Desafortunadamente, lo más parecido que pude encontrar está en this article.

Necesito poder realizar este procedimiento en cualquier sistema operativo Windows comenzando con XP.

Gracias.

+0

La secuencia de comandos en el artículo hace lo que quiere. Ponlo en un archivo vbs y ejecútalo. – Amnon

+0

Correcto, lo hice. Pero depende de CAPICOM.dll, que debe registrarse. Me preguntaba si hay una utilidad que use Crypt API directamente, sin dependencias. – mark

Respuesta

8

Viejo, pero tal vez esto ayude a alguien. Coloque lo siguiente en un script de powershell (.ps1) y ejecútelo. Imprimirá el pulgar en la pantalla. mira la palabra envolver en mi pasta.

$computerName = $Env:Computername 
$domainName = $Env:UserDnsDomain 
write-host "CN=$computername.$domainname" 
$getThumb = Get-ChildItem -path cert:\LocalMachine\My | where { $_.Subject -match "CN\=$Computername\.$DomainName" } 
$getThumb.thumbprint 
+0

Esto es lo suficientemente bueno para mí. Gracias. – mark

2

En mi caso no podría utilizar PowerShell, así que escribió este guión para funcionar con cscript.exe que les permite conocer el pulgar usando una expresión regular.

If WScript.Arguments.Count() = 0 Then 
    WScript.Echo "Domain name to search for must be specified as first parameter." 
    WScript.Quit 1 
End If 
domain = WScript.Arguments.Item(0) 

Set objShell = WScript.CreateObject ("WScript.shell") 

' Get all certificate information in store. 
Set objCert = objShell.Exec("certutil -store my") 
certOutput = "" 
Do While objCert.Status = 0 
    WScript.Sleep 10 
    Do While Not objCert.StdOut.AtEndOfStream 
    certOutput = certOutput & objCert.StdOut.ReadLine & vbNewLine 
    Loop 
Loop 

' Capture thumb for specified certificate using Regex. 
Set thumbRegex = New RegExp 
thumbRegex.Pattern = "Subject:\s+CN=" & domain & "\s*\n.*\n.*\nCert\sHash\(sha1\):\s+(.*)" 
thumbRegex.IgnoreCase = True 
thumbRegex.Global = False 

' Verify match and trim out white space. 
Set match = thumbRegex.Execute(certOutput) 
result = "" 
If match.Count > 0 Then 
    result = match.Item(0).Submatches(0) 
    result = Replace(result, " ", "") 
    WScript.Echo result 
Else 
    WScript.Echo "The certificate for """ & domain & """ was not found." 
    WScript.Quit 2 
End If 
3

Obtener huella digital directamente desde el archivo .cer

const certpath = "\\host\res\something.cer" 
dim objStdOut 
dim strLine, resString 

set objStdOut = CreateObject("WScript.Shell").Exec("certutil " & certpath).StdOut 

while not objStdOut.AtEndOfStream 
    strLine = objStdOut.ReadLine 
    if InStr(strLine, "(sha1)") > 0 then resString = trim(split(strLine, ":")(1)) 
wend 
wscript.echo resString 
4

directo desde la línea de comandos para un archivo .cer que no está instalado, y elimina los espacios incrustados (probablemente se puede mejorar):

certutil.exe <mycert>.cer | findstr /c:"Cert Hash(sha1)" | for /f "tokens=3-22" %f in ('more') do @echo %f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%x%y 
Cuestiones relacionadas