14

我需要授予 IIS 用户对 pfx 证书的访问权限。该网站在某个用户 AppPoolUser 下的 App Pool 下运行。IIS 自动具有用户名“IIS APPPOOL\AppPoolUser”,这是我们在使用 aspnet_regiis -ga 时需要授予访问权限的内容。

但是,当我使用 winhttpcertcfg 授予用户“IIS APPPOOL\AppPoolUser”访问权限时,它显示“未找到帐户信息”。

我使用的命令是

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

在网上没有找到任何样品。有任何想法吗?

4

7 回答 7

12

我知道这是一个老问题,但我昨天也遇到了同样的问题,所以我想回答一下。

我遇到了同样的问题,但证书位于 LocalMachine -> TrustedPeople 商店中......

您必须使用,icacls而不是WinHttpCertCfg,取自此链接

基本上,它应该如下所示:

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

为了完成,这里我需要如何访问“受信任的人”商店。部分取自此链接

  1. 使用 Microsoft 的FindPrivateKey 工具在商店中找到证书的实际文件。此工具必须从用于 .NET Framework 4下载.\WF_WCF_Samples\WCF\Setup\FindPrivateKey\CSWindows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例中的源代码编译。

    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
    

瞧!

于 2012-01-04T14:59:35.710 回答
8

对于原始帖子,您只需将域“IIS APPPool”替换为您机器的本地域名 - 通常与机器名称相同。当 WinHttpCertCfg 运行时,它会将 <MachineName>\<AppPoolUser> 转换为 <IIS APPPOOL>\<AppPoolUser>" 并授予对证书的访问权限。如果您想在具有本地 IIS 的开发桌面上工作,这应该可以解决您的问题。 ICACLS 仅适用于服务器(您最终将部署到该服务器)。

于 2012-07-20T14:34:06.047 回答
6

更新/tl;博士——我已经创建了CertAdmin模块,以便轻松获取和设置证书权限。

我遇到了同样的问题:

设置证书的权限涉及授予应用程序池对证书文件的读取权限。

这可以使用 icacls.exe 来实现(Windows 资源管理器安全 UI 不支持应用程序池):

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 (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"
于 2014-02-11T21:53:51.467 回答
6

您也可以从“mmc证书”管理单元执行此操作。

只需右键单击有问题的证书,选择All Tasks -> Manage private keys...,然后添加您想要的用户(可能IIS APPPOOL\[your app pool])。

于 2013-12-12T14:54:10.253 回答
3

安装应用程序时还会添加文档:

C:\Program 文件 (x86)\Windows 资源工具包\工具

以下示例显示了可以使用配置工具的一些方法。

此命令列出有权访问注册表 LOCAL_MACHINE 分支的“根”证书存储中的“MyCertificate”证书的私钥的帐户。

winhttpcertcfg -l -c LOCAL_MACHINE\Root -s MyCertificate

此命令授予对 TESTUSER 帐户“我的”证书存储中“MyCertificate”证书的私钥的访问权限。

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
于 2011-09-16T15:30:46.753 回答
2

如果您仍想继续使用 wihHttpCertCfg,请使用以下命令:

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

我有同样的问题,我今天通过上面的命令解决了。

于 2014-04-25T15:32:34.113 回答
0

对我有用的是我的登台站点在网络服务(应用程序池)(部署)中,而在我的本地是“applicationpoolidentity”(工作副本)

只需将其更改为 applicationpoolidentity 并运行您的 winhttpcertcfg 命令

于 2014-11-25T08:45:13.997 回答