質問

サーバーに特定の証明書がインストールされています。この証明書には有効な日付があり、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 証明書は特定のユーザーに関連付けられていると思います。コード内で作成対象とは異なるユーザーとしてアクセスしているため、無効になる可能性がありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top