2009-11-05 176 views
13

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

但是,当我使用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 Regards, Vivek – Vivek 2009-11-05 13:21:50

+0

我已经试过这个示例。我的证书现在可以访问许多用户。池用户,域管理员,每个人... 看起来像appdomain正在“LocalSystem”下运行,我不''看到的方式来访问该用户,因为该文档说,这是用户与管理员访问已经。 – bkhanal 2009-11-05 18:37:00

回答

3

当您安装该应用程序还增加了文件:

C:\ Program Files文件(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 
+4

-1:从文档中复制并粘贴,特别是当文档不起作用时。 – 2011-12-19 17:27:06

11

我知道这是一个老问题,但昨天我只是有同样的问题,所以我虽然我会回答。

我有同样的问题,但与位于LOCALMACHINE证书 -

> TrustedPeople店......你必须使用icacls而不是WinHttpCertCfg,从this link拍摄。

基本上,它应该是这样的:

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

完成的缘故,我在这里需要怎么做才能访问“受信任人”存储。部分取自this link

  1. 使用Microsoft的FindPrivateKey tool来查找商店中证书的实际文件。该工具必须从Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4下载的.\WF_WCF_Samples\WCF\Setup\FindPrivateKey\CS源代码中进行编译。

    FindPrivateKey.exe TrustedPeople LocalMachine -t "<thumbprint of the SSL cert>" 
    
  2. 由FindPrivateKey给定的文件使用icacls

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

瞧!

+0

你救了我的理智。这是值得的一个upvote。 – 2015-12-15 15:57:53

+0

使用ICACLS将pfx文件授予应用程序池后,我应该在web.config的clientCredentials中放入什么内容? – 2017-11-09 14:45:50

6

对于原来的文章,您只需将域名“IIS APPPool”替换为您机器的本地域名 - 通常与本机名称相同。当WinHttpCertCfg运行时,它会变成<计算机名> \ <AppPoolUser>到< IIS APPPOOL > \ <AppPoolUser>“,并授予访问certficate。如果你想与本地IIS的一个开发桌面上工作,这应该解决您的问题。 ICACLS仅适用于服务器(你最终将被部署到)。

+0

+1确实,这对我有用:'winhttpcertcfg.exe -g -c LOCAL_MACHINE \ My-s MyCertName -a“MYMACHINENAME \ App Pool名称”' – 2012-11-13 15:13:59

+0

如果您想要脚本,localhost也可以代替特定的计算机名称这很容易在多台服务器上运行 – explunit 2017-06-09 14:00:07

+0

FWIW,我需要包括机器名和IIS AppPool,例如:'winhttpcertcfg.exe -g -c LOCAL_MACHINE \ My -s MyCertName -a“MYMACHINENAME \ IIS AppPool \ AppPoolUser”' – 2017-12-27 17:53:58

6

您也可以从mmc证书管理单元中做到这一点。

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

+0

这很好用 – NibblyPig 2014-03-05 12:43:11

+0

这在Windows 7中不会出现。希望它可以。 – 2014-08-26 11:14:27

+0

IIRC我在Win7下完成了所有这些工作。现在在OSX上工作,没有Win7 VM方便的ATM或我再看一次。可能你没有保存私钥? – 2014-08-26 11:52:42

5

我有同样的问题:

  • WinHttpCertCfg似乎没有一个合理的替代已被放弃。
  • 我的证书管理器没有包含this old MSDN blog post中提到的“管理私钥”选项。
  • 在Windows环境下编译FindPrivateKey是不合理的开销。

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

这可以通过使用icacls.exe(Windows资源管理器的安全性的用户界面不支持应用程序池)来实现:

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

的Windows商店机键在C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys,但文件的名称不相关证书。如果您的证书是在另一家商店

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

(更改“TrustedPeople”:可以使用此PowerShell代码来获得每个证书的文件名。)

应用程序池的名称可以从IIS管理器的应用程序池节点,或通过运行此PowerShell代码来获得:

Import-Module WebAdministration; ls IIS:\AppPools 

这PowerShell的3脚本将使用出的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" 
+0

这是很好的答案,因为您不必使用FindPrivateKey - 只需简单的PowerShell。 BTW。这是一个耻辱,这种基本的,简单的操作,如添加权限在Windows中如此复杂。 – 2016-05-09 15:36:54

1

如果仍想继续使用wihHttpCertCfg,然后使用下面的命令:

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

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

0

从我什么工作是我的临时网站是在网络服务(应用程序池)(部署),并在我的地方是“applicationpoolidentity”(工作拷贝)

只是将其更改为applicationpoolidentity和运行winhttpcertcfg命令

相关问题