winhttpcertcfg在Windows 7中授予对iiS用户的访问权限
我需要为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>
没有找到在网上这方面的任何样本。有任何想法吗?
当您安装该应用程序还增加了文件:
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
-1:从文档中复制并粘贴,特别是当文档不起作用时。 – 2011-12-19 17:27:06
我知道这是一个老问题,但昨天我只是有同样的问题,所以我虽然我会回答。
我有同样的问题,但与位于LOCALMACHINE证书 -
> TrustedPeople店......你必须使用icacls
而不是WinHttpCertCfg
,从this link拍摄。
基本上,它应该是这样的:
ICACLS <filename> /grant "IIS AppPool\DefaultAppPool":R
完成的缘故,我在这里需要怎么做才能访问“受信任人”存储。部分取自this link。
-
使用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>"
-
由FindPrivateKey给定的文件使用
icacls
。icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\<path to certificate> /grant "IIS AppPool\<your AppPool name>":R
瞧!
你救了我的理智。这是值得的一个upvote。 – 2015-12-15 15:57:53
使用ICACLS将pfx文件授予应用程序池后,我应该在web.config的clientCredentials中放入什么内容? – 2017-11-09 14:45:50
对于原来的文章,您只需将域名“IIS APPPool”替换为您机器的本地域名 - 通常与本机名称相同。当WinHttpCertCfg运行时,它会变成<计算机名> \ <AppPoolUser>到< IIS APPPOOL > \ <AppPoolUser>“,并授予访问certficate。如果你想与本地IIS的一个开发桌面上工作,这应该解决您的问题。 ICACLS仅适用于服务器(你最终将被部署到)。
+1确实,这对我有用:'winhttpcertcfg.exe -g -c LOCAL_MACHINE \ My-s MyCertName -a“MYMACHINENAME \ App Pool名称”' – 2012-11-13 15:13:59
如果您想要脚本,localhost也可以代替特定的计算机名称这很容易在多台服务器上运行 – explunit 2017-06-09 14:00:07
FWIW,我需要包括机器名和IIS AppPool,例如:'winhttpcertcfg.exe -g -c LOCAL_MACHINE \ My -s MyCertName -a“MYMACHINENAME \ IIS AppPool \ AppPoolUser”' – 2017-12-27 17:53:58
您也可以从mmc
证书管理单元中做到这一点。
只需右键单击该证书有问题,选择All Tasks -> Manage private keys...
,并添加你想要的用户(可能是IIS APPPOOL\[your app pool]
)。
这很好用 – NibblyPig 2014-03-05 12:43:11
这在Windows 7中不会出现。希望它可以。 – 2014-08-26 11:14:27
IIRC我在Win7下完成了所有这些工作。现在在OSX上工作,没有Win7 VM方便的ATM或我再看一次。可能你没有保存私钥? – 2014-08-26 11:52:42
我有同样的问题:
-
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"
这是很好的答案,因为您不必使用FindPrivateKey - 只需简单的PowerShell。 BTW。这是一个耻辱,这种基本的,简单的操作,如添加权限在Windows中如此复杂。 – 2016-05-09 15:36:54
如果仍想继续使用wihHttpCertCfg,然后使用下面的命令:
winhttpcertcfg.exe -i <filename> -c <certificateLocation> -a "ComputerName\IIS APPPOOL\AppPoolName"
我有同样的问题,我今天通过上述命令解决了它。
从我什么工作是我的临时网站是在网络服务(应用程序池)(部署),并在我的地方是“applicationpoolidentity”(工作拷贝)
只是将其更改为applicationpoolidentity和运行winhttpcertcfg命令
请查看http://weblogs.asp.net/hernandl/archive/2005/02/09/WinHttpCertCfgTool.aspx Regards, Vivek – Vivek 2009-11-05 13:21:50
我已经试过这个示例。我的证书现在可以访问许多用户。池用户,域管理员,每个人... 看起来像appdomain正在“LocalSystem”下运行,我不''看到的方式来访问该用户,因为该文档说,这是用户与管理员访问已经。 – bkhanal 2009-11-05 18:37:00