Projekt

Allgemein

Profil

Aktionen

Bug #295

offen

Falsche Meldung "Zertifikat-Besitzer passt nicht zum Hostnamen"

Von mlenk vor mehr als 2 Jahren hinzugefügt. Vor mehr als 2 Jahren aktualisiert.

Status:
Resolved
Priorität:
High
Kategorie:
Gwenhywfar
Beginn:
16.04.2023
Abgabedatum:
Betriebssystem:
Linux
AqBanking-Version:
6.2.10
Anwendung:
aqbanking-cli
Version der Anwendung:

Beschreibung

Hallo Martin,

Seit ein paar Tagen funktioniert die Kommunikation mit den Servern z.B. der GLS Bank nicht mehr. Es kommt die Meldung "Zertifikat-Besitzer passt nicht zum Hostnamen". Konfiguriert ist schon sehr lange die URL https://hbci-pintan.gad.de/cgi-bin/hbciservlet, d.h. es wird erwartet, dass das Zertifikat für den Hostnamen hbci-pintan.gad.de gültig ist.

Schaut man sich das vom Server vorgelegte Zertifikat näher an, ist leider festzustellen, dass dieses tatsächlich (auch) für hbci-pintan.gad.de gültig ist. In der Zertifikatserweiterung SubjectAltName (SAN) wird hbci-pintan.gad.de korrekt aufgeführt.

Zitat von https://en.wikipedia.org/wiki/Subject_Alternative_Name

RFC 2818 (May 2000) specifies Subject Alternative Names as the preferred method of adding DNS names to certificates, deprecating the previous method of putting DNS names in the commonName field.[3] Google Chrome version 58 (March 2017) removed support for checking the commonName field at all, instead only looking at the SANs.

Wenn das Zertifikat also gültig ist aber von AqBanking nicht als korrekt akzeptiert wird, liegt hier wohl ein Bug vor.

Ich habe mich gleich im Code auf die Suche gemacht. Anscheinend ist die inkorrekte Prüfung in src/sio/syncio_tls.c an dieser Stelle:

1041       rv=gnutls_x509_crt_get_dn_by_oid(cert, GNUTLS_OID_X520_COMMON_NAME, 0, 0, buffer1, &size);
1042       if (rv==0) {
1043         GWEN_SslCertDescr_SetCommonName(certDescr, buffer1);
1044         if (xio->hostName && strcasecmp(xio->hostName, buffer1)!=0) {
1045           DBG_INFO(GWEN_LOGDOMAIN, "Owner of certificate does not match hostname");
1046           errFlags|=GWEN_SSL_CERT_FLAGS_BAD_HOSTNAME;
1047         }

Hier wird offenbar nur der Common Name aus dem Zertifikat geprüft, aber nicht die "Subject Alt Name"-Erweiterung.

Gibt es einen Grund, warum in Gwenhywfar die Prüfung von Hand implementiert hat, obwohl GnuTLS die Verifikation des Hostnames (und vieler anderer Parameter) schon von Haus aus macht (API-Funktion gnutls_session_set_verify_cert)?

Aktionen #1

Von mlenk vor mehr als 2 Jahren aktualisiert

Sieht so aus als sei die Hostname-Validierung des Zertifikats doppelt implementiert (gleiche Datei):

 975         DBG_INFO(GWEN_LOGDOMAIN, "Checking hostname [%s]", xio->hostName);
 976         if (!gnutls_x509_crt_check_hostname(cert, xio->hostName)) {
 977           DBG_WARN(GWEN_LOGDOMAIN,
 978                    "Certificate was not issued for this host");
 979           GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning,
 980                                I18N("Certificate was not issued for this host"));
 981           errFlags|=GWEN_SSL_CERT_FLAGS_BAD_HOSTNAME;
 982         }

Diese Implementierung sieht vollkommen ausreichend aus.

Aktionen #2

Von mlenk vor mehr als 2 Jahren aktualisiert

Wenn man die Zeilen 1044 bis 1047 löscht, ist das Problem behoben.
Ein nicht zum Hostnamen passendes Zertifikat wird dann trotzdem korrekterweise als potentielles Problem angezeigt.

Ich lösche diese Zeilen mal im Git.

Aktionen #4

Von mlenk vor mehr als 2 Jahren aktualisiert

Nur der Vollständigkeit halber, ich habe diesen Bug auch im Debian-Bugtracker erfasst
https://bugs.debian.org/1034577

Aktionen

Auch abrufbar als: Atom PDF