我正在尝试按照here中的说明在我的Azure功能(v1)中使用密钥保管库引用。它适用于秘密,但不适用于证书。
文档根本没有提到证书,因此也许根本不支持它们?我希望将它作为base64字符串来获得。
我正在使用的示例应用设置:@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/certificates/ApiClientAuthenticationCertificate/f9580a1f5a0c4a6ca65ea089976ca2b0)
答案 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。