2009-11-05 19 views
13

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

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

Команда, которую я использую

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

не нашли каких-либо образцов для этого по полотну. Есть идеи?

+0

проверить это http://weblogs.asp.net/hernandl/archive/2005/02/09/WinHttpCertCfgTool.aspx С уважением, Vivek – Vivek

+0

Я уже пробовал этот образец. Теперь у моего сертификата есть доступ ко многим пользователям. Пользователь пула, администратор домена, каждый ... Похоже, что appdomain работает под «LocalSystem», и я не вижу способа предоставить доступ к этому пользователю, как говорит documentatin, это уже пользователь с доступом администратора. – bkhanal

ответ

3

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

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 
+4

-1: копирование и вставка из документации, особенно если документация не работает. –

11

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

У меня была такая же проблема, но с сертификатом, расположенной в LocalMachine -> TrustedPeople магазин ...

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

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

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

Ради завершения, вот как мне нужно, чтобы это сделать, чтобы получить доступ к «Доверенные люди» магазин. Взято от this link.

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

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

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

Вуаля!

+0

Ты спас мне здравый смысл. Это стоит ровно один взнос. –

+0

После использования ICACLS для предоставления файла pfx в пуле приложений, что мне следует поместить в clientCredentials моего web.config? –

6

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

+0

+1 Действительно, это сработало для меня: 'winhttpcertcfg.exe -g -c LOCAL_MACHINE \ My -s MyCertName -a" MYMACHINENAME \ Name Of App Pool "' –

+0

localhost также работает вместо определенного имени компьютера, если вы хотите сценарий проще работать на нескольких серверах – explunit

+0

FWIW, мне нужно было указать имя машины и IIS AppPool, например: 'winhttpcertcfg.exe -g -c LOCAL_MACHINE \ My -s MyCertName -a" MYMACHINENAME \ IIS AppPool \ AppPoolUser "' –

6

вы также можете сделать это с mmc оснастку сертификаты.

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

+0

Это отлично работает – NibblyPig

+0

Это не для меня в Windows 7. Пожелайте. –

+0

IIRC Я проделал всю эту работу под Win7. Работая на OSX в эти дни и не имея Win7 VM удобный банкомат, или я бы снова посмотрел. Может быть, у вас нет закрытого ключа? –

5

У меня был один и тот же вопрос:

  • WinHttpCertCfg, кажется, были оставлены без разумной альтернативы.
  • Мой диспетчер сертификатов не включил опцию «Управление приватными ключами», как указано в this old MSDN blog post.
  • Компиляция FindPrivateKey является необоснованным накладные расходы в среде Windows.

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

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

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», если ваш сертификат находится в другом магазине.)

Имя пула приложений может быть получен из узла Пулы приложений диспетчера IIS или выполнив эту PowerShell код:

Import-Module WebAdministration; ls IIS:\AppPools 

Этот PowerShell 3 сценарий будет использовать Out-GridView (ОГВ) как список выбора GUI для CERT и пула приложений, а затем предоставить разрешение:

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" 
+0

Это отличный ответ, потому что вам не нужно использовать FindPrivateKey - просто PowerShell. КСТАТИ. его стыдно, что такой фундаментальный, простой способ, как добавление разрешения, настолько сложный в Windows. –

1

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

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

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

0

То, что работает у меня есть моя постановка сайт в сетевой службе (приложение пул) (развертывание) и в моем местном жителе «ApplicationPoolIdentity» (рабочая копия)

просто изменить его ApplicationPoolIdentity и запустить команду winhttpcertcfg

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

  • Нет связанных вопросов^_^