2009-11-05 174 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命令

相關問題