Holger Stehle

Softwareentwicklung und -architektur

« Zertifikat einer Adresse ermitteln

Manchmal möchte man gerne Zertifikate von Webseiten automatisiert abrufen. Im Rahmen eines Monitorings bietet es sich beispielsweise an, die Gültigkeitsdauer zu überwachen. Dazu eine beispielhafte Implementierung:

public static X509Certificate2 GetCertificate(string hostName, int port = 443) {
    using(TcpClient client = new(hostName, port)) {
        using(SslStream stream = new(client.GetStream())) {
            stream.AuthenticateAsClient(hostName);

            return new X509Certificate2(stream.RemoteCertificate);
        }
    }
}

Die Implementierung ist dabei – wie üblich – auf das Wesentliche beschränkt; es findet keine umfassende Problembehandlung statt. Sofern die Methode in größerem Kontext zum Einsatz kommen soll, empfiehlt sich auf jeden Fall ein Blick auf die beteiligten Klassen TcpClient, SslStream und X509Certificate2 im MSDN.

Nun stehen uns diverse Informationen zur Verfügung; einige Beispiele zur Ausgabe auf der Konsole:

X509Certificate2 certificate = GetCertificate("coders-online.net");

Console.WriteLine(certificate.Subject);    // "CN=coders-online.net"

Console.WriteLine(certificate.NotBefore);  // 30.04.2017 08:01:00
Console.WriteLine(certificate.NotAfter);   // 29.07.2017 08:01:00

Im Besonderen sei abschließend noch auf RemoteCertificateValidationCallback hingewiesen, mit welchem sich u. a. das Verhalten bei Zertifizierungsfehlern beeinflussen lässt.