对于我尝试运行的每个使用一个或多个SecretsCertificate
实例的Service Fabric应用程序,该应用程序无法在本地Service Fabric群集中启动,并且在SF Explorer中的Node> Application上出现以下错误:< / p>
Error event: SourceId='System.Hosting', Property='Activation:1.0'.
There was an error during activation.Failed to configure certificate permissions. Error E_FAIL.
Service Fabric还将一些相关项目记录到“事件查看器”>“应用程序和服务日志”>“ Microsoft-Service Fabric”>“管理”部分:
CryptAcquireCertificatePrivateKey failed. Error:0x8009200b
Can't get private key filename for certificate. Error: 0x8009200b
All tries to get private key filename failed.
Failed to get the Certificate's private key.
Thumbprint:4XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC. Error: E_FAIL
Failed to get private key file. x509FindValue: 4XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC, x509StoreName: My, findType: FindByThumbprint, Error E_FAIL
ACLing private key filename for thumbprint 4XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC. ErrorCode=E_FAIL
ConfigureCertificateACLs: error=E_FAIL
我已删除并重新安装了证书(已确认可在其他多个开发人员的本地Service Fabric群集开发环境中使用),并将私钥设置为对我的NETWORK SERVICE
用户具有明确的完全控制权限电脑,但无济于事。
我遵循this answer中的说明,尽管SF本地群集无法访问它,但实际上可以正确打印出私钥详细信息。
我已经重新安装了Microsoft Service Fabric SDK和Microsoft Visual Studio 2017,它们也都无法解决此问题。
在C#和PowerShell中重新创建此错误的所有尝试均无济于事,但是Service Fabric服务似乎无法从我的证书存储区访问私钥。
编辑:进一步的进展,没有解决方案。
我能够使用PowerShell Invoke-ServiceFabricDecryptText
cmdlet成功解密数据,但是SF Local Cluster仍然存在相同的错误。
我确定在证书的元数据(来自previously referenced SO answer)PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
中指定的文件在磁盘上的路径C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\
或任何相邻路径中都不存在。有人看过吗?
答案 0 :(得分:3)
如评论中所述,问题与创建(自签名)证书的方式有关。使用Powershell创建证书时,请确保使用:
因此,当我指定 -Provider“ Microsoft增强密码 提供程序v1.0“ New-SelfsignedCertificate 命令来创建证书,它可以正常工作。
来源:https://github.com/Azure/service-fabric-issues/issues/235#issuecomment-292667379
答案 1 :(得分:0)
在您无法或不想使用自签名证书的情况下,另一种方法是“删除”私钥的CNG存储(这是Service Fabric尚无法处理的部分) )。
本文概述的步骤显示了如何将CNG证书转换为非CNG证书: https://blog.davidchristiansen.com/2016/05/521/
openssl pkcs12 -in "yourcertificate.pfx" -nokeys -out "yourcertificate.cer"
-passin "pass:password"
openssl pkcs12 -in "yourcertificate.pfx" -nocerts –out “yourcertificate.pem"
-passin "pass:password" -passout "pass:password"
openssl rsa -inform PEM -in "yourcertificate.pem" -out "yourcertificate.rsa"
-passin "pass:password" -passout "pass:password"
openssl pkcs12 -export -in "yourcertificate.cer" -inkey "yourcertificate.rsa"
-out "yourcertificate-converted.pfx"
-passin "pass:password" -passout "pass:password"