ServiceFabric 独立:无法获取私钥文件
ServiceFabric standalone: Failed to get private key file
我有一个独立的 ServiceFabric 集群(3 个节点)。我为服务器和客户端授权创建了 SSL 证书。然后我将证书指纹分配给集群配置。一切正常(集群健康状况良好,我的应用程序也可以正常工作。但是 Microsoft-ServiceFabric/Admin 日志中有很多错误。以下警告和错误每分钟都会写入日志:
- CryptAcquireCertificatePrivateKey 失败。 Error:0x80090014
- 无法获取证书的私钥文件名。错误:0x80090014
- 所有获取私钥文件名的尝试都失败了。
- 无法获取证书的私钥。指纹:{证书
指纹}。错误:E_FAIL
- 获取私钥文件失败。 x509FindValue:{证书指纹},
x509StoreName:我的,findType:FindByThumbprint,错误 E_FAIL
- SetCertificateAcls 失败。错误代码:E_FAIL 无法 ACL
- FabricNode/ServerAuthX509FindValue,错误代码E_FAIL
我为 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
)。虽然我不知道为什么,但是对于某些证书,上述情况会发生。
作为解决方法,请按照下列步骤操作:
- 转到本地计算机证书存储并删除您的证书。
- 首先将您的证书导入本地用户存储。
- 然后将您的证书导入本地机器商店。
- 为
Network Service
用户设置访问权限。
如果您按照上述步骤操作,私钥将添加到 MachineKeys
文件夹,错误将消失。
显然,您必须为每个集群节点重复这些步骤。
我有一个独立的 ServiceFabric 集群(3 个节点)。我为服务器和客户端授权创建了 SSL 证书。然后我将证书指纹分配给集群配置。一切正常(集群健康状况良好,我的应用程序也可以正常工作。但是 Microsoft-ServiceFabric/Admin 日志中有很多错误。以下警告和错误每分钟都会写入日志:
- CryptAcquireCertificatePrivateKey 失败。 Error:0x80090014
- 无法获取证书的私钥文件名。错误:0x80090014
- 所有获取私钥文件名的尝试都失败了。
- 无法获取证书的私钥。指纹:{证书 指纹}。错误:E_FAIL
- 获取私钥文件失败。 x509FindValue:{证书指纹}, x509StoreName:我的,findType:FindByThumbprint,错误 E_FAIL
- SetCertificateAcls 失败。错误代码:E_FAIL 无法 ACL
- FabricNode/ServerAuthX509FindValue,错误代码E_FAIL
我为 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
)。虽然我不知道为什么,但是对于某些证书,上述情况会发生。
作为解决方法,请按照下列步骤操作:
- 转到本地计算机证书存储并删除您的证书。
- 首先将您的证书导入本地用户存储。
- 然后将您的证书导入本地机器商店。
- 为
Network Service
用户设置访问权限。
如果您按照上述步骤操作,私钥将添加到 MachineKeys
文件夹,错误将消失。
显然,您必须为每个集群节点重复这些步骤。