我在azure函数应用的SSL设置中导入了一个.pfx文件,如下所示:
我已经在应用程序设置中将WEBSITE_LOAD_CERTIFICATES设置为“ *”,这意味着我的应用程序将加载找到的所有证书。
最后在我的代码中,我像这样加载和使用证书:
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
应该是正确的值,因为我要查找的证书是有效的...
答案 0 :(得分:0)
如果您查看此answer
,
如果validOnly设置为true,则该函数调用X509Utils.VerifyCertificate,后者进一步调用本机API CertVerifyCertificateChainPolicy以验证证书。 CertVerifyCertificateChainPolicy函数检查证书链以验证其有效性,包括其是否符合任何指定的有效性策略标准。
此外,我建议您添加array.length方法以检查证书的数量并访问第一个元素。