首页 > 解决方案 > 验证设备的自签名证书

问题描述

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

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

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
}

验证的简单方法很简单return true;,但我们希望有一个适当的证书处理。

标签: c#certificatessl-certificateself-signed

解决方案


经过一些测试,我们发现问题出在 .net core 2.0 的 HttpWebRequest 和 HttpClient 上。将框架更新为 .net core 2.1 验证对两者都有效。问题在于 .net core 2.0 如何处理证书验证回调。由于 HttpClient 问题没有解决,而是因为我们将版本更新到 2.1。此外,验证回调使用 .net 框架 4.6.1 很好地检索证书链


推荐阅读