Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Sonstiges (https://www.delphipraxis.net/45-library-sonstiges/)
-   -   C# überprüfen von digitalen Signaturen und Zertifikaten (https://www.delphipraxis.net/95958-ueberpruefen-von-digitalen-signaturen-und-zertifikaten.html)

TurboMartin 16. Jul 2007 16:33


überprüfen von digitalen Signaturen und Zertifikaten
 
Zu diesem Thema, dem überprüfen von digitalen Signaturen und deren Zertifikaten, gibt es zwei Möglichkeiten.
Die erste ist sehr kurz und einfach gehalten. Dadurch hat man kaum/keine Möglichkeit zur veränderung der Parameter, wie in der Zweiten Funktion.
Code:
private static void CheckData(byte[] data)
{
    try
    {
        SignedCms signedMessage = new SignedCms();
        //Hier werden die signierten Daten dekordiert und in SignedMessage geschrieben
        signedMessage.Decode(data);

        //Hier werden die Signatur _UND_ das Zertifikat überprüft
        signedMessage.CheckSignature(false);
        Console.WriteLine("Daten und Zertifikat erfolgreich überprüft");
    }
    catch (CryptographicException)
    {
        Console.WriteLine(
          "Fehler beim Überprüfen der Daten oder des Zertifikats");
    }
}

Hier wird zuerst nur die Signatur überprüft. Daraufhin werden mit Hilfe des X509Chain Objektes die Überprüfungs-Parameter festgelegt.

Code:
private static void CheckData2(byte[] data)
{
    try
    {
        SignedCms signedMessage = new SignedCms();

        signedMessage.Decode(data);                                         //Hier werden die signierten Daten dekordiert und in SignedMessage geschrieben

        signedMessage.CheckSignature(true);                                 // überprüfen der Signatur

        //Hier werden nun die Zertifikat-Überprüfungs-Parameter gesetzt
        X509Chain chain = new X509Chain();
        chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
        chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
        chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
        chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 30);

        //Und hier endlich die Überprüfen des Zertifikats
        chain.Build(signedMessage.SignerInfos[0].Certificate);
        foreach (X509ChainStatus status in chain.ChainStatus)
        {
            Console.WriteLine(status.Status);                               //Status der Überprüfung ausgeben
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
}


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz