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

时间:2018-07-02 10:52:35

标签: ssl acl azure-service-fabric

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

  • CryptAcquireCertificatePrivateKey失败。错误:0x80090014
  • 无法获取证书的私钥文件名。错误:0x80090014
  • 所有尝试获取私钥文件名的尝试均失败。
  • 无法获取证书的私钥。指纹:{证书 指纹}。错误:E_FAIL
  • 无法获取私钥文件。 x509FindValue:{证书指纹}, x509StoreName:我的,findType:FindByThumbprint,错误E_FAIL
  • SetCertificateAcls失败。错误代码:E_FAIL无法进行ACL
  • FabricNode / ServerAuthX509FindValue,错误代码E_FAIL

我向网络服务和系统的私钥存储分配了写许可。我还为gMSA帐户分配了PK存储空间。但是错误仍然存​​在。 另一方面,一切看起来都很好,可以正常运行并集群... 这是我的群集配置(安全部分):

“安全性”:{
     “ ServerCredentialType”:“ X509”,      “ ClusterCredentialType”:“ Windows”,      “ WindowsIdentities”:{
        “ ClustergMSAIdentity”:“ gMSAccountName@domain.com”,         “ ClusterSPN”:“ http / servicefabric”      },      “ CertificateInformation”:{
        “ ServerCertificate”:{                “缩略图”:“ {Cert Thumbprint}”,                “ X509StoreName”:“我的”            },         “ ClientCertificateThumbprints”:[
           {
              “ CertificateThumbprint”:“ {Cert Thumbprint}”,               “ IsAdmin”:true            }         ],         “ X509StoreName”:“我的”      }   }

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

1 个答案:

答案 0 :(得分:3)

似乎angular.module('xxxxx').directive('bmApp', bmApp); bmApp.$inject = ['$document', '$log', 'matchmedia', 'AuthenticatedSession', 'bmUser']; function bmApp($document, $log, matchmedia, authenticatedSession, bmUser) { return { restrict: 'EA', controller: [function () { }], scope: true, link: function (scope, element, attrs) { var html = $document.find('html'); if (attrs.bmApp !== 'pre-auth') { /* load intrinsic post-auth objects */ authenticatedSession.load().then(function(data) { $log.log('session:', { meta: data.meta, bindings: data.bindings }); }).finally(function () { html.addClass('bm-resolved'); }); bmUser.load(); } } }; } 文件夹中没有私钥文件。 要验证文件夹中是否有物理文件,请运行以下powershell命令:

MachineKeys

如果收到$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)。虽然我不知道为什么,但是对于某些证书,上述情况会发生。

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

  1. 转到本地计算机证书存储区并删除您的证书。
  2. 首先将您的证书导入本地用户商店
  3. 然后将您的证书导入本地计算机存储。
  4. 设置You have a private key that corresponds to this certificate用户的访问权限。

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