ServiceFabric 独立:无法获取私钥文件

ServiceFabric standalone: Failed to get private key file

我有一个独立的 ServiceFabric 集群(3 个节点)。我为服务器和客户端授权创建了 SSL 证书。然后我将证书指纹分配给集群配置。一切正常(集群健康状况良好,我的应用程序也可以正常工作。但是 Microsoft-ServiceFabric/Admin 日志中有很多错误。以下警告和错误每分钟都会写入日志:

我为 NETWORK SERVICE 和 SYSTEM 分配了对私钥存储的写入许可。我还为 PK 存储分配了 gMSA 帐户。但是错误仍然出现在日志中。 另一方面,一切看起来都很好,聚集起来 运行... 这是我的集群配置(安全部分):

"security":{
"ServerCredentialType":"X509", "ClusterCredentialType":"Windows", "WindowsIdentities":{
"ClustergMSAIdentity":"gMSAccountName@domain.com", "ClusterSPN":"http/servicefabric" }, "CertificateInformation":{
"ServerCertificate":{ "Thumbprint": "{证书指纹}", "X509StoreName": "My" }, "ClientCertificateThumbprints":[
{
"CertificateThumbprint":"{证书指纹}", "IsAdmin":真 } ], "X509StoreName": "My" } },

对于 x509 认证创建,我使用 OpenSSL 1.0.2k-fips 2017 年 1 月 26 日。我按照本文中的步骤操作:https://gist.github.com/harishanchu/e82d759c0235379d1778f799992b5774 谁能澄清这个问题?

您的 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"  
}

如果您收到 No private key found 消息,则表示 MachineKeys 文件夹中没有私钥。即使证书属性可以以其他方式声明(有一个钥匙图标和消息 You have a private key that corresponds to this certificate)。虽然我不知道为什么,但是对于某些证书,上述情况会发生。

作为解决方法,请按照下列步骤操作:

  1. 转到本地计算机证书存储并删除您的证书。
  2. 首先将您的证书导入本地用户存储
  3. 然后将您的证书导入本地机器商店。
  4. Network Service 用户设置访问权限。

如果您按照上述步骤操作,私钥将添加到 MachineKeys 文件夹,错误将消失。 显然,您必须为每个集群节点重复这些步骤。