Programmierung

Überprüfung von SSL-Zertifikaten

Einkäufe oder Bankgeschäfte über das Internet abzuwickeln gehören zum Alltag. Dabei werden sensible Daten wie zum Beispiel die Kreditkartennnumer oder Kontodaten übertragen. Daher ist es wichtig, dass diese Daten abhörsicher über das Netz übertragen werden.

Für die Verschlüsselung der Daten hat sich das Verschlüsselungsprotokoll SSL (Secure Sockets Layer) und dessen Nachfolger TLS (Transport Layer Security) als Standard etabliert. Die SSL-Verschlüsselung wird hauptsächlich mit dem Übertragungsporotokoll HTTPS eingesetzt. Grundsätzlich aber lässt sich jede Socket-Verbindung über SSL/TLS absichern. Bei der Kommunikation über HTTPS kann zusätzlich zur Verschlüsselung eine Authentifizierung durchgeführt werden. Die Authentifizierung hat die Aufgabe die Identität des Betreibers des Webservers zu überprüfen, um sich beispielsweise vor Phishing-Versuchen zu schützen. Dazu wird auf dem Webserver ein von einer Zertifizierungsstelle (CA) ausgestelltes SSL-Zertifikat installiert. Ein SSL-Zertifikat enthält unter anderem Informationen zur Identität der Website sowie Gültigkeitsdauer des Zertifikats. Beim Aufruf einer Internertseite über einen Browser wird die Überprüpfung des Zertifikats durch diesen vorgenommen.

Auch mit CONZEPT 16 ist es möglich eine verschüsselte Verbindung unter Verwendung von SSL/TLS aufzubauen. Dazu wird bei der Funktion SckConnect() angegeben, welche Protokoll-Version akzeptiert werden soll. Unterstützt wird SSL in den Versionen 2 und 3 sowie TLS Version 1.x.

Beispiel:

// Verschlüsselte Verbindung über SSLv3 oder TLS
SckConnect(tHost,tPort,_SckSSLv3 | _SckTLSv1)

Eine Gültigkeitsüberprüfung des SSL-Zertifikats lässt sich ebenso realisieren. Über die Angabe der Option _SckOptVerify bei der Funktion SckConnect() wird eine Validierung vorgenommen. Ist das Zertifikat nicht gültig, gibt die Funktion das Resultat _ErrSckTlsCertificateVerify zurück. Über die Funktion ErrMapText() lässt sich die genaue Fehlerursache ermitteln.

Bei der Überprüfung wird ermittelt, ob das Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle ausgestellt ist und ob das Zertifikat noch gültig ist. Je nach Anwendung kann es wichtig sein zu erfahren, ob das Zertifikat auch auf die Domain ausgestellt ist, mit der man sich aktuell verbunden hat. Die zusätzliche Abfrage des Eintrags Common Name (CN) wird über die Funktion SckInfo() mit der Option _SckCertificateCN realisiert.

Beispiel:

try
{
  // Überprüfung SSL-Zertifikat
  tSck # SckConnect(tHost,tPort,_SckSSLv3 | _SckTLSv1 |
                                _SckOptVerify);
   // Common Name ermitteln
  if (!(tHost =* tSck->SckInfo(_SckCertificateCN)))
    ErrSet(...);
  ...
  ...
}

switch (ErrGet())
{
  // Fehlertext ermitteln
  case _ErrSckTlsCertificateVerify :
  tErrTxt # ErrMapText(_Sys->spCertificateError,'EN',_ErrMapX509)
  ...
  ...
}

Voraussetzung für eine erfolgreiche Prüfung von Zertifikaten ist eine Sammlung von Stammzertifikaten vertrauenswürdiger Organisationen. Diese Sammlung wird von der CONZEPT 16-Installationsroutine als Datei ca-bundle.crt im Datenverzeichnis von CONZEPT 16 zur Verfügung gestellt.

Keine Kommentare

Kommentar abgeben