网络服务用户无法读取证书Windows Server 2012



我在Windows 2012 Server机器上运行了一个本地服务。这是一个带有一个节点的Azure Service Fabric群集,但这对此问题不重要。

该服务在"网络服务:用户"下运行,并且具有访问本地计算机上存储的证书的代码。使用x509certificate2collection.find方法找到证书的代码。

例外是:

异常抛出:'system.AggregateException'in mscorlib.dll

其他信息:无法成功获取访问令牌 使用指纹:80CEA40A62FFA0116FCB40B7B7B5985ADCD3E5AC39

当我在本地执行与admin用户相同的参数时执行相同的查找函数时,它可以工作。

我已经尝试明确授予网络服务用户在证书上阅读权限,但这没有解决。

我还尝试在网络服务用户上下文(不是部署的本地服务,而是本地可执行代码段(下在本地执行代码,并获得证书,这很奇怪。

我认为问题是网络服务无法访问私钥。我使用以下代码来设置权限,在将证书导入我自己的商店之后,我可以访问私钥

Import-PfxCertificate -CertStoreLocation Cert:LocalMachineMy -FilePath "path to the pfx file"
$certs = Get-ChildItem -Path cert:LocalMachineMy
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 "MicrosoftCryptoRSAMachineKeys"
 $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
 }

相关内容

  • 没有找到相关文章

最新更新