Есть ли утилита командной строки для извлечения отпечатка сертификата? - PullRequest
8 голосов
/ 27 декабря 2010

Я создал сертификат машины.Он появляется в папке Сертификаты (локальный компьютер) \ Личные \ Сертификаты хранилища сертификатов.Теперь я хочу извлечь его отпечаток с помощью утилиты командной строки.

К сожалению, самое близкое, что я смог найти, это эта статья .

Мне нужно уметьвыполнить эту процедуру на любой ОС Windows, начиная с XP.

Спасибо.

Ответы [ 5 ]

7 голосов
/ 13 декабря 2011

Старый, но, может быть, это кому-нибудь поможет.Поместите следующее в скрипт powershell (.ps1) и запустите его.Он выведет большой палец на экран.смотри слово «обтекание» в моей пасте.

$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
4 голосов
/ 08 июля 2016

Непосредственно из командной строки для файла .cer, который не установлен, и удаляет встроенные пробелы (возможно, могут быть улучшены):

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
2 голосов
/ 04 марта 2015

Получить отпечаток непосредственно из файла .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
1 голос
/ 28 апреля 2014

В моем случае я не мог использовать PowerShell, поэтому я написал этот скрипт для запуска с cscript.exe, который поможет вам разобраться с использованием регулярного выражения.

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
0 голосов
/ 04 мая 2018

Вот простой скрипт на python для этого:

def getThumbPrint(cert, passwd):
    val = ""
    info = subprocess.Popen(["certutil", "-p", passwd, cert], shell=False, stdout=subprocess.PIPE)
    for i in info.communicate()[0].split('\n'):
        if i.startswith("Cert Hash(sha1):"):
            val = i.split(':')[1].strip()

    # There may be more than 1, we want the last one.
    return val
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...