2

エラーが発生します"InvalidBasicConstraints: A certificate's basic constraint extension has not been observed."この証明書はOpenSSLで発行され、WCFサービスのサーバー側のテスト証明書として使用されます(証明書の検証時に同じエラーが発生します)。このコードでエラーを再現できます。

X509Certificate2 cert = new X509Certificate2(@"c:\test.cer");

X509Chain chain = X509Chain.Create();
X509ChainPolicy policy = new X509ChainPolicy();
policy.RevocationMode = X509RevocationMode.NoCheck;
chain.ChainPolicy = policy;
bool valid = chain.Build(cert);

Console.WriteLine(string.Join(" -- ", chain.ChainStatus.Select(o => o.Status + ": " + o.StatusInformation)));
Console.WriteLine(valid ? "VALID" : "NOT VALID");

証明書を見ると、これらの基本的な制約がわかります。

Subject Type=End Entity
Path Length Constraint=None

このエラーはどういう意味ですか?どうすれば修正できますか?

基本的な制約について私が見つけた最も関連性の高い記事は、この記事、 http: //unitstep.net/blog/2009/03/16/using-the-basic-constraints-extension-in-x509-v3-certificates-for-intermediateでした。 -cas /ただし、子証明書に署名することを禁止すること、または子証明書をさらに作成することについてのみ説明しています。私の場合は、これを実行しようとはしていません。

また、上記の基本的な制約の意味を説明する参考資料も役立ちます。

4

1 に答える 1

6

http://forums.juniper.net/t5/SSL-VPN/quot-Failed-to-authenticate-client-certificate-quot-after/td-p/89232/page/4

上記のスレッドを読んだ後、2つの異なる主題タイプがあることがわかりました。

Basic Constraints: Subject Type=CA, Length Constraint=None
Basic Constraints: Subject Type=End Entity, Path Length Constraint=None

私が使用しているサーバー側の証明書は、実際には階層内の3番目のリンクです。

A-> B-> C .... Aが発行されたBは、署名されたCを発行しました。

証明書BにもSubject Type=End Entity基本的な制約があります。基本的な制約の種類やその意味を記載した資料は見つかりませんが、上記の2種類の違いからすると、End Entity証明書を発行できないということです。とは対照的に、これはチェーンの終わりですSubject Type=CA

.NETがチェーンを検証しているとき、Bはその親証明書から証明書を発行する権限を持っていないことを確認し、エラーをスローしますA certificate's basic constraint extension has not been observed

編集:自己署名証明書によって発行された新しい証明書でさらにテストすると、上記の理論が検証されます。

于 2013-03-15T08:36:59.090 に答える