2013-12-03 2 views
3

Учитывая отпечаток сертификата, я хочу найти абсолютный путь к сертификату в локальной файловой системе.Получить сертификат Абсолютный путь с использованием UniqueKeyContainerName

Этот фрагмент почти всегда работает.

$thumb = <mythumbprint string> 

$cert  = Get-ChildItem "Cert:\LocalMachine\My" | Where-Object {$_.Thumbprint -eq $thumb}; 
$keyName = (($cert.PrivateKey).CspKeyContainerInfo).UniqueKeyContainerName 
$keyPath = $env:ProgramData + "\Microsoft\Crypto\RSA\MachineKeys\" 
$fullPath = $keyPath+$keyName 

Это не соответствует сертификатам, в которых PrivateKey не является экспортируемым. При маркировке как NOT Exportable, $cert.PrivateKey больше не доступен и, следовательно, не может построить полный путь сертификата.

Есть ли альтернатива powershell для определения уникального имени сертификатаKeyContainerName сертификата?

ОБНОВЛЕНИЕ: Все сертификаты, которые меня интересуют, имеют личные ключи. Проблема в том, что я не могу предположить, что они отмечены как экспортируемые. Если NOT отмечено экспортируемым, на .PrivateKey нельзя ссылаться. Мне нужен другой способ получить UniqueKeyContainerName без сцепления через .Privatekey

+0

Ever это цифра? Я пытаюсь выполнить сценарий разрешений для развертывания, и мои ключи не экспортируются, и я не могу найти способ сделать это. –

ответ

-1

Если я следую за вами, вы можете фильтровать сертификаты, которые имеют HasPrivateKey:

Get-ChildItem Cert:\LocalMachine\my | 
Where-Object {$_.Thumbprint -eq $thumb -and $_.HasPrivateKey} | ForEach-Object { 
    Join-Path $env:ProgramData\Microsoft\Crypto\RSA\MachineKeys $_.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName 
} 
+1

Я боюсь, что это не поможет. HasPrivateKey будет оценивать значение $ true. Проблема в том, что если сертификат НЕ был отмечен как экспортируемый, когда он был сгенерирован, то .PrivateKey терпит неудачу. – bartonm

Смежные вопросы