Mit irssi über SSL zu Freenode verbinden

Vor kurzem stand ich vor dem Problem, mich zum neuen IRC-Channel des Offenen Bibel Projektes verbinden zu wollen. Diese sind unter #offenebibel auf Freenode.net registriert.

Dabei muss die Verbindung über SSL („sichere Verbindung“) erfolgen. Nach einigem Suchen stieß ich immer wieder auf das SASL-Plugin für meinen IRC-Client irssi. Wenig später fand ich diese englische Erklärung.

Vorbereitung

Installiere die folgenden Perl-Module:

  • Crypt::OpenSSL::Bignum (z.B. dev-perl/Crypt-OpenSSL-Bignum auf Sabayon Linux)
  • Crypt::DH, Crypt::Blowfish (z.B. dev-perl/Crypt-Blowfish auf Sabayon Linux)
  • Math::BigInt (z.B. perl-core/Math-BigInt auf Sabayon Linux)
  • MIME::Base64 (z.B. perl-core/MIME-Base64 auf Sabayon Linux)

Richte das Netzwerk Freenode auf Irssi ein:

/network add freenode

Ubuntu-Leser mögen eine englische Erklärung lesen.

Einrichtung

Ich mag daher die Anleitung in’s Deutsche übersetzen und erläutern. Freenode lauscht auf den Ports 6697, 7000 und 7070 auf SSL-Verbindungen von Clients. In meinem Fall bin ich auf den mittleren angewiesen. Da für Irssi ein Port einfach nur ein Port ist, ist das Aufsetzen einfach:

/server add -auto -ssl -network freenode irc.freenode.net 7000

Fertisch.

Jetzt möchte ich gerne aber das SSL-Zertifikat auch auf Gültigkeit überprüfen. Dazu brauch ich das CA-Zertifkat der ausschreibenden Stelle, hier Gandi.net. Dummerweise kann irssi das binäre DER-Format nicht verarbeiten. Es lässt sich aber über OpenSSL in das PEM-Format konvertieren:

# cd /usr/share/ca-certificates
# mkdir gandi.net
# cd gandi.net
# wget http://crt.gandi.net/GandiStandardSSLCA.crt
# openssl x509 -inform der -outform pem  GandiStandardSSLCA.pem
# ln -s /usr/share/ca-certificates/gandi.net/GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem

Okay, das mag jetzt ein wenig kryptisch daherkommen, daher hier die Erläuterung:

  1. Wechsle in das Verzeichnis /usr/share/ca-certificates
  2. Lege einen neuen Ordner gandi.net an.
  3. Wechsle in diesen
  4. Lade über wget das Zertifikat herunter
  5. Konvertiere mit OpenSSL gemäß des X.509-Standards die über < eingelesene Datei im der-Format in das pem-Format und schreibe das Ergebnis über > in die Datei GandiStandardSSLCA.pem
  6. Erzeuge eine symbolische Verknüpfung („SymLink“) der .pem-Datei nach /etc/ssl/certs/GandiStandardSSLCA.pem

Jetzt, nach dem das CA-Zertifikat im Standardverzeichnis installiert wurde, kann der Server-Aufruf in irssi angepasst werden:

/server add -auto -ssl -ssl_cacert /etc/ssl/certs/GandiStandardSSLCA.pem -network freenode irc.freenode.net 7000

Leider kann irssi das Zertifikat immer noch nicht verifizieren. Das liegt an einem Bug in OpenSSL bzw. irssi (siehe englischer Blogbeitrag). Aber es gibt einen Workaround:

/server add -auto -ssl -ssl_verify -ssl_capath /etc/ssl/certs -network freenode irc.freenode.net 7000

Das -ssl_capath (CA-Path) hier und das -ssl_cacert von oben sind der Trick. Nach dem Anmelden solltest du ein +Z zugewiesen bekommen, das dir eine sichere Verbindung bescheinigt.

Authentifizierung mit SASL

Kommen wir zum eigentlichen Anliegen: SASL. Es ist nicht zwingend notwendig, da man sich auch mit Passwort bei NickServ anmelden kann, erlaubt aber zumindest eine Verschlüsselung eben dieses vor der Übertragung. Und das ist in Zeiten von PRISM ja auch schon etwas, nicht? ,)

irssi kommt nicht von Haus aus mit SASL-Unterstützung, so dass wir dieses kleine Perl-Skript dafür benutzen:

$ cd ~/.irssi/scripts
$ wget http://freenode.net/sasl/cap_sasl.pl
$ cd autorun
$ ln -s ../cap_sasl.pl cap_sasl.pl

Eigentlich selbsterklärend. Im letzten Schritt legen wir eine symbolische Verknüpfung an, um das Script automatisch beim Starten des Client auszuführen.

Jetzt müssen wir das Skript nur noch in irssi laden und die SASL-Authentifizierung aufsetzen. Dabei muss der ursprüngliche Nickname (hier „erst-nickname“) gegen NickServ benutzt werden und nicht etwa irgendein Alias. Daneben werden wir das bisherige gleich einmal abspeichern 😉

/RUN cap_sasl.pl
/sasl set freenode erst-nickname password DH-BLOWFISH
/sasl save
/save

DH-BLOWFISH ist nicht unbedingt nötig, PLAIN würde auch tun. Beim nächsten Verbinden sollte diese Zeile im Output auftauchen:

SASL authentication successful

Anmerkung: Die Authentifizierung über /msg gegenüber NickServ kann auf diesem Server jetzt wegfallen. Sie kann aber auch bestehen bleiben. Stört ja nicht.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s