クライアント証明書を使用して を認証する際に問題が発生しています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
。それ以外の場合、証明書は引き続き失敗しますが、使用されているフラグに関係なく理由は表示されません