Abstract: Seit dem letzten Perl-Workshop (2008) sind Änderungen an
IO::Socket::SSL
vorgenommen worden, um die Verifikation der Server-Zertifikate zu
verbessern. Die bisherige Implementation gab den auf IO::Socket::SSL
aufbauenden Modulen keine gute Möglichkeit die Zertifikate
standardkonform
zu verifizieren. Das ließ Raum für Man-In-The-Middle Attacken, d.h
die
Verschlüsselung war eher wertlos.
In dem Vortrag geht es darum, was IO::Socket::SSL in dieser Hinsicht
besser
macht als früher:
- Vorher: höchstens Check, ob das Zertifikat von einer bekannten CA
unterschrieben war. Keine eigene Verifikation des Hostnamens. Die
Applikationen hatten nur Zugriff auf den commonName des Zertifikats.
- Jetzt:
- Check nicht nur gegen den commonName, sondern auch gegen
alternative
Namen (ohne das geht ebay.de nicht) und Wildcards
- Check des Zertifikats auf standardkonforme Weise.
Da www, ldap, smtp, ... jeweils unterschiedliche Anforderungen an
die
Verifikation haben gibt es vordefinierte Schemas, die man nutzen
kann,
aber auch die Möglichkeit sich schnell ein eigenes Schema
zusammenzustellen
- Check von internationale Domainnamen
- automatischer Check bereits beim Connect ist einfach möglich
Der Vortrag geht darauf ein, wie man diese Features in eigenen Modulen
nutzt
und geht an Beispielen darauf ein, wie man auf CPAN vorhandene Module
so
anpasst, das sie die Zertifikate strikter verifizieren.
Übrigens:
Aus
http://www.ruby-lang.org/de/news/2007/10/04/net-https-sicherheitslcke/
kann man entnehmen, das Ruby das Zertifikat falsch checkt (nur
commonName)
und aus http://bugs.python.org/issue1589 das Python in stdlib kein
Problem
sieht, sowie M2Crypto (
http://svn.osafoundation.org/m2crypto/trunk/M2Crypto/SSL/Checker.py) es
fehlerhaft generalisiert (d.h als wenn ales wie bei https laufen
würde).