簡體   English   中英

如何手動信任應用程序中嵌入的自簽名證書?

[英]How do I manually trust a self-signed certificate embedded in my application?

我在這里尋找一些指導。 我將自簽名SSL證書嵌入用C#編寫的簡單應用程序中。 我正在從ExecutingAssembly流中讀取字節形式的證書,然后將其添加到當前用戶的Store.Root中。

下一步是驗證整個CA鏈,並使用一個布爾值作為VerifcationCallback委托的一部分。

問題是我認為向操作系統添加證書是不正確的。 相反,我希望手動信任嵌入式證書,而不是將證書添加到計算機的受信任證書中。

應用程序嵌入式證書與將證書添加到用戶計算機的證書中。

關於如何在C#應用程序中手動信任嵌入式證書的任何想法?

更新:Per mike z我已經更新了代碼,並遇到了以下問題:Splunk證書的指紋和X509Certificate2對象的指紋不匹配,不知道為什么。

public static bool CertificateVerificationCallback(System.Object o, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)

    {
        Cert = "~./Resources/splunk-VirtualBox.crt";
        Cert1 = X509Certificate.CreateFromCertFile(Cert);

        byte[] b = Cert1.GetRawCertData();

        X509Certificate2 Cert2 = new X509Certificate2();

        Cert2.Import(b);
        if (sslPolicyErrors == SslPolicyErrors.None)
        {
            return true;
        }
        else if (certificate is X509Certificate2 cert2)
        {
            c1 = cert2.Thumbprint;
            c2 = Cert2.Thumbprint;

            return cert2.Thumbprint == Cert2.Thumbprint;

        }

        return false;
    }
public static void Main(string[] args)
    {
        ServicePointManager.ServerCertificateValidationCallback += CertificateVerificationCallback;
        Console.WriteLine(string.Format("cert2 {0}, Cert2{1}", c1, c2));
    }

您可以使用ServicePointManager.ServerCertificateValidationCallback編程方式接受證書:

ServicePointManager.ServerCertificateValidationCallback += (object o, X509Certificate cert, X509Chain chain, SslPolicyErrors sslPolicyErrors) =>
{
    if (sslPolicyErrors == SslPolicyErrors.None)
    {
        return true;
    }
    else if (cert is X509Certificate2 cert2)
    {
        return cert2.Thumbprint == CertThumbprint;
    }

    return false;
};

關鍵是.NET Framework已經運行了證書檢查,並且如果返回SslPolicyErrors.None,則該證書有效,否則請檢查它是否具有證書的指紋。 您顯然可以檢查更多信息,但這通常是檢查特定證書的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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