Einzelnen Beitrag anzeigen

TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#1

überprüfen von digitalen Signaturen und Zertifikaten

  Alt 16. Jul 2007, 16:33
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);
    }
}
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat