Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在fiddler core中验证证书?_C#_Fiddler_Fiddlercore - Fatal编程技术网

C# 如何在fiddler core中验证证书?

C# 如何在fiddler core中验证证书?,c#,fiddler,fiddlercore,C#,Fiddler,Fiddlercore,我想验证服务器颁发的证书是否有效,并提醒用户选择是否无法验证。目前,所有证书似乎都被fiddler接受,而没有提醒用户。有没有一个机制可以做到这一点?也许在下面的代码中可以找到fiddler核心示例项目。我想提醒用户具有不受信任根的自签名证书 static void CheckCert(object sender, ValidateServerCertificateEventArgs e) { if (null != e.ServerCertificate)

我想验证服务器颁发的证书是否有效,并提醒用户选择是否无法验证。目前,所有证书似乎都被fiddler接受,而没有提醒用户。有没有一个机制可以做到这一点?也许在下面的代码中可以找到fiddler核心示例项目。我想提醒用户具有不受信任根的自签名证书

 static void CheckCert(object sender, ValidateServerCertificateEventArgs e)
    {
        if (null != e.ServerCertificate)
        {
            Console.WriteLine("Certificate for " + e.ExpectedCN + " was for site " + e.ServerCertificate.Subject + " and errors were " + e.CertificatePolicyErrors.ToString());


            if (e.ServerCertificate.Subject.Contains("fiddler2.com"))
            {
                Console.WriteLine("Got a certificate for fiddler2.com. We'll say this is also good for any other site, like https://fiddlertool.com.");
                e.ValidityState = CertificateValidity.ForceValid;
            }
        }
    }

默认情况下,除非设置
Fiddler.CONFIG.IgnoreServerCertErrors=true,否则FiddlerCore将验证远程证书是否为可信链的一部分

然而,这意味着自签名证书将被FiddlerCore拒绝,并且由于FiddlerCore不显示允许用户覆盖的UI,这是一个问题

解决此问题的方法是使用实现证书验证事件处理程序:
FiddlerApplication.OnValidateServerCertificate+=new System.EventHandler(CheckCert)

在处理程序中,您可以执行以下操作:

 private void CheckCert(object sender, ValidateServerCertificateEventArgs e)
 {
  if (SslPolicyErrors.None == e.CertificatePolicyErrors)
  {
     return;
  }

  DialogResult oResult = MessageBox.Show("Accept invalid certificate\nYOUR DETAILS HERE", "Certificate Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2));

 if (DialogResult.Yes == oResult) 
 {
   e.ValidityState = CertificateValidity.ForceValid;
 }
 else
 {  
   e.ValidityState = CertificateValidity.ForceInvalid;
 }
您通常还希望缓存用户的选择,以避免在每次连接时提示他们


有关更多详细信息,请参阅,包括完整示例。

明白了!现在我有了一个起点。