首页 > 解决方案 > 如何在 Unix 上的 Service Fabric 应用程序中从 C# 获取机密证书?

问题描述

我的 applicationmanifest.xml 中有以下内容:

  <Principals>
    <Users>
      <User Name="IdentityService" AccountType="NetworkService" />
      <User Name="ExplorerService" AccountType="NetworkService" />
    </Users>
  </Principals>
  <Policies>
    <SecurityAccessPolicies>
      <SecurityAccessPolicy ResourceRef="IdentityCert" PrincipalRef="IdentityService" ResourceType="Certificate" />
      <SecurityAccessPolicy ResourceRef="IdentityCert" PrincipalRef="ExplorerService" ResourceType="Certificate" />
    </SecurityAccessPolicies>
  </Policies>
  <Certificates>
    <SecretsCertificate X509FindValue="[IDENTITY_SERVICE_THUMBPRINT]" Name="IdentityCert" />
  </Certificates>

在 Windows 集群上,我一直在使用指纹在 localmachine 中查找

X509Certificate2 cert = X509.LocalMachine.My.Thumbprint.Find(options.Thumbprint, validOnly: false).FirstOrDefault();

没有什么问题。

在部署到 Unix 集群时,我遇到了以下异常:

 Unix LocalMachine X509Store is limited to the Root and CertificateAuthority stores. Unix LocalMachine X509Store is limited to the Root and CertificateAuthority stores.

我明白它在告诉我什么;我不能使用本地机器。但是为了做到这一点,我将如何X509Certificate2在 Unix 机器上找到证书?(它是 .NET Core 还是 Service Fabric 的东西?)

标签: asp.net-coreazure-service-fabric

解决方案


文档

Service Fabric 通常期望 X.509 证书存在于Linux 群集节点上的/var/lib/sfcerts目录中。这适用于集群证书、客户端证书等。在某些情况下,您可以为证书指定除 var/lib/sfcerts 文件夹之外的位置。

和..

应用程序清单中指定的证书(例如,通过 SecretsCertificate 或 EndpointCertificate 元素)必须存在/var/lib/sfcerts目录中。用于在应用程序清单中指定证书的元素不采用路径属性,因此证书必须存在于默认目录中。这些元素确实采用可选的X509StoreName属性。默认值为“My”,它指向 Linux 节点上的 /var/lib/sfcerts 目录。Linux 集群上未定义任何其他值。对于在 Linux 集群上运行的应用,我们建议您省略 X509StoreName 属性。

我有一段时间没有做过 SF Linux,所以我没有任何脚本或代码片段可以提供帮助,但文档应该是直截了当的。


推荐阅读