簡體   English   中英

如何比較兩個 X509Certificate2 c#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM