128 bit SSL-Verbindung mit Exportbrowsern

Um mit einem Browser, der den amerikanischen Exportbeschränkungen für Kryptografie unterliegt, trotzdem sichere SSL-Verbindungen aufbauen zu können, gibt es eine offizielle Methode, die jedoch ein Hintertürchen für eine andere Lösung offenhält.
Dabei wird vorgegangen, wie es in der Datei README.GlobalID des mod_ssl-Package beschrieben ist. mod_ssl ermöglicht es, einen Apache-Web-Server so zu modifizieren, das er als SSL-Webserver fungieren kann. Da das mod_ssl-Package europäischer Herkunft ist, unterliegt es nicht den amerikanischen Exportbeschränkungen, dass heißt der Webserver ist voll 128 bit SSL tauglich.

Das große Problem sind die Browser. Da die beiden meistverwendeten Browser Netscape und Internet-Explorer beide amerikanischer Herkunft sind, unterliegen sie den Exportbeschränkungen und dürfen beide nur SSL-Verschlüsselung mit 128 bit, wovon nur 40 bit geheim sind, anbieten. Mit einem Patch-Programm (Fortify) ist es zwar möglich, zumindest die Netscape-Export-Browser, Version 3 und 4 sozusagen wieder zu Nicht-Export-Browsern zu machen, jedoch ist dies keine benutzerfreundliche Variante, da ein Benutzer, der auf mehreren Rechnern arbeitet, alle Browser patchen müsste. Da vor allem Banken und andere Firmen der e-Commerce-Branche diese Lösung nicht akzeptabel fanden, drängten sie auf eine Lockerung des Exportverbotes. Schließlich kam es zur Einführung der Global-Server-ID.

Die Global-Server-ID ist ein spezielles Zertifizierungs-Instituts-Zertifikat (CA-Zertifikat) der Firma VeriSign, mit dem sie für derzeit $695,00 die Web-Server-Zertifikate von Banken und Firmen der e-Commerce-Branche zertifiziert, damit diese ihren Kunden sichere Geschäfte anbieten können. Ein solches Zertifikat ist ein normales X.509v3-CA-Zertifikat, mit zusätzlichen Feldern. Wichtig ist dabei das extKeyUsage-Feld. Erkennt ein Browser einen so zertifizierten SSL-Server, so weiß er, dass er jetzt eine 128-bit-SSL-Verschlüsselung aufbauen darf.

Im Einzelnen funktioniert das folgendermaßen:
Der Exportbrowser baut mit dem SSL-Server eine SSL-Verbindung nach den Exportbeschränkungen auf. Bei der Antwort des Servers liefert dieser sein Global-Server-ID-Zertifikat mit. Der Browser erkennt das Zertifikat und baut erneut eine SSL-Verbindung zum Server auf, diesmal aber mit 128 bit.

Der Microsoft Internet-Explorer und der Netscape Communicator haben beide schon eine Liste bekannter CA's mitgeliefert. Bei Microsoft heißt obiger Schritt SERVER GATED CRYPTOGRAPHY (SGC), bei Netscape INTERNATIONAL STEP-UP. Schaut man sich beim Communicator die mitgelieferten CA-Zertifikate an, so stellt man auf den ersten Blick keine Unterschiede fest. Unter Sicherheit - Zertifikate - Unterzeichner - Bearbeiten kann man das VeriSign-Zertifikat mit anderen Zertifikaten vergleichen und findet keine verschiedenen Merkmale. Nur wenn man sich Datenbank des Communicators näher anschaut, in der die Zertifikate gespeichert sind (cert7.db, im DB/1.85-Format), stellt man fest, dass dieses spezielle Zertifikat in einigen internen Feldern andere Werte gesetzt hat, als bei anderen CA's, was jedoch in der graphischen Darstellung nicht erscheint. Beim Internet-Explorer mag dies ähnlich sein, hierzu sind mir aber keine genauen Angaben bekannt.

Der Communicator bietet nun auch die Möglichkeit, weitere CA's zu importieren, was im folgenden ausgenutzt werden soll. Wenn man davon ausgeht, dass man oben genanntes Zertifikat der Firma VeriSign nicht bekommt, oder es sich nicht leisten kann, gibt es noch eine etwas umständlichere Lösung, sich obige Gegebenheit vor Augen zu führen. Als erstes benötigt man einen Webserver, der 128-bit-SSL-Verschlüsselung unterstüzt. Wenn man auf diesen Webserver nun mit einem Standartbrowser zugreift, so erhält man nur eine Verschlüsselung nach Exportbeschränkungen. Man sieht das unter Sicherheit - Seiteninformationen. Um eine 128-bit-SSL-Verbindung zu diesem Server aufbauen zu können, muss man nur das Zertifikat der CA, die den Server zertifiziert hat importieren und bei diesem in der Datenbank die internen Bits umsetzen, schon kann man eine sichere 128-bit-Verbindung mit dem Server aufbauen. Sicherlich ist diese Variante nicht weniger umständlich, als ein Patch-Programm und muss auch bei jedem Browser separat ausgeführt werden, aber sie ist anschaulicher.

Hier ist eine kleine Demo, die jeder gerne ausprobieren kann:

  1. SSL-Server der Proffesur VSB anschauen. Dieser Server ist selbst zertifiziert mit einem CA-Zertifikat nach X.509v3 und zusätzlichem extKeyUsage-Feld. Man erhält nur eine Verschlüsselung nach Exportbeschränkung.
  2. Zerfifikat der VSB CA laden und unter diesem Namen bei Netscape eintragen.
  3. Jetzt muss die Datei cert7.db von Netscape modifiziert werden. Sie liegt etweder im Verzeichnis <~user>/.netscape oder unter Programme\Netscape\Users\<user>\
    Hierfür steht ein kleines C-Programm zur Verfügung, das man unter Linux mit
    gcc gid-tagcert.c -o tagcacert -I /usr/include -ldb
    kompilieren kann. Das kompilierte Programm ruft man dann mit
    tagcacert cert7.db 'VSB CA'
    auf. Wem das zu kompliziert ist, der möge mir seine Datenbank als Attachment zumailen (cert7.db@gmx.net). Sicherheitshalber sollte man seine Original-Datei vor der Veränderung irgendwo sichern!
  4. Nun schaut man sich nochmal den SSL-Server der Proffesur VSB an. Sollte alles geklappt haben, dann müsste man nun eine 128-bit-Verschlüsselung haben, ohne VeriSign-Zertifikat.
Quelle: README.GlobalID aus mod_ssl-Package