Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net winhttpcertcfg授予Windows 7中的IIS用户访问权限_.net_Asp.net_Iis 7_X509certificate_Pfx - Fatal编程技术网

.net winhttpcertcfg授予Windows 7中的IIS用户访问权限

.net winhttpcertcfg授予Windows 7中的IIS用户访问权限,.net,asp.net,iis-7,x509certificate,pfx,.net,Asp.net,Iis 7,X509certificate,Pfx,我需要授予IIS用户访问pfx证书的权限。该网站正在某个用户AppPoolUser下的应用程序池下运行。IIS自动具有用户名“IIS APPPOOL\AppPoolUser”,这是我们在使用aspnet_regiis-ga时需要授予访问权限的内容 但是,当我使用winhttpcertcfg授予用户“IIS APPPOOL\AppPoolUser”访问权限时,它表示“未找到任何帐户信息” 我使用的命令是 winhttpcertcfg -i <filename> -c <certi

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

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

我使用的命令是

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

在网上找不到这方面的任何样本。有什么想法吗?

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

C:\Program Files(x86)\Windows资源工具包\Tools

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

此命令列出了可以访问注册表本地\u机器分支的“根”证书存储中“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

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

我也有同样的问题,但证书位于LocalMachine->TrustedPeople存储中

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

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

ICACLS <filename> /grant "IIS AppPool\DefaultAppPool":R
  • 对FindPrivateKey给定的文件使用
    icacls

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

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

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


    只需右键单击有问题的证书,选择
    所有任务->管理私钥…
    ,然后添加所需的用户(很可能是
    IIS APPPOOL\[您的应用程序池]
    )。

    更新/tl;dr-我为PowerShell Core创建了一个模块,用于轻松获取和设置证书权限

    我也有同样的问题:

    • WinHttpCertCfg
      似乎在没有合理替代方案的情况下被放弃了
    • 我的证书管理器未包括中提到的“管理私钥”选项
    • 在Windows环境中编译
      FindPrivateKey
      是不合理的开销
    设置证书的权限涉及授予应用程序池对证书文件的读取权限

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

    Windows将计算机密钥存储在
    C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
    中,但文件名与证书无关。可以使用以下PowerShell代码获取每个证书的文件名:

     ls Cert:\LocalMachine\TrustedPeople |
        select Subject,@{n='FileName';e={$_.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName}} |
        Format-List
    
    Import-Module WebAdministration; ls IIS:\AppPools
    
    (如果您的证书位于其他商店,请更改“TrustedPeople”。)

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

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

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

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

    我也遇到了同样的问题,今天我通过上面的命令解决了这个问题。

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


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

    -1:从文档中复制和粘贴,尤其是当文档不起作用时。请检查这一点,VivekI已经尝试了该示例。我的证书现在可以访问许多用户。池用户、域管理员、所有人…看起来appdomain正在运行ng在“LocalSystem”下,我不知道如何授予该用户访问权限,正如文档所述,这是已经具有管理员权限的用户。+1事实上,这对我很有用:
    winhttpcertcfg.exe-g-c LOCAL\u MACHINE\My-s MyCertName-a“MYMACHINENAME\App Pool的名称”“
    localhost也可以代替特定的机器名工作如果您想要一个更易于在多台服务器上运行的脚本,那么我需要同时包含机器名和IIS AppPool,例如:
    winhttpcertcfg.exe-g-c LOCAL\u machine\My-s MyCertName-a“MYMACHINENAME\IIS AppPool\AppPoolUser”
    这在Windows 7中对我来说是不会出现的。但愿如此。我在Win7下完成了所有这些工作。这些天在OSX上工作,没有Win7虚拟机手持ATM,否则我会再找一次。您可能没有保存私钥吗?太好了,我只需要将位置更改为本地服务器,而不是网络域。我无法在我的工作虚拟机上以这种方式实际管理私钥。对于其他有同样困难的人来说,当用于添加用户的用户体验拒绝在Windows 8.1中帮助我时,icacls命令行确实起了作用。这在Windows Server 2008中对我起到了作用,但只是有点混乱。我的证书需要存在于受信任的人中,但是当密钥位于此位置时,此菜单选项不存在。最困难的是将密钥移动到个人,选择所有任务->管理私钥