winhttpcertcfg, предоставляющий доступ пользователю IIS в Windows 7

Мне нужно предоставить доступ пользователю IIS к сертификату pfx. Веб-сайт работает под пулом приложений под некоторым пользователем AppPoolUser. IIS автоматически имеет имя пользователя "IIS APPPOOL\AppPoolUser", и это то, что нам нужно предоставить, когда мы используем aspnet_regiis -ga.

Однако, когда я использую winhttpcertcfg, чтобы предоставить доступ к пользователю "IIS APPPOOL\AppPoolUser", он говорит "Нет информации об учетной записи".

Используемая мной команда

winhttpcertcfg -i <filename> -c <certificateLocation> - g -a <account name>

Не удалось найти образцы для этого в Интернете. Любые идеи?

Ответы

Ответ 1

Я знаю, что это старый вопрос, но вчера у меня была такая же проблема, поэтому, хотя я бы ответил.

У меня была такая же проблема, но с сертификатом, расположенным в хранилище LocalMachine → TrustedPeople...

Вы должны использовать icacls вместо WinHttpCertCfg, взятый из этой ссылки.

В принципе, он должен выглядеть следующим образом:

ICACLS <filename> /grant "IIS AppPool\DefaultAppPool":R

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

  • Используйте инструмент FindPrivateKey от Microsoft, чтобы найти фактический файл для сертификата в магазине. Этот инструмент должен быть скомпилирован из исходного кода в .\WF_WCF_Samples\WCF\Setup\FindPrivateKey\CS из Windows Communication Foundation (WCF) и файлов Windows Workflow Foundation (WF) для .NET Framework 4.

    FindPrivateKey.exe TrustedPeople LocalMachine -t "<thumbprint of the SSL cert>"
    
  • Используйте icacls в файле, заданном FindPrivateKey.

    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\<path to certificate> /grant "IIS AppPool\<your AppPool name>":R
    

Вуаля!

Ответ 2

В исходное сообщение вам просто нужно заменить домен "IIS APPPool" на локальное доменное имя вашего компьютера - обычно то же имя, что и машина. Когда WinHttpCertCfg запускается, он превратится <MachineName> \<AppPoolUser> в < IIS APPPOOL > \<AppPoolUser> "и предоставить доступ к сертификату.Если вы хотите работать на рабочем столе разработчика с локальным IIS, это должно решить вашу проблему. ICACLS работает только на серверах (которые вы, в конечном счете, будете развертывать к).

Ответ 3

Вы также можете сделать это из оснастки mmc Certificates.

Просто щелкните правой кнопкой мыши соответствующий сертификат, выберите All Tasks -> Manage private keys... и добавьте желаемого пользователя (скорее всего, IIS APPPOOL\[your app pool]).

Ответ 4

У меня была такая же проблема:

  • WinHttpCertCfg похоже, был оставлен без разумной альтернативы.
  • Мой диспетчер сертификатов не включил опцию "Управление приватными ключами", как указано в этом старом сообщении в блоге MSDN.
  • Компиляция FindPrivateKey - необоснованные накладные расходы в среде Windows.

Установка разрешения для сертификата подразумевает предоставление пулу приложений права на чтение файла сертификата.

Это может быть достигнуто с помощью icacls.exe(пользовательский интерфейс безопасности проводника Windows не поддерживает пулы приложений):

icacls C:\ProgramData\Microsoft\crypto\rsa\machinekeys\9876abcdeblahblahblah /grant "IIS AppPool\AppPoolName:R" 

Windows хранит ключи машины в C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys, но имена файлов не связаны с сертификатом. Имя файла для каждого сертификата можно получить с помощью этого кода PowerShell:

 ls Cert:\LocalMachine\TrustedPeople |
    select Subject,@{n='FileName';e={$_.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName}} |
    Format-List

(Изменить "TrustedPeople", если ваш сертификат находится в другом магазине.)

Имя пула приложений можно получить из пулов приложений node диспетчера IIS или с помощью этого кода PowerShell:

Import-Module WebAdministration; ls IIS:\AppPools

Этот PowerShell 3 script будет использовать Out-GridView (ogv) в качестве списка выбора GUI для сертификата и пула приложений, а затем предоставить разрешение:

ipmo WebAdministration
$cert = (ls Cert:\LocalMachine\TrustedPeople |
    ogv -OutputMode Single -Title "Select Certificate").
    PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
$app = (ls IIS:\AppPools |
    ogv -OutputMode Single -Title "Select App Pool").Name
icacls $env:ProgramData\Microsoft\crypto\rsa\machinekeys\$cert /grant "IIS AppPool\$($app):R"

Ответ 5

При установке приложения также добавляется документация:

C:\Program Files (x86)\Windows Resource Kits\Tools

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

Эта команда перечисляет учетные записи, которые имеют доступ к закрытому ключу для сертификата "MyCertificate" в хранилище сертификатов "Root" в реестре LOCAL_MACHINE реестра.

winhttpcertcfg -l -c LOCAL_MACHINE\Root -s MyCertificate

Эта команда предоставляет доступ к закрытому ключу сертификата "MyCertificate" в хранилище сертификатов "Мой" для учетной записи TESTUSER.

winhttpcertcfg -g -c LOCAL_MACHINE\My -s MyCertificate -a TESTUSER

Эта команда импортирует сертификат и закрытый ключ из файла PFX и расширяет доступ к закрытому ключу другой учетной записи.

winhttpcertcfg -i PFXFile -c LOCAL_MACHINE\My -a IWAM_TESTMACHINE

Эта команда удаляет доступ к закрытому ключу для учетной записи IWAM_TESTMACHINE с указанным сертификатом.

winhttpcertcfg -r -c LOCAL_MACHINE\Root -s MyCertificate -a IWAM_TESTMACHINE

Ответ 6

Если вы все еще хотите продолжить использование wihHttpCertCfg, используйте следующую команду:

winhttpcertcfg.exe -i <filename> -c <certificateLocation> -a "ComputerName\IIS APPPOOL\AppPoolName"

У меня была такая же проблема, и сегодня я решил ее выполнить над командой.

Ответ 7

Что работает от меня, мой веб-сайт находится в сетевом сервисе (пул приложений) (развертывание), а в моем локальном "applicationpoolidentity" (рабочая копия)

просто измените его на идентификатор приложения и запустите команду winhttpcertcfg