【问题标题】:Accessing Certificate from within a C# Azure function从 C# Azure 函数中访问证书
【发布时间】:2017-04-22 04:16:54
【问题描述】:

我需要从我的 Azure Function 访问证书。

我按照Runtime error loading certificate in Azure Functions 中概述的步骤进行操作,但没有成功。

private static X509Certificate2 GetCertificate(string thumbprint, TraceWriter log)
{
    X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
    try
    {
        store.Open(OpenFlags.ReadOnly);
        log.Info("Enumerating certificates");
        foreach (var cert in store.Certificates) {
            log.Info(cert.Subject);
        }
        var col = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
        if (col == null || col.Count == 0)
        {
            return null;
        }
        return col[0];
    }
    finally
    {
        store.Close();
    }

}

上传到 Azure 函数的两个证书和设置 WEBSITE_LOAD_CERTIFICATES 也被添加并设置为 * 或所需证书的 thumpbrint,但无济于事。

GetCertificate 方法应该打印存储区中所有证书的列表,但存储区是空的。

关于如何解决这个问题的任何线索?

【问题讨论】:

  • 您是否尝试为网络作业搜索类似问题?因为解决方案是相同的
  • 是的。他们都建议上面链接中概述的方法应该有效。但事实并非如此。
  • 当我在 azure 中访问证书时,我总是使用 StoreLocation.LocalMachine。我没有在 Functions 中尝试过,但在其他 WebApps 和 CloudService 中它可以与 LocalMachine 一起使用
  • LocalMachine 确实有一些证书,但不是我通过 Azure 门户上传的证书。
  • Okey... 我试过了,也遇到了同样的问题。然后再试一次,但这次我创建了选择应用服务计划而不是托管计划的功能......并且还确保当我将指纹复制粘贴到设置时,我检查了没有添加额外的不可打印字符并且我得到了你的代码正常工作!!!尝试按照步骤操作,如果成功,请告诉我!

标签: c# azure ssl azure-functions


【解决方案1】:

更新: 消费计划现在支持客户端证书。

我们的消费计划尚不支持客户端证书,仅在应用服务计划中支持。这由我们的 repo here 中的一个问题跟踪。我们正在努力解决这个问题 - 请关注该问题的状态。谢谢。

【讨论】:

  • 现在好像可以通过 Azure Keyvault 完成,在 Function App 中上传证书,然后通过函数中的 secret 检索内容
  • 现在应该在消费和应用服务计划中都支持它。我认为应该更新答案以反映这一点。
  • 它现在适用于消费计划和应用服务,这是我如何处理它的完整答案:*.com/questions/53778977/…
  • 如何找到LINUX消费计划的证书?