在 C# Azure 函数 (v2) 中使用来自 Azure Key Vault 的不可导出客户端证书

2023-12-24

我正在尝试设置对外部 API 的客户端证书身份验证。这不可出口的客户端证书位于 Azure Key Vault 中。我的代码是应用服务计划中托管的 Azure v2 函数中的 C# (.NET Core)。由于客户端证书不可导出,因此我无法将其放入我的应用服务计划的证书存储中。

我之前有一个客户端证书身份验证 PoC 与可出口的来自 Azure Key Vault 的客户端证书。我已将可导出的客户端证书导入到我的应用程序服务计划的证书存储中,从那里我只是以非常标准的方式使用 HttpClient 和 HttpClientHandler:

 builder.Services.AddHttpClient("certificateClient")
                 .ConfigurePrimaryHttpMessageHandler(
                    () => {
                            var handler = new HttpClientHandler();
                            handler.SslProtocols = SslProtocols.None;
                            handler.ClientCertificates.Add(certificate);
                            handler.ClientCertificateOptions = ClientCertificateOption.Manual;
                            return handler;
                          });
builder.Services.AddScoped<HttpClient>(i => i.GetRequiredService<IHttpClientFactory>().CreateClient("certificateClient"));

该证书是从应用服务计划的密钥存储中检索的。这有效。我只是将客户端证书附加到 HttpClientHandler,所有客户端证书身份验证握手均由底层 Azure Functions/ASP.NET Core 基础结构自动处理。

现在我有一个不可出口的客户端证书不在我的应用程序服务计划的密钥存储中,我无法将其附加到我的 HttpClient 的 HttpClientHandler,因此上述方法不起作用。

据我了解,TLS 客户端身份验证握手中所需的“证明”数据的私钥签名需要委托给 Azure Key Vault 的加密设施。我试图找出如何通过调用 HttpClient 或 HttpClientHandler 之类的方法,让此委托私钥签名在其所属的基础设施级别上工作。

我在 HttpClient(Handler) 或 ASP.NET Core 的 API 文档中找不到任何可以在基础结构级别执行此操作的方法/属性。它们可能存在,只是我找不到它们。

我没有示例代码,因为我无法弄清楚要使用哪些 API,或者这在我的 C# v2 函数技术堆栈中是否可行。 是否有其他 ASP.NET Core 类可以处理此类问题?我是否试图以错误的方式解决这个问题?即我是否需要停止尝试继续使用 HttpClient(Handler) 并尝试一种完全不同的方式来执行此操作?

注意:我认为在用尽所有其他选项之前尝试在应用程序代码中重新实现 TLS 客户端身份验证握手是不明智的。虽然在标头中附加公共客户端证书很容易,但我认为自己生成私钥签名所需的“证明”数据将非常困难。我认为我无法轻松访问正确的数据来生成与服务器端 TLS 堆栈生成的数据相匹配的“证明”数据。我也更愿意将其委托给基础设施,因此在应用程序代码中处理它是我最后采取的绝对行动。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# Azure 函数 (v2) 中使用来自 Azure Key Vault 的不可导出客户端证书 的相关文章

  • 停止/终止按消耗计划运行实例的 Azure Functions

    如何在消耗计划 以前称为动态计划 上终止 azure 函数可运行实例 执行 我正在运行时版本 1 0 上运行 azure 函数 很少有 一些未显示在下面屏幕截图的日志中 运行时间超过了五分钟函数超时阈值 检查具有 DOTTED 状态的 然而
  • 无法在 Azure Functions 中创建文件

    我有一个在应用服务计划上运行的 Azure 功能 此函数应用程序从 sftp 下载文件并执行一些处理 验证 然后上传到 blob 存储 这是工作代码 我必须进行一些更改 以便我必须保存物理文件 FileStream 而不是 MemorySt
  • Node.js 中的 Azure Function 和共享文件

    我正在通过 Bitbucket CI 部署我的 Azure Functions 我可以在多个函数中引用共享目录中的文件 这很棒 但是 当我尝试更新我的共享代码并通过推送到主分支来部署它时 我可以看到文件在我的 Kudu 控制台中更新 但我的
  • 如何从 httpclient 调用中获取内容正文?

    我一直在试图弄清楚如何读取 httpclient 调用的内容 但我似乎无法理解 我得到的响应状态是 200 但我不知道如何获取返回的实际 Json 这就是我所需要的 以下是我的代码 async Task
  • AWS EC2 应用程序负载均衡器 + 双向 SSL?

    是否可以使用 AWS Application Load Balancer 并使用双向 ssl 客户端证书 我当前的设置使用经典的 ELB 通过 tcp 转发到 Web 服务器端点来支持此操作 我现在需要使用 URL 路由流量 并希望在可能的
  • 跨多个 Azure Function 实例共享对象

    我们有一个要求 需要存储一个可由函数的多个实例访问和使用的对象 请告知实现此目的的最佳方法是什么 大多数时候 所有函数执行都在同一个进程中运行 因此您could使用静态类成员在函数实例之间共享状态 然而 这并不可靠 该进程可能随时停止运行
  • Azure Functions 计时器触发器线程安全

    我想知道是否有人知道如果您在 Azure 函数上设置了 Cron 设置 如果其任务执行时间超过 5 分钟 则每 5 分钟运行一次 会发生什么情况 它备份吗 或者我应该实现一个锁定功能 以防止某些东西 例如在循环中 处理先前调用已经处理的数据
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • Azure Functions 的实例正在共享变量吗?

    不确定这个问题是否有意义 但这就是我所观察到的 我的 Azure 函数使用 BlobTrigger 处理上传到 Blob 存储的 PDF 文件 一切工作正常 直到我一次上传多个 blob 在这种情况下 使用下面的代码我观察到以下内容 第一个
  • 验证 LDAPS 连接的自签名证书

    我想从 Linux Linux 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 客户端到 Windows 2012 服务器建立安全的 ldap 连接 ldaps 以更改活动中的用户密
  • Azure Key Vault - 添加部署槽的访问策略

    我有一个有 2 个插槽的应用程序 我已将连接字符串存储在密钥保管库中 我已在应用程序和 2 个插槽上启用 MSI 此外 在保管库的访问策略中 我添加了应用程序 生产槽 但是我无法将插槽添加到访问策略中 例如 我的应用程序的名称是 XYZ20
  • Azure Functions [JavaScript / Node.js] - HTTP 调用,良好实践

    从我的 Azure 函数 在 Node js 中运行 由 EventHub 消息触发 中 我想向某个外部页面发出发布请求 就像是 module exports function context eventHubMessages var ht
  • 有没有办法以编程方式更改 Azure 函数触发器类型。

    看起来 Azure 函数的 zip 文件中的 function json 定义了 Az func 的触发器 是否可以通过编程方式将触发器从基于计时器的触发器更改为基于事件的触发器 意思是 我可以在本地计算机上运行一个 python 应用程序
  • 如何为 Azure Function 启用“始终开启”功能?

    我有一个具有 3 个功能的功能应用程序 其中一个功能每 2 分钟定时器触发一次 我观察到 过了一会儿 该功能停止被触发 但当我进入门户时又重新启动 据我了解 原因是默认情况下 始终开启 处于关闭状态 但是 当我进入应用程序设置 常规设置时
  • Azure Functions - 注入的 ILogger 日志未显示

    我在用着FunctionsStartup在 Azure Functions 项目中设置 IoC 绑定 但是 从注入创建的任何日志ILogger
  • 无法创建集合信息 - 尝试在本地测试 Cosmos DB 触发器时出错

    我正在测试开发一个 Azure 函数来读取 Cosmos DB 数据库的更改源 我已经从 Azure 门户创建了这样的函数 但我想使用 VS 或 VS Code 来执行此操作 我使用 Azure Function Core Tools v2
  • 如何在 HttpResponseMessage 上设置响应 cookie?

    我想在 Web api 中创建一个演示登录服务 并且需要在响应上设置 cookie 我怎么做 或者有什么更好的授权方式吗 添加参考System Net Http Formatting dll并使用AddCookies中定义的扩展方法Http
  • 如何获取使用 Terraform 部署的函数应用程序中的“函数 Url”?

    作为 IaC 的一部分 A功能应用程序 让我们命名它FuncAppX使用 Terraform 进行部署 Terraform 具有内部函数 我需要访问Url使用 Terraform 在函数应用程序中实现相同的函数 我在这里分享相同的屏幕截图以
  • C# HttpClient:为什么使用 MediaTypeWithQualityHeaderValue?

    尝试在请求上设置 Content Type 标头属性时 MediaTypeWithQualityHeaderValue 参数的用途是什么 MSDN 文档 https msdn microsoft com en us library syst
  • 如何使用我的 DNS 服务器获取 Azure 容器实例?

    In ACI https learn microsoft com en us azure container instances container instances overview我们使用具有虚拟网络支持的 Linux 容器 我们运行

随机推荐