asp.net-core - 如何在 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 的东西?)
解决方案
从文档:
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,所以我没有任何脚本或代码片段可以提供帮助,但文档应该是直截了当的。
推荐阅读
- javascript - Google 表格组织结构图中的自定义工具提示
- c++ - 如何使 Visual Studio (C++) 显示“包含在”链中?
- c# - 绑定 DataContext 松散的 DependencyProperty
- php - PHP 删除第二个记录组名
- java - 从oracle中的多个表中获取多个列的最有效方法是什么?
- excel - 合并excel中重复的行
- python - 如何在不序列化的情况下将带有日期的文本写入 JSON 文件
- http - 检查 HTTP 1.1 请求是否有正文的最佳方法
- python - 使用 keras ImageDataGenerator 时如何在测试阶段对图像应用归一化?
- php - Symfony 4,如何从服务类正确返回错误 500 服务器