Azure功能密钥保管库参考证书吗?

时间:2019-04-09 18:22:47

标签: azure-functions azure-web-app-service azure-keyvault

我正在尝试按照here中的说明在我的Azure功能(v1)中使用密钥保管库引用。它适用于秘密,但不适用于证书。

文档根本没有提到证书,因此也许根本不支持它们?我希望将它作为base64字符串来获得。

我正在使用的示例应用设置:@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/certificates/ApiClientAuthenticationCertificate/f9580a1f5a0c4a6ca65ea089976ca2b0)

2 个答案:

答案 0 :(得分:0)

证明该证书在/secrets路径下可用。我上面的示例应如下所示:@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/ApiClientAuthenticationCertificate/f9580a1f5a0c4a6ca65ea089976ca2b0)

然后,设置值将是PFX格式的证书的base64字符串。像这样在Azure函数中实例化:

byte[] certBytes = Convert.FromBase64String(base64Pfx);
var cert = new X509Certificate2();
cert.Import(certBytes, String.Empty, X509KeyStorageFlags.MachineKeySet);

答案 1 :(得分:0)

我正在使用自签名证书使用“应用程序权限”连接到SharePoint。

在配置中对Key Vault值的引用设置如下:

@ Microsoft.KeyVault(SecretUri = https://keyvaultname.vault.azure.net/certificates/NameOfMyCertificate/id)

秘密Uri很容易从Key Vault获得。它称为证书标识符,位于Azure Key Vault中证书的属性中。

要使Azure Function能够访问Key Vault中的证书,它应该已激活受管理身份,并且具有获取证书的正确访问策略。

配置变量中加载的值确实是base64字符串。我用来加载证书的代码如下:

public static X509Certificate2 ReadCertificateFromBase64StringPfx(string base64Pfx)
    {
        byte[] certBytes = Convert.FromBase64String(base64Pfx);
        X509Certificate2Collection collection = new X509Certificate2Collection();
        collection.Import(certBytes, string.Empty, X509KeyStorageFlags.PersistKeySet);
        return collection[0];  
    }

如果PFX中有多个证书,则需要更改返回值并从集合中选择适当的证书。

注意:您还必须在Azure函数的配置中添加WEBSITE_LOAD_USER_PROFILE = 1,否则您将收到一条错误消息,指出导入函数无法找到该文件。选中this source