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
Ради завершения, вот как мне нужно было сделать это для доступа к хранилищу "Надежные люди". Взято от этой ссылки.
Вуаля!
Ответ 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