1

我有一個本地服務在我的Windows 2012服務器上運行。它是一個具有一個節點的天青服務架構羣集,但這對於此問題應該沒有關係。網絡服務用戶無法讀取證書窗口服務器2012

服務下的「網絡服務運行:用戶,並且具有訪問存儲在本地計算機上的證書的代碼,使用X509Certificate2Collection.Find方法找到該證書的代碼

例外情況是:。

拋出異常:「System.AggregateException」在mscorlib.dll

其他信息:無法成功地獲得訪問令牌 使用指紋:80CEA40A62FFA0116FCB40B7B5985ADCD3E5AC39

當我執行相同參數相同的查找功能作爲本地管理員用戶,它的工作原理。

我試圖明確授予網絡服務用戶閱讀證書的權限,但這並沒有解決這個問題。

我也試圖在網絡服務用戶環境在本地執行代碼(而不是部署本地服務,但當地可執行的代碼片段)是得到一個證書,而這個工作,這是奇怪的。

回答

0

我認爲這個問題是網絡服務沒有訪問私有密鑰。我用下面的代碼來設置權限,跟我有機會獲得私鑰

Import-PfxCertificate -CertStoreLocation Cert:\LocalMachine\My -FilePath "path to the pfx file" 
$certs = Get-ChildItem -Path cert:\LocalMachine\My 

Foreach ($cert in $certs) 
{ 
# Specify the user, the permissions and the permission type 
$permission = "Network Service","FullControl","Allow" 
$accessRule = New-Object -TypeName 
System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission 

# Location of the machine related keys 
$keyPath = Join-Path -Path $env:ProgramData -ChildPath "\Microsoft\Crypto\RSA\MachineKeys" 
$keyName = $cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName 
$keyFullPath = Join-Path -Path $keyPath -ChildPath $keyName 

# Get the current acl of the private key 
$acl = (Get-Item $keyFullPath).GetAccessControl('Access') 

# Add the new ace to the acl of the private key 
$acl.SetAccessRule($accessRule) 

# Write back the new acl 
Set-Acl -Path $keyFullPath -AclObject $acl -ErrorAction Stop 

# Observe the access rights currently assigned to this certificate. 
get-acl $keyFullPath| fl 
} 
+0

我已經獲准通過Windows MMC證書管理器(私有密鑰導入證書到我自己的商店後,這就是我的意思通過「授予用戶對證書的讀取權限」),但我會嘗試腳本 –

+0

有關如何查找哪個.pfx文件與我的證書關聯的任何線索? –

+0

如果您沒有原始文件,請以有權訪問私鑰的用戶身份登錄,然後使用私鑰將其導出到pfx :) –