Как правильно давать ASP.NET доступ к закрытому ключу в сертификате в хранилище сертификатов?
у меня есть ASP.NET приложение, которое обращается к закрытому ключу в сертификате в хранилище сертификатов. На Windows Server 2003 я смог использовать winhttpcertcfg.exe для предоставления закрытого ключа доступа к учетной записи сетевой службы. Как предоставить разрешения на доступ к закрытому ключу в сертификате в хранилище сертификатов (локальный компьютерPersonal) на Windows Server 2008 R2 на веб-сайте IIS 7.5?
Я пытался дать полный доступ доверия к "всем", " IIS AppPoolDefaultAppPool", "IIS_IUSRS" и каждая другая учетная запись безопасности, которую я мог найти, используя сертификаты MMC (Server 2008 R2). Однако приведенный ниже код демонстрирует, что код не имеет доступа к закрытому ключу сертификата, который был импортирован с закрытым ключом. Вместо этого код выдает и выдает ошибку каждый раз, когда осуществляется доступ к свойству закрытого ключа.
по умолчанию.aspx
по умолчанию.aspx.cs
5 ответов:
- создать / купить сертификат. Убедитесь, что у него есть закрытый ключ.
- импортируйте сертификат в учетную запись" локальный компьютер". Лучше всего использовать сертификаты MMC. обязательно установите флажок "Разрешить экспорт закрытого ключа"
на основе которого удостоверение пула приложений IIS 7.5 использует одно из следующих действий.
- веб-сайт IIS 7.5 работает под ApplicationPoolIdentity. Откройте консоль MMC => добавить оснастку сертификаты (локальный компьютер) оснастка = > сертификаты (локальный компьютер) = > личные = > сертификаты = > щелкните правой кнопкой мыши сертификат интереса = > все задачи = > Управление закрытым ключом = > добавить
IIS AppPool\AppPoolNameи предоставить емуFull control. Заменить "Имя_группы_приложений " С именем вашего пула приложений (иногдаIIS_IUSRS)- веб-сайт IIS 7.5 работает под управлением сетевой службы. Используя сертификаты MMC, добавлена "сетевая служба "для полного доверия к сертификату в"локальный компьютер\Personal".
- веб-сайт IIS 7.5 работает под учетной записью пользователя локального компьютера "MyIISUser". Используя сертификаты MMC, добавлен " MyIISUser "(новая учетная запись пользователя локального компьютера) для полного доверия к сертификату в"Local Computer\Personal".
обновление на основе комментария @Phil Hale:
будьте осторожны, если вы находитесь в домене, ваш домен будет выбран по умолчанию в поле "от местоположения". Обязательно измените это на "локальный компьютер". Измените расположение на "локальный компьютер" для просмотра приложения удостоверения пула.
примечание о предоставлении разрешений через MMC, сертификаты, выберите сертификат, щелкните правой кнопкой мыши, все задачи, "Управление закрытыми ключами"
управление закрытыми ключами находится только в списке меню для личных... Поэтому, если вы положили свой сертификат в доверенных людей и т. д. тебе не повезло.
мы нашли способ обойти это, который работал для нас. Перетащите сертификат в Personal, выполните управление закрытыми ключами, чтобы предоставить разрешения. Не забудьте установить для использования встроенных объектов типа объекта и не использовать локальную машину домен. Мы предоставили права пользователю DefaultAppPool и оставили его на этом.
Как только вы закончите, перетащите сертификат туда, где он изначально был. Престо.
Я понял, как это сделать в Powershell, что кто-то спросил о:
$keyname=(((gci cert:\LocalMachine\my | ? {$_.thumbprint -like $thumbprint}).PrivateKey).CspKeyContainerInfo).UniqueKeyContainerName $keypath = $env:ProgramData + “\Microsoft\Crypto\RSA\MachineKeys\” $fullpath=$keypath+$keyname $Acl = Get-Acl $fullpath $Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS AppPool$iisAppPoolName", "Read", "Allow") $Acl.SetAccessRule($Ar) Set-Acl $fullpath $Acl
для меня это было не более чем повторный импорт сертификата с проверкой "разрешить экспорт закрытого ключа".
Я думаю, что это необходимо, но это заставляет меня нервничать, так как это стороннее приложение доступ к этому сертификату.

Comments