[英]How to compare two X509Certificate2 c#
如何比較兩個 X509Certificate2 對象?
我需要找出兩個證書是否相同。 它用於用戶身份驗證目的,我需要確定這兩個證書是否屬於同一個人。
我可以使用它的序列號或指紋屬性嗎? 或者還有其他方法嗎?
我也是新手,想知道使用 X509Certificate 進行用戶身份驗證是否安全?
正如@Rattle 指出的那樣:
出於安全目的比較證書時不應使用 Equals 方法。 相反,使用RawData屬性或Thumbprint屬性的散列。
晚會晚了(最近我自己需要比較兩個 X509 證書)。
X509Certificate類有一個Equals()方法:
如果兩個對象是 X509Certificate 對象並且它們具有相同的頒發者和序列號,則它們被認為是相等的。
using System;
using System.Security.Cryptography.X509Certificates;
public class X509
{
public static void Main()
{
// The paths to the certificate signed files
string Certificate = @"Signed1.exe";
string OtherCertificate = @"Signed2.exe";
// Starting with .NET Framework 4.6, the X509Certificate type implements the IDisposable interface...
using (X509Certificate certOne = X509Certificate.CreateFromCertFile(Certificate))
using (X509Certificate certTwo = X509Certificate.CreateFromCertFile(OtherCertificate))
{
bool result = certOne.Equals(certTwo);
Console.WriteLine(result);
}
}
}
晚了,但是...
請注意,X509 證書本質上是身份(專有名稱,證書所有者的“名稱”)和公鑰之間的綁定,由第三方(稱為證書頒發機構或加利福尼亞州)。
X509 證書是公開的,可以克隆、復制等。單獨的證書不足以驗證其所有者的身份。
身份驗證方案通常必須確保所有者擁有與證書中的公鑰關聯的私鑰,通常是通過執行私鑰操作,如簽署質詢(隨機數或隨機位序列)。 然后接收方驗證操作是使用正確的私鑰執行的(使用證書中的公鑰)。 只有當兩個密鑰來自同一對時,驗證才會成功(這是公鑰密碼學的本質)。
此外,接收方必須驗證證書:查看頒發者和所有者身份,檢查頒發者是否是經過批准的 CA,證書是否適用於預期用途(有效期、策略和密鑰使用),證書是否適用通過使用 CA 證書中的公鑰(直接受信任或由受信任的更高級別 CA 簽名)中的公鑰來驗證簽名是有效的,即證書仍然有效(證書過期,沒有什么是永恆的)。 並且該證書未被頒發它的 CA 吊銷。
@Rattle 指出的一件重要事情是,為了比較證書(例如,將代碼簽名者的證書與一組已批准的證書進行比較時),您不應使用X509Certificate.Equals() 方法。 而是比較指紋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.