Проверка цепочки сертификатов с помощью powershell
Я пытаюсь написать сценарий, который проверяет цепочку сертификатов в PowerShell (что все сертификаты в цепочке не истекли) и находит сертификат, который ближе всего к истечению срока действия. Я использую следующий скрипт для поиска сертификата эмитента:
Get-ChildItem-Recurse-Path Cert: / Where-Object { $_.Тема -экв $сертификат.Эмитент }
по некоторым причинам для некоторых сертификатов я получаю более одного сертификата с разными отпечатками пальцев, которые имеют одинаковый имя эмитента, и я ожидал, что это будет только один.
существует ли какое-либо другое свойство сертификата, которое однозначно идентифицирует сертификат эмитента? Может быть, есть какой-то другой подход для проверки цепочки сертификатов?
2 ответов
проверить тест-сертификат: http://poshcode.org/1633
тестирует указанный сертификат для цепочки сертификатов и отзыва
есть командлет Test-Certificate, включенный в 4.0
http://technet.microsoft.com/en-us/library/hh848639.aspx
Я запустил это на своем localhost, просто тестируя его,
Get-childitem cert: -recurse | %{ write-host $_ ; Test-Certificate -cert $_ }
это дает хорошую ошибку, когда сертификат в цепочке истeкший.
предупреждение: состояние цепи : Cert_trust_is_not_time_valid Test-Certificate: требуемый сертификат не находится в пределах срока его действия при проверке системным часам или по штампу времени в подписанном файле.
Мне нужно было инвентаризировать все сертификаты с закрытыми ключами для дат истечения срока действия. Приведенный ниже пример кода тестируется в Powershell 3.0 Структура Try/Catch позволяет подавлять неприятный красный текст ошибки из сертификатов, которые не имеют закрытых ключей.
Set-Strictmode -Version Latest
$arrCerts = Get-Childitem CERT:\ -Recurse
foreach ($objItem in $arrCerts) {
Try { $blnFound = ($objItem.HasPrivateKey -eq $True) }
Catch { $blnFound = $False }
if ($blnFound) {
$arrSplit = $objItem.PSParentPath -split "::"
write-host 'Path '$arrSplit[1]
write-host 'Subject '$objItem.SubjectName.Name
write-host 'Expires '$objItem.NotAfter
write-host 'Private Key '$objItem.HasPrivateKey
write-host
}
}