从功能应用程序服务的代码中加载证书

时间:2019-12-12 07:44:18

标签: .net azure ssl-certificate azure-functions

我在azure函数应用的SSL设置中导入了一个.pfx文件,如下所示:

enter image description here

我已经在应用程序设置中将WEBSITE_LOAD_CERTIFICATES设置为“ *”,这意味着我的应用程序将加载找到的所有证书。

enter image description here

最后在我的代码中,我像这样加载和使用证书:

X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, "13865DB1**************33384B053E4B5", true);

log.LogInformation("Number of certificates in collection: " + certCollection.Count.ToString());

certStore.Close();

var handler = new HttpClientHandler();
handler.ClientCertificates.Add(certCollection[0]);

函数运行时,日志行显示“收集的证书数量:0”,并且handler.ClientCertificates.Add(certCollection[0]);给出索引超出范围的异常。我在代码中使用证书的方式有什么问题,或者为什么它不会被加载?我认为当WEBSITE_LOAD_CERTIFICATES为'*'时,它应该自动发生。

编辑:在true中从false切换到 X509Certificate2Collection certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, "13865DB1**************33384B053E4B5", true);时,它似乎起作用了,但是我不明白为什么。布尔值称为validOnly,所以我觉得true应该是正确的值,因为我要查找的证书是有效的...

1 个答案:

答案 0 :(得分:0)

如果您查看此answer

如果validOnly设置为true,则该函数调用X509Utils.VerifyCertificate,后者进一步调用本机API CertVerifyCertificateChainPolicy以验证证书。 CertVerifyCertificateChainPolicy函数检查证书链以验证其有效性,包括其是否符合任何指定的有效性策略标准。

此外,我建议您添加array.length方法以检查证书的数量并访问第一个元素。