2

サーバーによって発行された証明書が有効であることを確認し、確認できない場合はユーザーに選択するよう警告したいと考えています。現在、ユーザーに警告することなく、すべての証明書がフィドラーによって受け入れられているようです。それを行うメカニズムはありますか?おそらく、フィドラーコアサンプルプロジェクトにある次のコードにあります。ルートが信頼されていない自己署名証明書についてユーザーに警告したい。

 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;
            }
        }
    }
4

1 に答える 1

2

デフォルトでは、設定しない限り、FiddlerCore はリモート証明書が信頼されたチェーンの一部であることを検証します。Fiddler.CONFIG.IgnoreServerCertErrors = true;

ただし、これは自己署名証明書が FiddlerCore によって拒否されることを意味し、FiddlerCore はユーザーが上書きできるようにする UI を表示しないため、これは問題です。

これを修正する方法は、証明書検証イベント ハンドラーの実装を使用することです。FiddlerApplication.OnValidateServerCertificate += new System.EventHandler<ValidateServerCertificateEventArgs>(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;
 }

通常、ユーザーの選択をキャッシュして、すべての接続でプロンプトを表示しないようにすることもできます。

完全な例を含む詳細については、http://fiddler2.com/blog/blog/2013/01/03/evaluating-certificates-in-fiddler-and-fiddlercoreを参照してください。

于 2013-07-18T21:58:37.570 に答える