2010-09-22 55 views

回答

1

您需要檢查每個證書的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); 
       } 
      } 
     } 
+0

我已經安裝了一個用戶認證證書,爲此我經歷了所有.Extensions和非它們看起來實際上對此有用。在X509EnhancedKeyUsageExtension類型 – 2010-09-22 16:46:24

+0

@dr中也沒有它們。邪惡 - 我剛剛使用我們的測試CA(標準Windows CA)生成了客戶端身份驗證證書,並且打印了「客戶端身份驗證」代碼。如果您的證書沒有EnhancedKeyUsage擴展名,它有什麼擴展名? (我的客戶端身份驗證證書也有X509KeyUsageExtension,帶有DataEncipherment,KeyEncipherment,NonRepudiation,DigitalSignature) – 2010-09-23 06:31:15

+0

它有1-X509BasicConstraintsExtension,3-X509Extension(「Netscape評論」,「主題密鑰標識符」,「身份驗證密鑰」) – 2010-09-23 10:02:19

2

有擴展,幫助確定可以使用什麼作爲客戶證書:

  • Extended Key Usage extension,如果存在將是id-kp-clientAuth
  • 「傳統」Netscape Cert Type擴展(不嚴格標準,但廣泛採用,即使在Netscape/Mozilla工具的世界之外)。

根本沒有這些擴展名的證書也可以用作客戶端證書,前提是它與(non-extended) Key Usage extension(如果有)兼容。至少在(未擴展的)密鑰用法擴展中需要的是客戶端證書的digitalSignature。如果您同時獲得Netscape證書類型和擴展密鑰使用擴展,會發生什麼情況並不十分清楚,但本着RFC 5280的精神,爲了與所有目前的擴展兼容,目的是值得考慮的:

如果證書包含一個關鍵 用途擴展和擴展鍵 用法擴展,然後這兩個擴展 必須被獨立地處理並 證書必須只能用於 與兩個 擴展一致的目的。如果沒有目的 與兩個擴展 一致,那麼證書不得用於任何目的的 。

NSS Technical Note 3 (All About Certificate Extensions)應該是感興趣的。

+0

我忘了補充說您還需要檢查鏈中CA證書所需的擴展值(請參閱NSS技術說明)。 – Bruno 2010-09-24 16:45:42

相關問題