6

クライアント証明書を使用して を認証する際に問題が発生していますHttpWebRequest。(クライアント証明書は送信されていません)。調査の結果、これは証明書が検証に合格していないことが原因のようです。

問題を絞り込むために、MSDNのこの例を使用しています(バグがあります。この質問の最後を参照してください。また、への参照があることを確認してくださいSystem.Security)。証明書の失効ステータスを確認できないため、検証が失敗していることがわかります (これは理にかなっています。私たちの CA では OCSP が有効になっていません)。証明書はオフライン展開で使用されるため、確認することはできません。とにかく撤回。このため、失効チェックを無効にしたいと考えています。

私は次のように例を変更しました

''~ line 29
ch.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck
ch.ChainPolicy.VerificationFlags =
    X509VerificationFlags.IgnoreCertificateAuthorityRevocationUnknown Or
    X509VerificationFlags.IgnoreCtlSignerRevocationUnknown Or
    X509VerificationFlags.IgnoreEndRevocationUnknown Or
    X509VerificationFlags.IgnoreRootRevocationUnknown
ch.Build(certificate)
Console.WriteLine("Chain Information")
Console.WriteLine("Chain revocation flag: {0}", ch.ChainPolicy.RevocationFlag)
...

残念ながら、それでも私の証明書は検証に失敗します

Element issuer name: [Obfuscated]
Element certificate valid until: 20/11/2013 17:50:01
Element certificate is valid: False
Element error status length: 0
Element information:
Number of element extensions: 8

上記で指定されたフラグがなければ、error status length: 1どれが64. The revocation function was unable to check revocation for the certificate.*****であるかを取得することに注意してください

したがって、明らかにフラグが何かに影響を与えています (エラーは発生しなくなりました) が、証明書は検証に合格していません。誰かが理由を説明できますか?報告されていない別のエラーがあるか、これについて完全に間違った方法で行っています。

*注意: MSDN の例の 57 行目にマイナーなバグがありelement.ChainElementStatus.Length > 0ますFor index = 0 To element.ChainElementStatus.Length - 1。それ以外の場合、証明書は引き続き失敗しますが、使用されているフラグに関係なく理由は表示されません

4

0 に答える 0