我想從X509Store(StoreLocation.CurrentUser)
如何在.NET中獲得證書的「目的」(客戶端身份驗證證書)?
找到所有客戶端身份驗證證書有沒有辦法做到這一點?即使通過獲取全部然後過濾某個屬性以獲取所有客戶端身份驗證證書?
我想從X509Store(StoreLocation.CurrentUser)
如何在.NET中獲得證書的「目的」(客戶端身份驗證證書)?
找到所有客戶端身份驗證證書有沒有辦法做到這一點?即使通過獲取全部然後過濾某個屬性以獲取所有客戶端身份驗證證書?
您需要檢查每個證書的Extensions。據我所知,一旦你需要Key Usage擴展,你應該有你需要的所有信息。
編輯實際上,對於客戶端驗證,您可能需要增強型密鑰用法擴展。我沒有一個客戶端身份驗證證書躺在身邊來測試這一點,但下面的打印「服務器身份驗證」服務器證書我有:
var cert1 = new X509Certificate2(/* Path to certificate */);
foreach (var ext in cert1.Extensions)
{
var eku = ext as X509EnhancedKeyUsageExtension;
if (eku != null)
{
foreach (var oid in eku.EnhancedKeyUsages)
{
Console.WriteLine(oid.FriendlyName);
}
}
}
有擴展,幫助確定可以使用什麼作爲客戶證書:
id-kp-clientAuth
。根本沒有這些擴展名的證書也可以用作客戶端證書,前提是它與(non-extended) Key Usage extension(如果有)兼容。至少在(未擴展的)密鑰用法擴展中需要的是客戶端證書的digitalSignature
。如果您同時獲得Netscape證書類型和擴展密鑰使用擴展,會發生什麼情況並不十分清楚,但本着RFC 5280的精神,爲了與所有目前的擴展兼容,目的是值得考慮的:
如果證書包含一個關鍵 用途擴展和擴展鍵 用法擴展,然後這兩個擴展 必須被獨立地處理並 證書必須只能用於 與兩個 擴展一致的目的。如果沒有目的 與兩個擴展 一致,那麼證書不得用於任何目的的 。
NSS Technical Note 3 (All About Certificate Extensions)應該是感興趣的。
我忘了補充說您還需要檢查鏈中CA證書所需的擴展值(請參閱NSS技術說明)。 – Bruno 2010-09-24 16:45:42
我已經安裝了一個用戶認證證書,爲此我經歷了所有.Extensions和非它們看起來實際上對此有用。在X509EnhancedKeyUsageExtension類型 – 2010-09-22 16:46:24
@dr中也沒有它們。邪惡 - 我剛剛使用我們的測試CA(標準Windows CA)生成了客戶端身份驗證證書,並且打印了「客戶端身份驗證」代碼。如果您的證書沒有EnhancedKeyUsage擴展名,它有什麼擴展名? (我的客戶端身份驗證證書也有X509KeyUsageExtension,帶有DataEncipherment,KeyEncipherment,NonRepudiation,DigitalSignature) – 2010-09-23 06:31:15
它有1-X509BasicConstraintsExtension,3-X509Extension(「Netscape評論」,「主題密鑰標識符」,「身份驗證密鑰」) – 2010-09-23 10:02:19