Поделиться через


Пример FindPrivateKey

Определение расположения и имени файла закрытого ключа, связанного с заданным сертификатом X.509, в хранилище сертификатов может представлять собой достаточно сложную задачу. Средство FindPrivateKey.exe упрощает этот процесс.

Внимание

Перед его использованием необходимо создать пример FindPrivateKey.

Сертификаты X.509 устанавливаются администратором или любым пользователем компьютера. Однако сертификат может получить доступ к службе, работающей под другой учетной записью. Например, учетная запись NETWORK SERVICE.

У такой учетной записи может не быть доступа к файлу закрытого ключа, поскольку изначально сертификат был установлен другой учетной записью. Средство FindPrivateKey позволяет определить расположение файла закрытого ключа заданного сертификата X.509. Если расположение файла закрытого ключа заданного сертификата X.509 известно, можно добавлять или удалять разрешения на доступ к этому файлу.

Примеры, использующие сертификаты для безопасности, используют средство FindPrivateKey в файле Setup.bat . После обнаружения файла закрытого ключа можно использовать другие средства, такие как Cacls.exe , чтобы задать соответствующие права доступа к файлу.

При запуске службы Windows Communication Foundation (WCF) под учетной записью пользователя, например локального исполняемого файла, убедитесь, что у учетной записи пользователя есть доступ только для чтения к файлу. При запуске службы WCF в службы IIS (IIS) учетные записи по умолчанию, выполняемые службой, относятся к сетевой службе IIS 7 и более ранним версиям или удостоверению пула приложений в IIS 7.5 и более поздних версиях. Дополнительные сведения см. в разделе "Удостоверения пула приложений".

Права чтения

При доступе к сертификату, для которого процесс не имеет прав на чтение, отображается сообщение об исключении, аналогичное следующему примеру:

System.ArgumentException was unhandled
Message="The certificate 'CN=localhost' must have a private key that is capable of key exchange. The process must have access rights for the private key."
Source="System.ServiceModel"

При этом используйте средство FindPrivateKey для поиска файла закрытого ключа, а затем задайте право доступа для процесса, в котором выполняется служба. Например, это можно сделать с помощью средства Cacls.exe, как показано в следующем примере:

cacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\8aeda5eb81555f14f8f9960745b5a40d_38f7de48-5ee9-452d-8a5a-92789d7110b1" /E /G "NETWORK SERVICE":R

Соглашения — записи командной строки

"[option]" представляет необязательный набор параметров.

"{option}" представляет обязательный набор параметров.

Option1 | option2 представляет выбор между наборами параметров.

Значение< "value>" представляет введенное значение параметра.

Использование

FindPrivateKey <storeName> <storeLocation> [{ {-n <subjectName>} | {-t <thumbprint>} } [-f | -d | -a]]

Где:

Параметр Описание
<subjectName> Имя субъекта сертификата
<thumbprint> Отпечаток сертификата (вы можете использовать средство Certmgr.exe для поиска этого)
-f только имя выходного файла
-d Только выходной каталог
-a выходное абсолютное имя файла

Если параметры не указаны в командной строке, отображается текст справки с этой информацией.

Примеры

Этот пример находит имя файла сертификата с именем субъекта CN=localhost в личном хранилище текущего пользователя.

FindPrivateKey My CurrentUser -n "CN=localhost"

Этот пример находит имя файла сертификата с именем субъекта CN=localhost в личном хранилище текущего пользователя и выводит полный путь к каталогу.

FindPrivateKey My CurrentUser -n "CN=localhost" -a

Этот пример находит имя файла сертификата с отпечатком "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52" в хранилище "Личное" на локальном компьютере.

FindPrivateKey My LocalMachine -t "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52"