1

HttpClientHandler.ServerCertificateCustomValidationCallbackを使用してクライアント証明書を検証しようとしています。 ChainPolicyパラメータでx509chainを作成しました。ローカルCRLファイル(C#)で検証処理中にクライアント証明書失効を確認する方法

私はローカルに自分のCRL(.pem)ファイルを持っていますので、取り消しプロセスに追加したいと思います。

私はCRL validationのようなことを考えていましたが、X509CertificateX509ExtensionのdistributionPoint oidをインポートしましたが、私は理解できません。ここで

は、あなた自身のCRLをホストしたい場合は、それがホストすることができますので、あなたは、どこかに設定したサーバが必要になります私のコールバックコード

private static Func<HttpRequestMessage, X509Certificate2, X509Chain, SslPolicyErrors, bool> 
    ServerCertificateCustomValidationCallback() 
{ 
    return (sender, cert, chain, sslPolicyErrors) => 
    { 
     X509Certificate2 ca = new X509Certificate2(@"pathToCa\\ca.crt"); 

     X509Chain chai = new X509Chain(); 
     chai.ChainPolicy.ExtraStore.Add(ca); 
     chai.ChainPolicy.RevocationFlag = X509RevocationFlag.ExcludeRoot; 
     chai.ChainPolicy.RevocationMode = X509RevocationMode.Online; 
     chai.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags; 
     chai.ChainPolicy.VerificationTime = DateTime.Now; 
     try 
     { 
      if (!chai.Build(cert)) 
      { 
       return false; 
      } 
      foreach (X509ChainStatus status in chai.ChainStatus) 
      { 
       if (status.Status == X509ChainStatusFlags.UntrustedRoot) continue; 
       if (status.Status == X509ChainStatusFlags.OfflineRevocation) continue; 
       if (status.Status == X509ChainStatusFlags.RevocationStatusUnknown) continue; 
       return false; 
      } 

     } 
     catch (Exception e) 
     { 
      throw e; 
     } 

     return true; 
    }; 
} 

あなたの助けに感謝&明確化

+0

さんはなに? –

+0

@Mike_G申し訳ありませんが、それは私の最初の投稿です。ローカルCRLファイルを失効プロセスに追加するにはどうすればよいですか? –

答えて

0

の作品ですちょうどhtmlページのようなあなたのcrl。

あなたがあなた自身の本命を作成するLibreSSLをOpenSSLを使用して、または好ましくはのであれば、例えば、あなたの設定ファイルで、次を追加します。

crlDistributionPoints = URI:http://myserver.com/mycert.crl 
nsCaRevocationUrl = http://myserver.com/mycert.crl 

(あなたがへの絶対パスを使用して試みることができます上記のキーですが、私には分かりません)。

https://jamielinux.com/docs/openssl-certificate-authority/はかなり良いと詳細ですが、この設定を手助けするいくつかのチュートリアルがあります。

ビルドチェーンを呼び出すと、.Netフレームワークがチェインをチェックするので、CRLが自動的にチェックされるように、追加したり、コードを追加する必要はありません。

あなたはあなたのCRLに独自の証明書を追加することでこれをテストすることができます(ご自分のサーバのログファイルをチェックすることにより、CRLがフェッチされていることを確認することができます)、そしてあなたが

X509ChainStatusFlags.Revoked 

希望を得ることを見つけるべきです助けてください

+0

あなたのソリューションはうまくいきますが、私の質問はローカルファイルからのオフライン取り消しに関するものです。 –

+0

nsCaRevocationUrl/crlDistributionPointsのパスを\\ Machinename \ c $ \ certrevlist \ my.crlのように変更しようとしました –

+0

私は持っていますドットネットチェックは、httpソースでしか見つかりません:[dotnet cource](https://github.com/dotnet/corefx/blob/bffef76f6af208e2042a2f27bc081ee908bb390b/src/System.Security.Cryptography.X509Certificates/src/Internal/Cryptography/Pal.Unix /CrlCache.cs#L255) –

関連する問題