c# - 无法在 Azure Function 中加载证书
问题描述
我正在开发一个需要从安全的 Base 64 字符串加载证书的 Azure 函数。证书受密钥保护。证书和密码存储在 Azure Key Vault 中。
当我尝试从函数加载证书时,我在 v1 和 v2 函数中都出现错误。
这是用于加载证书的代码:
var certificate = new X509Certificate2(Convert.FromBase64String(certificateBase64), certificatePassword)
使用 .Net 的这段代码,我有一个奇怪的问题,我可以在本地重现。该问题与 .Net 4.6.1 相关联。在 .Net Core 2.0 中,它在本地运行良好(在 Azure Function CLI 中),但我遇到了一个关于找不到文件的奇怪问题(https://github.com/dotnet/corefx/issues/11042)
正如上一篇文章末尾提到的,我尝试了X509KeyStorageFlags.EphemeralKeySet标志。
var certificate = new X509Certificate2(Convert.FromBase64String(certificateBase64), certificatePassword, X509KeyStorageFlags.EphemeralKeySet)
该标志还不适用于 .Net Core 2 ( https://github.com/dotnet/corefx/issues/24454 ),也不适用于 Azure Functions 使用的框架 .Net 4.6.1。
有没有办法强制 Azure Function v1 使用 Net Framework?.Net Core 2.0 中是否有任何简单的解决方法,但不将证书作为文件存储在 Function 上?
解决方案
经过多次尝试,我找到了解决方案。必须使用标志X509KeyStorageFlags.MachineKeySet 。它适用于 Function App V1 (.Net 4.6.1) 和 Function App V2 (.Net Core 2):
var certificate = new X509Certificate2(Convert.FromBase64String(certificateBase64), certificatePassword, X509KeyStorageFlags.MachineKeySet)
推荐阅读
- angular - angular.json 排除开发构建的资产
- c++ - 以升序对链接列表进行排序并打印已排序的列表
- javascript - res.send 与 forEach 循环
- node.js - 使用级联删除 typeorm 中的 many2many 实体
- ansible - 如何在 ansible playbook 中的用户给定主机上运行用户给定的命令?
- sql - 如何为我的数据库中的所有表创建视图
- python - Plotly:更改森伯斯特图中元素的顺序
- java - 在构建 Jhipster 应用程序时,我们如何选择业务逻辑?
- macos - 谷歌字体的一些字母在 Mac 上出现损坏
- reactjs - 在 Expo 中使用 React 钩子在 React Native 功能组件中实现 Native 基础