Сертификаты запросов для SHA1 / SHA2 / SHA256

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

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

Полученные результаты:

sha256RSA
sha256RSA

Ссылка .. 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 получите серийный номер, чтобы мы могли оценить уровень sha.

Спасибо за сообщение по адресу (Примечание - шестой ответ): Сколько сертификатов? 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 = ")
)

Требуется ли это CertUtil или вы примете отфильтрованный сценарий PowerShell?

Drew 31.10.2018 23:55

Это должно быть решение определенного типа. PowerShell, к сожалению, «не актуален». Я действительно хотел бы использовать PowerShell, так как это было бы намного проще выполнить задачу.

Leptonator 01.11.2018 15:03

Попробуйте разобрать certutil -v -user -store "MY", certutil -v -store CA и т. д. ИМХО, достаточно разобрать вывод, суженный с помощью …|findstr "Serial.Number Algorithm.ObjectId Cert.Hash( X509.Certificate:"

JosefZ 09.11.2018 18:24

@JosefZ - я ценю вашу помощь. Пожалуйста, посмотрите мою правку к исходному сообщению.

Leptonator 14.11.2018 16:43

Для меня фильтрация вывода certutil -store по имени эмитента - непростая задача. Однако я знаю синтаксический шаблон CertUtil [Options] -store [CertificateStoreName [CertId [OutputFile]]] (известный из CertUtil -store -?. Я бы применил CertID (взятые из (Get-ChildItem Cert:\LocalMachine\Root\ | Where-Object {$_.IssuerName.Name -Match 'VeriSign'}).SerialNumber PowerShell) к certutil -v -store Root CertID.

JosefZ 14.11.2018 20:08

Пример. for /F "usebackq" %F in (`powershell -c "(Get-ChildItem Cert:\LocalMachine\Root\ | Where-Object {$_.IssuerName.Name -Match 'VeriSign'}).SerialNumber"`) do @(certutil -v -store Root %F & certutil -v -store AuthRoot %F) | findstr "Serial.Number Algorithm.ObjectId Cert.Hash( X509.Certificate:"

JosefZ 14.11.2018 21:51

@JosefZ - Вау, вау, вау ... Я могу использовать скрипт на моем локальном компьютере, и он отлично работает! Однако я не могу использовать PowerShell в полевых условиях. Я знаю, что вы потратили на это массу времени, но мне нужно продолжить путь, который вы проложили для меня.

Leptonator 20.11.2018 15:44

Я обновил пост. Мы очень близки.

Leptonator 20.11.2018 23:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
2 279
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Следующий сценарий 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

Идеально! Это прекрасно работает, и я внес несколько изменений, чтобы возвращать данные нашего поставщика для сертификатов.

Leptonator 21.11.2018 15:47

Нужно сделать еще отладку. Запускаем это через CA IT Client Manager, и если сертификат поставщика не существует, кажется, что он будет работать вечно.

Leptonator 21.11.2018 17:58

Видимая проблема может быть связана с машиной, на которой я ее запускал. Не обращая внимания на предыдущий комментарий.

Leptonator 21.11.2018 18:38

Другие вопросы по теме