验证设备的自签名证书

时间:2019-07-26 12:13:31

标签: c# certificate ssl-certificate self-signed

方案是:我们有一个带有证书的linux设备。设备证书由中间证书签名,中间证书由根证书签名,因此深度级别为3。有一项服务可以对Linux设备进行Https调用。该服务托管在Windows工作站上,并且在CA信任库中安装了用于对设备进行签名的根证书的公共密钥。问题在于,我们无法在工作站上找到正确的方法来验证设备证书。

创建HttpWebRequest时,我们试图通过在Windows上本地用户的受信任的根证书颁发机构中添加公共证书来验证证书。

var loadingTask = pdfjsLib.getDocument({
  url: url,
  cMapUrl: "pdfjs/cmaps/",
  cMapPacked: true
});

loadingTask.promise.then(...

处理程序是:

var httpWebRequest = (HttpWebRequest)WebRequest.Create(endpoint);
httpWebRequest.ServerCertificateValidationCallback = CertificateValidationHandler;

简单的验证方法很简单bool CertificateValidationHandler(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) { return true; } //Validate certificate } ,但我们希望适当地处理证书。

2 个答案:

答案 0 :(得分:0)

感谢您的评论。花了一些时间试图找出如何从ServerCertificateValidationCallback处理HttpWebRequest之后,我决定更改方法并尝试不同的http .net实现。我使用System.Net.Http.HttpClient类进行了测试,并且回调函数返回了正确验证的完整证书链。此外,ms docs中建议不要将HttpWebRequest用于新开发。用法示例:

HttpClientHandler httpClientHandler = new HttpClientHandler();
httpClientHandler.CertificateCustomValidationCallback = ValidationCallback;
using (HttpClient client = new HttpClient(httpClientHandler))
{
}

答案 1 :(得分:0)

经过一些测试,我们发现问题出在HttpWebRequest和HttpClient的.net core 2.0。将框架更新为.net core 2.1验证对于两者都可以正常工作。 .net core 2.0的问题在于它如何处理证书验证回调。由于HttpClient,此问题未得到解决,但是由于我们将版本更新为2.1。此外,验证回调使用.net Framework 4.6.1

可以检索证书链。