この X.509 証明書が無効であるとみなされるのはなぜですか?
-
01-07-2019 - |
質問
サーバーに特定の証明書がインストールされています。この証明書には有効な日付があり、Windows 証明書 MMC スナップインでは完全に有効であるように見えます。
ただし、HttpRequest で使用するために証明書を読み取ろうとすると、証明書が見つかりません。使用されるコードは次のとおりです。
X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly); X509Certificate2Collection col =
store.Certificates.Find(X509FindType.FindBySerialNumber, "xxx", true);
xxx
はシリアル番号です。議論 true
「有効な証明書のみ」を意味します。返されたコレクションは空です。
奇妙なことに、私が合格すると false
, 、無効な証明書が受け入れられることを示す場合、コレクションには 1 つの要素 (指定されたシリアル番号を持つ証明書) が含まれます。
結論は:証明書は有効であるように見えますが、 Find
メソッドはそれを無効として扱います!なぜ?
解決
を使用して証明書チェーンを検証してみてください。 X509チェーン クラス。これにより、証明書が有効とみなされない理由が正確にわかります。
エリクソンが示唆したように、X509Store にはチェーン内の CA からの信頼された証明書が存在しない可能性があります。OpenSSL または別のツールを使用して独自の自己署名 CA を生成した場合は、その CA のパブリック証明書を X509Store に追加する必要があります。
他のヒント
発行者の証明書は X509Store に存在しますか?証明書は、信頼できる人によって署名された場合にのみ有効です。
これは本物の CA からの証明書ですか、それとも自分で署名したものですか?OpenSSL など、開発者によってよく使用される証明書署名ツールは、デフォルトではいくつかの重要な拡張機能を追加しません。
x509 証明書は特定のユーザーに関連付けられていると思います。コード内で作成対象とは異なるユーザーとしてアクセスしているため、無効になる可能性がありますか?