Сертификаты запроса для SHA1 / SHA2 / SHA256 - PullRequest
0 голосов
/ 01 ноября 2018

Я знаю, что мы можем сделать это в PowerShell.

(Get-ChildItem Cert:\Currentuser\My\ | Select -Property SignatureAlgorithm -ExpandProperty SignatureAlgorithm).FriendlyName

Результаты:

sha256RSA
sha256RSA

Ref .. https://blogs.technet.microsoft.com/poshchap/2017/10/20/one-liner-get-signing-algorithm-for-personal-store-certificates/

Однако корпорация не позволит нам запускать PowerShell в полевых условиях.

Я могу запустить следующее и установить сертификаты для промежуточных и корневых хранилищ.

certutil -store CA
certutil -store Root

И они дают результаты. Однако, глядя на: Cert Hash (sha1): Он показывает только SHA1 и не SHA256?

Пример результатов одной из записей:

Serial Number: removed
Issuer: CN=Entrust Root Certification Authority - G2, OU=(c) 2009 Entrust, Inc. - for authorized use only, OU=See www.entrust.net/legal-terms, O=Entrust, Inc., C=US
 NotBefore: 10/22/2014 1:05 PM
 NotAfter: 10/23/2024 3:33 AM
Subject: CN=Entrust Certification Authority - L1K, OU=(c) 2012 Entrust, Inc. - for authorized use only, OU=See www.entrust.net/legal-terms, O=Entrust, Inc., C=US
Non-root Certificate
Cert Hash(sha1): removed

В конечном счете, я хочу сделать запрос к такой компании, как VeriSign.

Спасибо за понимание.

От @JosefZ я ценю высказанные идеи: Хорошо ... Я думаю, что у меня большая часть этой работы, но я получаю дополнительную информацию от других поставщиков сертификатов.

Сценарий на данный момент:

@echo off
echo personal
certutil -v -user -store "MY"|findstr "Serial.Number Algorithm.ObjectId Cert.Hash( X509.Certificate: O=VeriSign"
echo Intermediate
certutil -v -store CA|findstr "Serial.Number Algorithm.ObjectId Cert.Hash( X509.Certificate: O=VeriSign"
echo Root
certutil -v -store Root|findstr "Serial.Number Algorithm.ObjectId Cert.Hash( X509.Certificate: O=VeriSign"

И, результаты - обратите внимание на дополнительный сертификат здесь:

X509 Certificate:
Serial Number: <removed>
    Algorithm ObjectId: 1.2.840.113549.1.1.11 sha256RSA
    Algorithm ObjectId: 1.2.840.113549.1.1.1 RSA (RSA_SIGN)
    Algorithm ObjectId: 1.2.840.113549.1.1.11 sha256RSA
Cert Hash(md5): <removed>
Cert Hash(sha1): <removed>

И, должен показывать только VeriSign:

X509 Certificate:
Serial Number: <removed>
    Algorithm ObjectId: 1.2.840.113549.1.1.11 sha256RSA
    O=VeriSign, Inc.
    O=VeriSign, Inc.
    Algorithm ObjectId: 1.2.840.113549.1.1.1 RSA (RSA_SIGN)
    Algorithm ObjectId: 1.2.840.113549.1.1.11 sha256RSA
Cert Hash(md5): <removed>
Cert Hash(sha1): <removed>

Примечание. VeriSign (или другой поставщик, например Entrust) - это единственные сертификаты, которые мы хотим видеть.

Часть III , мы сейчас видим - мы так близко: Это работает и показывает каждый VeriSign ..

for /f "delims=" %%g in ('certutil.exe -v -store Root^|findstr "OU=VeriSign"') do echo %%g

Здесь показан серийный номер каждого сертификата.

for /f "delims=" %%g in ('certutil.exe -v -store Root^|findstr "Serial.Number"') do echo %%g

Нам нужно что-то вроде:

for /f "delims=" %%g in ('certutil.exe -v -store Root^|findstr "OU=VeriSign Serial.Number"') do echo %%g

В псевдокоде: Для каждого сертификата VeriSign получите серийный номер, чтобы мы могли оценить уровень ша.

Спасибо за сообщение в (Примечание - Шестой ответ): Сколько сертификатов? https://social.technet.microsoft.com/Forums/en-US/3314021d-ad2a-4748-a93a-69e213845195/certutil-command-line-to-delete-local-personal-certificates?forum=w7itprosecurity

Это работает, но вы хотите урезать его, чтобы показывать только сертификаты VeriSign:

for /f "tokens=1,2 delims=:" %%g in ('certutil.exe -v -store Root^|findstr "Serial.Number"') do (certutil -v -store Root "%%h" | findstr "Serial.Number Algorithm.ObjectId Cert.Hash( X509.Certificate: NotBefore NotAfter OU= CN=")

Глядя на финальный скрипт, однако вывод немного странный:

for %a in (CA Root AuthRoot) do (
for /f "tokens=1,2 delims=:" %g in ('certutil.exe -v -store %a^|findstr "Serial.Number"') do (
certutil.exe -v -store %a "%h" | echo %a & findstr "Serial.Number Algorithm.ObjectId Cert.Hash( X509.Certificate: NotBefore NotAfter OU= CN=")
)

1 Ответ

0 голосов
/ 21 ноября 2018

Следующий скрипт 53092715.bat возвращает требуемые серийные номера, см. Переменную _NextCert в команде echo %_Issuer%: %_user% -store "%~1" !_NextCert!.

Использование: 53092715.bat option [Issuer], где

  • option (необязательно, по умолчанию ""; обязательно, если присутствует параметр Issuer; затем используйте, например, "");
  • Issuer (необязательно, по умолчанию "Verisign"); не может содержать = (знак равенства) ; не может содержать пробел (эти ограничения могут быть устранены с некоторыми усилиями).

Примеры использования:

  • 53092715.bat для запроса HKEY_LOCAL_MACHINE ключей или хранилища сертификатов
  • 53092715.bat -gp для запроса хранилища сертификатов групповой политики
  • 53092715.bat -user для запроса HKEY_CURRENT_USER ключей или хранилища сертификатов
  • 53092715.bat "" Apple
  • 53092715.bat -user Thawte

Сценарий:

@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
if "%~2"=="" (set "_Issuer=VeriSign") else set "_Issuer=%~2"
if /I "%~1"=="" (set "_user=") else set "_user=%~1"
call :findCertSN "Root"
call :findCertSN "AuthRoot"
call :findCertSN "CA"
rem call :findCertSN "My"
ENDLOCAL
goto :eof

:findCertSN
set "_NextCert="
for /F "delims=" %%G in ('
    certutil %_user% -store "%~1"^|findstr "^Serial.Number: ^Issuer:"') do (
    set "_Line=%%G"
    if "!_Line:~0,14!"=="Serial Number:" (
      set "_NextCert=!_Line:~15!"
    ) else (
      if "!_Line:~0,7!"=="Issuer:" (
        set "_Line=!_Line:~8!"
        set "_NextIssuer="
        for %%g in (!_line!) do ( 
          set "_Elin=%%g"
          set "_Part=!_Elin:%_Issuer%=!"
          if not "!_Part!"=="!_Elin!" set "_NextIssuer=Match"
        )
        if defined _NextCert if defined _NextIssuer (
            echo %_Issuer%: %_user% -store "%~1" !_NextCert!
            set "_NextCert="
        )
      )
    )
  ) 
goto :eof
...