« 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.