certmgr.msc の「個人」にある証明書を列挙するには X509Certificate2Collection クラス を使う。
さらにそこから、個々の証明書の『目的』を得る実験的サンプル。
「クライアント認証」用の証明書を列挙するため、 X509KeyUsageExtension クラス を得るようにする。
Certificate Extensions は、X509Certificate2 オブジェクトに対して、 cert.Extensions[Oid]
で得られる。
標準目的となる "Key Usage" の Oid は "2.5.29.15" で、
"Extended Key Usage" (EKU) の Oid は "2.5.29.37"。
戻り値はそれぞれ、X509KeyUsageExtension クラス、X509EnhancedKeyUsageExtensionのインスタンスとして得られる。
証明書から情報を得られなかった場合は null。
cert.Extensions を foreach で全列挙して、.Oid.FriendlyName を確認するという手もあるが、Oid が分かっている場合は直接指定した方が手っ取り早い。
そしてクライアント認証であれば、EKU フィールドを表す X509EnhancedKeyUsageExtension クラスのインスタンスを取得した後、EnhancedKeyUsages プロパティから、クライアント認証を示す Oid "1.3.6.1.5.5.7.3.2" の存在を確認すれば OK。
ちなみにサーバー証明書の場合は、Oid "1.3.6.1.5.5.7.3.1" である。