我的设置类似于此SO post
我的ASP.NET Web App连接到需要客户端证书的第三方服务。开始一个多租户应用程序,我为每个客户提供了一个存储在数据库中的客户端证书。跳过代码从数据库中检索证书,我这样做:
HttpClientHandler httpClientHandler = new HttpClientHandler();
X509Certificate2 customerCertificate = new X509Certificate2(certificateFromDatabase, "", X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
httpClientHandler.ClientCertificates.Add(customerCertificate);
httpClientHandler.ServerCertificateCustomValidationCallback += ServerCertificateValidationCallback;
httpClient = new HttpClient(httpClientHandler);
此代码在我的Windows 10开发PC上完美运行。 发布到Azure Web App时,它会失败20%的时间,并出现以下错误:
System.Net.Http.HttpRequestException:发送请求时发生错误。 System.Net.Http.WinHttpException:无法识别客户端证书凭据。
我已经编写了一种尽可能快地调用第三方服务的测试方法,每次都会切换证书。这个可以在我的PC上运行,在Azure上失败80%(与上面相同的错误)。
上面提到的SO帖子上提出的解决方案不适用于我:我应该加载证书的hundreads。
要解决问题,执行数据包捕获可能很有用。 但是,AFAIK,Azure Web Apps无法做到这一点(可以使用虚拟机和网络观察器完成)。