ServiceFabric独立部署:获取私钥文件失败

6
我有一个独立的ServiceFabric集群(3个节点)。我为服务器和客户端授权创建了SSL证书。然后,我将证书指纹分配给了集群配置。一切都正常运行(集群健康状态正常,我的应用程序也正常工作),但是Microsoft-ServiceFabric/Admin日志中有很多错误。以下警告和错误每分钟都会写入日志:
- CryptAcquireCertificatePrivateKey失败。错误:0x80090014 - 无法获取证书的私钥文件名。错误:0x80090014 - 所有尝试获取私钥文件名均失败。 - 未能获取证书的私钥。Thumbprint:{Cert Thumbprint}。错误:E_FAIL - 未能获取私钥文件。x509FindValue:{Cert Thumbprint},x509StoreName:My,findType:FindByThumbprint,错误E_FAIL - SetCertificateAcls失败。错误代码:E_FAIL无法ACL - FabricNode/ServerAuthX509FindValue,ErrorCode E_FAIL
我已将私钥存储的写权限分配给NETWORK SERVICE和SYSTEM。同时,我还为PK存储分配了gMSA帐户。但是错误仍然出现在日志中。另一方面,一切看起来都很好,集群正在运行中...
这是我的集群配置(安全部分):
"security":{ "ServerCredentialType":"X509", "ClusterCredentialType":"Windows", "WindowsIdentities":{ "ClustergMSAIdentity":"gMSAccountName@domain.com", "ClusterSPN":"http/servicefabric" }, "CertificateInformation":{ "ServerCertificate": { "Thumbprint": "{Cert Thumbprint}", "X509StoreName": "My" }, "ClientCertificateThumbprints":[ { "CertificateThumbprint":"{Cert Thumbprint}", "IsAdmin":true } ], "X509StoreName": "My" } },
我使用了OpenSSL 1.0.2k-fips 26 Jan 2017创建x509证书。我遵循了这篇文章中的步骤:https://gist.github.com/harishanchu/e82d759c0235379d1778f799992b5774。有人能澄清这个问题吗?
1个回答

6

看起来您在 MachineKeys 文件夹中没有私钥文件。 要验证文件夹中是否有物理文件,请运行此 PowerShell 命令:

$certThumb = "1D6523F622E33DF46382D081BCA9AE9A2D8D78CC"

Try
{
     $WorkingCert = Get-ChildItem CERT:\LocalMachine\My |where {$_.Thumbprint -match $certThumb} | sort $_.NotAfter -Descending | select -first 1 -erroraction STOP
     $TPrint = $WorkingCert.Thumbprint
     $rsaFile = $WorkingCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
}
Catch
{
     "Error: unable to locate certificate for $($CertCN)"
     Exit
}

if ($WorkingCert.PrivateKey) {
     $WorkingCert.PrivateKey
}
else
{
     "No private key found"  
}

如果您收到“未找到私钥”的消息,这意味着在“MachineKeys”文件夹中没有私钥。尽管证书属性可能会声称(存在一个密钥图标和消息“您有与此证书对应的私钥”),但仍然会出现上述情况。虽然我不知道为什么,但是对于某些证书,上述情况会发生。
作为解决方法,请按照以下步骤操作:
  1. 进入本地计算机证书存储并删除您的证书。
  2. 首先将您的证书导入到本地用户存储中。
  3. 然后将您的证书导入到本地计算机存储中。
  4. 为“Network Service”用户设置访问权限。
如果按照上述步骤操作,则私钥将被添加到“MachineKeys”文件夹中,并且错误将消失。 显然,您需要为每个集群节点重复执行这些步骤。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接