OpenSSL auf Debian etch unsicher

OpenSSL auf Debian etch erzeugt vorhersagbare Schlüssel. Damit können alle seit September 2006 erzeugten Schlüsselpaare als kompromittiert angesehen werden. Betroffen sind Schlüssel für SSH, OpenVPN, DNSSEC, X.509 Zertifikate und Sitzungsschlüssel, die in SSL/TLS Verbindungen verwendet werden.
Besonders prickelnd ist, dass man möglicherweise seinen SSH-Schlüssel auf diversen Maschinen verteilt hat und jetzt erstmal überlegen darf, wo er überall rumgammelt.

Also los! Update einspielen, Keys neu erzeugen und verteilen! Spread the word!

Xinerama unter Linux

Seit einem Jahr stapeln sich hinter meinem Rücken die ausgedienten Monitore. Natürlich verschmäht man die, weil der LCD-Bildschirm um Welten schärfer ist. Bis der Scheff jedoch einen richtig großes Display spendiert, muss man mühevoll Fenster hin- und her schubsen oder einen wundersamen Fenstermanager bändigen um den Überblick zu behalten.
Nach einem Gespräch mit dem hochgeschätzten Kollegen ist es mir dann endlich wie Schuppen von den Augen gefallen. Xinerama unter Linux Auf das Naheliegende kommt man immer zum Schluss: der Rechner hat zwei Monitoranschlüsse, warum schließe ich Dussel nicht einfach einen Zweitmonitor an?
Die Umsetzung war dann mehr oder weniger Trivial, im Ubuntu Forum gibt es ein exzellentes Howto, wie man Xinerama einrichtet.
Der komplizierte Teil ist jetzt zu entscheiden, welches Eclipse-Fenster wo hin kommt und ob man nicht noch mit einer brachliegenden VGA-Karte einen dritten Monitor anschließen könnte…

Internet Explorer 7 unter Linux

Das schon an anderer Stelle hochgelobte Script IEs4Linux kann in der aktuellen Beta-Version sogar den Internet Explorer 7 unter Linux installieren. Zwar ist die Lösung etwas schmutzig, weil eigentlich einem IE 6 die Rendering Engine des IE 7 untergeschoben wird, es funktioniert aber sehr zufriedenstellend und man kann endlich alle Versionen des Internet Explorers nebeneinander benutzen.

Internet Explorer 7 unter Linux

Safari fehlt leider noch in meiner Sammlung. Falls jemand einen Installer auf der Platte liegen hat, der älter ist als Version 3.522.15.5, würde ich mich darüber sehr freuen. Die letzte Version der Beta zickt nämlich wieder unter Wine herum 🙁

SSH Fingerprint überprüfen

Wenn man den Fingerprint eines SSH Public Keys überprüfen will, muss man natürlich wissen, wie der Fingerprint lautet. Mit ssh-keygen findet man schnell den Fingerprint des Schlüssels der eigenen Maschine heraus:

$ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
2048 93:f0:3b:3a:c4:0b:ee:f6:b2:47:e0:57:d9:64:0b:55 /etc/ssh/ssh_host_rsa_key.pub

Man muss nur einen sicheren, verifizierten Weg zum Server finden (z.B. über eine Maschine, die den korrekten Fingerprint gecached hat) und schon kann man sich auf diesem Weg auch den Fingerprint des Servers anzeigen lassen.

Sicher bloggen in feindlicher Umgebung

Es kam gerade die Frage auf, wie man auf chaoshaltigen Veranstaltungen sicher bloggt. Die beste Idee ist natürlich ein VPN. Wenn man kein VPN hat, muss man sich mit der Materie auseinander setzen. Punk 😉

Wenn man diese Option jedoch nicht zur Verfügung hat, kann man sich zumindest einen SSH-Tunnel nach draußen bohren.

Ein erster Wurf würde so aussehen:

ssh your.trusted.server.outside.com -L 8080:blog.mellenthin.de:80

Den Browser könnte man jetzt nach http://localhost:8080 lenken. Leider verwendet WordPress massiv absolute URLs (die mit http:// anfangen) und umgeht damit unseren Tunnel. Wir müssen also dafür sorgen, dass alle http-Anfragen an http://blog.mellenthin.de/ durch diesen Tunnel gehen.

Das klappt mit einem ziemlich schmutzigen Trick: in /etc/hosts wird einfach folgender Eintrag hinzugefügt:

127.0.0.1       blog.mellenthin.de

Jetzt wird blog.mellenthin.de mit localhost aufgelöst und alle Anfragen gehen an den eigenen Rechner. Der lokale Port des SSH-Tunnels muss noch von 8080 in 80 geändert werden, weil globale URLs den Suffix :8080 nicht enthalten. Das SSH-Kommando sieht dann so aus:

sudo ssh you@your.trusted.server.outside.com -L 80:blog.mellenthin.de:80

Weil man einen lokalen Port 80 öffnen möchte, muss man sudo benutzen. Das führt dazu, dass ssh eine Verbindung als root@your.trusted.server.outside.com aufbaut, deswegen muss man seinen Useraccount auf dem vertrauenswürdigen Server mit you@ vor den Servernamen setzen.

Sobald man via SSH eingeloggt ist, steht der Tunnel. Aufgrund des Eintrags in /etc/hosts klappt eine Verbindung zum Webserver auch nur, wenn der Tunnel steht. Wenn man der Sache nicht traut, kann man mit traceroute und die Route überprüfen:

melle@euphoria:~$ tracepath blog.mellenthin.de
 1:  localhost (127.0.0.1)                                  0.173ms pmtu 16436
 1:  localhost (127.0.0.1)                                  0.056ms reached
     Resume: pmtu 16436 hops 1 back 1

Obacht: der Webbrowser könnte die IPs cachen, also den Browser beenden und neu starten, bevor man bloggt. Außerdem kann das Bash-Timeout zuschlagen (wenn konfiguriert), man sollte in diesem Fall die Umgebungsvariable TMOUT setzen oder eine Anwendung starten (z.B. top), die ein Timeout der Shell verhindert.

Update: der Hinweis von Michael ist natürlich richtig und bringt wesentlich mehr Komfort. Danke für den Hinweis 🙂 Also wenn man auf dem SSH-Server einen Proxy installieren kann, genügt schon ein simples

ssh your.trusted.server.outside.com -L 3128:localhost:3128

Um sich mit dem Squid seiner Wahl zu verbinden. Am Browser wird als Proxy localhost:3128 eingestellt und fertig ist die Laube. Man sollte aus dem Feld „No proxy for“ alle Einträge löschen.

Sie haben Spam

Je länger ich mich mit dem Thema e-Mail beschäftige, desto übler wird mir. Die Prohphezeihungen, dass dieses Medium dank Spam tot ist, halte ich für untertrieben.

Das Problem ist, dass es keinen gleichwertigen Ersatz gibt, so lange alle noch denken „ach es geht schon, 90% Spamquote sind nicht schlimm, das meiste wird ja ausgefiltert…„.

Leider ist überhaupt nicht mehr sicher, ob eine Mail zugestellt wird. Den Satz „Oh, die Mail ist in meinem Spam-Ordner gelandet.“ kennt jeder. Instant Messaging ist auch kein gleichwertiger Ersatz.

Keine 24 Stunden zeigt der MX-Record für eine meiner Domains auf den eigenen Server und schon sehe ich das ganze Elend in den Logfiles. In der Mailqueue ist auch gleich folgendes hängen geblieben:

# mailq 
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
3F9CB330079    24400 Mon Jul 30 00:28:37  MAILER-DAEMON
                         (connect to 127.0.0.1[127.0.0.1]: Connection refused)
                                         vcsspa.com@pasaportemexico.com

Huh?

# dig -t MX pasaportemexico.com
(...)
;; ANSWER SECTION:
pasaportemexico.com.    3600    IN      MX      10 127.0.0.1.

Alles klar? Der MX-Record für diese Domain zeigt auf localhost 🙁 Postfix beschwert sich auch darüber:

warning: numeric domain name in resource data of MX record for pasaportemexico.com: 127.0.0.1

Klar kann man die Mail einfach aus der Queue schmeißen, aber wie man solchen Quatsch für die Zukunft verhindert, schlägt man am besten im Postfix Anti-UCE Cheat Sheet nach.

imapd-ssl: malloc: Input/output error

Falls man sich über merkwürdige Meldungen wie diese

imapd-ssl: malloc: Input/output error

im Syslog wundert, verschaffen folgende Worte Linderung:

/etc/init.d/portmap restart
/etc/init.d/fam restart
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-ldap restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart

Nicht fragen warum, hat mir google ausgespuckt 😉

Niemand will Backup, alle wollen Restore!

Wie versprochen die „rundum glücklich“-Lösung für das Backup. Ein grundlegendes Problem ist das Backup im laufenden Betrieb. Noch während das Backup läuft, verändern laufende Prozesse Dateien. Im Allgemeinen ist die /var-Partition und im Besonderen sind Datenbanken und Mailqueues problematisch. Man kann sich nie sicher sein, ob der Stand im Backup wirklich konsistent ist.

Es gibt verschiedene Ansätze dem Problem Herr zu werden. Eine Datenbank könnte man in ein SQL-File dumpen, der Mailserver könnte kurz angehalten werden um die Mailqueue zu sichern. Das sind jedoch alles nur 99%-Lösungen. Eigentlich müsste man das System für den Zeitpunkt des Backups komplett einfrieren, das Backup durchführen und es danach weiterlaufen lassen.

Snapshots implementieren diese Technik und verhindern so eine Downtime des betroffenen Services. Zunächst in Datenbanken wie z.B. Oracle populär, finden sich Snapshots jetzt auch in Dateisystemen (LVM, Windows Vista Shadow Copies). Der Snapshot selbst ist eine atomare Aktion, die lediglich den Snapshot-Zeitpunkt (t) festhält. Alle nach diesem Zeitpunkt (t+x) geschriebenen Blöcke werden separat gespeichert, so dass nun in aller Ruhe alle Blöcke des Zeitpunkt (t) ins Backup wandern können. Ist das Backup beendet, kann der Snapshot verworfen werden.

„Niemand will Backup, alle wollen Restore!“ weiterlesen

FTP-Backup: Speicherplatz nutzen

Viele Hoster stellen Backup-Speicherplatz via FTP bereit. Ärgerlich ist es, dass man zunächst sein Backup lokal erstellen muss um es dann via FTP auf den Backup-Server zu übertragen. Man muss also den Speicherplatz, den man auf dem FTP-Server nutzen will, auch lokal vorhalten.

Für dieses Problem gibt es zum Glück eine elegante Lösung: curlftpfs bindet via FTP erreichbare Resourcen ins Dateisystem ein.

Zunächst braucht man einen Kernel mit FUSE-Unterstützung. Den bringt Debian etch zum Glück gleich mit. Das Modul fuse muss geladen werden. Wenn das Gerät /dev/fuse existiert, ist alles gut gegangen:

# modprobe fuse && ls -la /dev/fuse

Dann brauchen wir die fuse-utils und curlftpfs:

# sudo aptitude install fuse-utils curlftpfs

Damit wäre der schwierige Teil erledigt 😉 Jetzt kann man einen kleinen Test wagen:

$ mkdir sunet
# curlftpfs ftp://ftp.sunet.se/ sunet/
# cd sunet/
# ls -l
total 0
Dr-xr-xr-x   3 root root        96 Feb 23  2004 bin
dr-xr-xr-x   2 root root        72 Mar  2  2004 dev
dr-xr-xr-x   2 root root        48 Feb 23  2004 etc
dr-xr-xr-x   2 root root       120 Feb 23  2004 lib
-rw-r--r--   1 root root 622187310 Mar 11 06:13 ls-lR
-rw-r--r--   1 root root  76389037 Mar 11 06:15 ls-lR.gz
drwxrwxr-x  37 root root      1272 Feb 27 14:17 pub
dr-xr-xr-x   3 root root        72 Feb 23  2004 usr
# cd ..
# fusermount -u sunet/

Prima, dann kann also der zugewiesene FTP-Space ins Dateisystem eingebunden werden. Der folgende Eintrag in der /etc/fstab erledigt das automatisch zum Systemstart:

curlftpfs#user:password@11.22.33.44 /media/ftp-backup fuse rw,uid=1000,user,auto 0 0

Der einzige Nachteil ist, dass jetzt das FTP-Passwort in /etc/fstab steht. In dem Fall muss man sie mit

# chmod 640 /etc/fstab

schützen. Wir mounten und testen kurz:

# sudo mount /media/ftp-backup
# sudo ls /media/ftp-backup -la
total 4
drwxr-xr-x 1 melle root 1024 Jan  1  1970 .
drwxr-xr-x 4 root  root 4096 Jul 12 22:04 ..
# mount | grep ftp
curlftpfs on /media/ftp-backup type fuse (rw,nosuid,nodev,noexec)

Das Problem wäre gelöst, das Backup-Programm kann jetzt direkt nach /media/ftp-backup scheiben. Wie man vernünftige Backups anfertigt, wird Inhalt des nächsten Artikels in dieser kleinen Serie sein.

Zum nächsten Teil: Niemand will Backup, alle wollen Restore! »
Zum ersten Teil: Debian Etch auf einem Rootserver mit Raid-1 und LVM »

LinuxTag 2007

LinuxTag 2007

Ich habe drei eTickets für den LinuxTag 2007 zu verschenken, d.h. damit kann man die Messe und Konferenz des LinuxTag 2007 in Berlin kostenlos besuchen. Kreative Bewerbungen bitte in die Kommentare. Verlost werden die Tickets Donnerstag früh 😉

Verflixte Wurst

Ich habe gerade so ein nerdiges Problem, das mich wieder einmal voll in die Tischkante beißen lässt. Es dreht sich um eclipse und ant: komischerweise kann ich JAVA_HOME innerhalb eines ant-Scriptes nicht auflösen 🙁

Um das mal zu verdeutlichen. So starte ich eclipse:

#!/bin/sh
export QUARK=Erdbeer
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun-1.5.0.11
/usr/bin/eclipse \
-vm /usr/lib/jvm/java-1.5.0-sun-1.5.0.11/bin/java

So sieht mein ant-Script aus:

<property environment="env" />
<echo>QUARK=${env.QUARK}</echo>
<echo>JAVA_HOME=${env.JAVA_HOME}</echo>

und das ist der Output:

[echo] QUARK=Erdbeer
[echo] JAVA_HOME=${env.JAVA_HOME}

Ich starte ANT von eclipse aus. Egal, was ich mache, JAVA_HOME wird immer ignoriert. Ich bin langsam mit meinem Latein am Ende und für Hinweise sehr dankbar. Ant außerhalb von eclipse zu starten ist leider keine Option.
Ich weiss, dass es eigentlich funktionieren muss, weil ich ${env.JAVA_HOME} genau in einem anderen Projekt verwende. Die Frage ist nur, warum es hier so dermaßen daneben geht.

Backup

Die Geizmarkt-Geschenkgutscheine der letzten Jahre in eine allerwelts-„Backuplösung“ investiert. Jetzt langsam das Gewissen beruhigen, weil die so kostbaren Werke von nun an die Chance auf ein Überleben haben. Nicht, dass ich vorhier nie meine Daten gesichert hätte, aber DVD-RAM ist bei den Mengen einfach ein Witz, was Medienpreis und Schreibgeschwindigkeit angeht.

Auch nett: „Wie formatiere ich eine externe Festplatte?„. Ausgeliefert wird das Teil NTFS-formatiert. Ungünstig, wenn man nur Mac OS X und Linux benutzt und eine gelegentlichte Anstöpselung bei befreundeten Windows-Maschinen angedacht ist.

NTFS schreiben kann man unter Mac OS X und Linux vergessen. HFS+ wäre ein heißer Kandiat, wäre da nicht die „ab und zu mal“ Windows-Connectivität. Also schweren Herzens FAT32 gewählt. Natürlich kann eine Partition mit dem XP-Festplattenmanager maximal 32 GB groß sein. Partition Magic schafft immerhin 190GB – keine Ahnung, welche Grenze dort wieder zuschlägt. Zumindest habe ich jetzt zwei halbwegs gleich große Partitionen, die ich von überall beschreiben kann.

Jetzt heisst es abwarten.

Backup

Die gleiche Menge Musik wartet noch auf das Rettungsboot. Ich denke derweil über eine gute Automatisierungslösung nach, in der rsync eine Rolle spielt.

Lesezeichen für mich selbst

Aus meinem Studium ist mir ein Stück Papier erhalten geblieben, das zur Reliquie wurde. Auf engstem Raum, unter Missachtung sämtlicher Augenkrebsregeln und Layout-NoNos hat es unser heiß geliebter Unix-Prof geschafft ein Unix-Script zusammenzukopieren, das mir heute noch als Nachschlagewerk dient. Den Unterschied zwischen $@, $? und $* kann ich mir einfach nicht merken.
Zum Glück kann ich das heilige und abgegrabbelte Schriftstück nun endlich dem Altpaier zuführen. Google spuckte mir heute Introduction To Bash Shell Scripting aus – eine geniale Bash-Referenz in der alles wichtige steht, was man über die Bash wissen muss.
(Ja, es gibt eine man-Page. Schon mal versucht mit der Suchfunktion den Syntax von if nachzuschlangen? Eben!)

Anrufbeantworter-Bingo

Diverse Anrufer beschweren sich derzeit, dass mein Anrufbeantworter nicht funktioniert. Dieses Problem ist nun behoben. Ich habe gleich noch ein paar Lustige Anrufbeantwortersprüche aufgenommen, diese werden zufällig ausgewählt dem Anrufer kredenzt. Und so geht’s:

Zunächst braucht man einen funktionierenden Capi-Treiber. Es gibt von AVM Treiber für SuSE 9.3, die sich aber nicht sofort bauen lassen, wenn man z.B. Debian verwendet:

make -C src
make[1]: Entering directory `/home/melle/tmp/fritz/src'
make -C /lib/modules/2.6.17-2-k7/build SUBDIRS=/home/melle/tmp/fritz/src modules
make[2]: Entering directory `/usr/src/linux-headers-2.6.17-2-k7'
CC [M] /home/melle/tmp/fritz/src/main.o
In file included from /home/melle/tmp/fritz/src/queue.h:27,
from /home/melle/tmp/fritz/src/tables.h:31,
from /home/melle/tmp/fritz/src/driver.h:31,
from /home/melle/tmp/fritz/src/main.c:45:
/home/melle/tmp/fritz/src/tools.h:74: error: expected identifier or '(' before 'typeof'
/home/melle/tmp/fritz/src/tools.h:74: error: expected ')' before '__xchg'
make[3]: *** [/home/melle/tmp/fritz/src/main.o] Fehler 1
make[2]: *** [_module_/home/melle/tmp/fritz/src] Fehler 2
make[2]: Leaving directory `/usr/src/linux-headers-2.6.17-2-k7'
make[1]: *** [fcpci.ko] Fehler 2
make[1]: Leaving directory `/home/melle/tmp/fritz/src'
make: *** [src/fcpci.ko] Fehler 2

Zum Glück haben schon andere freundliche Menschen herausgefunden, dass man ledliglich in src/tools.h eine Inline-Definition entsorgen muss. Einfach diese Zeilen auskommentieren:

static inline unsigned long atomic_xchg (
volatile atomic_t * v,
unsigned value
) {
return __xchg (value, &v->counter, sizeof (unsigned));
} /* atomic_xchg */

Und schon kann das Modul fcpci.ko gebaut und geladen werden. Das sieht gut aus:

fcpci: module license 'Proprietary' taints kernel.
fcpci: AVM FRITZ!Card PCI driver, revision 0.7.2
fcpci: (fcpci built on Jan 27 2007 at 11:46:23)
fcpci: -- 32 bit CAPI driver --
ACPI: PCI Interrupt Link [LNKA] enabled at IRQ 16
ACPI: PCI Interrupt 0000:02:0a.0[A] -> Link [LNKA] -> GSI 16 (level, low) -> IRQ 225
fcpci: AVM FRITZ!Card PCI found: port 0xcc00, irq 225
fcpci: Loading...
fcpci: Driver 'fcpci' attached to fcpci-stack. (152)
fcpci: Stack version 3.11-07
kcapi: Controller 1: fcpci-cc00-225 attached
kcapi: card 1 "fcpci-cc00-225" ready.
fcpci: Loaded.

Dann installiert man sich mit dem Paketmanager der Wahl Capisuite. /etc/capisuite/answering_machine.conf muss um einen Eintrag für den Anrufbeantworter erweitert werden:

[melle]
voice_numbers="8715419"
voice_action="MailAndSave"
voice_delay="1"
record_length="90"
voice_email="melle <email @ adresse.de>"
pin="1234"
announcement="ansage.la"

Die Telefonnummer ist die Zielnummer ohne Ortsvorwahl, nach einer Sekunde kommt die Ansage und man kann 90 Sekunden quatschen, das Resultat wird via e-Mail verschickt.
Jeder User (der Name in den eckigen Klammern) hat ein Spool-Verzeichnis unterhalb von /var/spool/capisuite/users/. Die Ansage ansage.la wird in diesem User-Verzeichnis gesucht.

Der Anrufbeantworter funktioniert schon fast, wir brauchen noch ein paar lustige Ansagen. Die kann man entweder aufnehmen in dem man sich selbst anruft, die PIN eingibt und dann losquatscht. Oder man hat eine tolle Plattensammlung und möchte die Audioschnipsel von CD durch die Telfonleitung quetschen.
Wenn das gewünschte File als WAV vorliegt, kann man es mit sox konvertieren:

sox ansage.wav -r 8000 -c 1 -b ansage.la resample -ql

Super, jetzt funktioniert der Anrufbeantworter. Fehlt nur noch eine Shuffle-Funktion. Die sieht bei mir so aus:

#!/bin/sh
rm /var/spool/capisuite/users/melle/ansage.la;
ln -s `ls /var/spool/capisuite/users/melle/*.la -1 | rl | tail -1` /var/spool/capisuite/users/melle/ansage.la

rl kommt aus dem Paket randomize-lines und verwurstelt die Ausgabe von ls. Das Script kann man jetzt via Cronjob ausführen lassen, um z.B. stündlich die Ansage zu shuffeln. Lustiger ist es vor jedem Anruf, damit immer eine neue Ansage zu hören ist.
In /etc/capisuite/incoming.py sucht man sich die Funktion callIncoming und dann die Zeile

capisuite.connect_voice(call,int(delay))

heraus. Dort geht der Anrufbeantworter ran, es genügt also oberhalb dieser Zeile folgendes einzufügen:

os.popen("rm /var/spool/capisuite/users/melle/ansage.la; ln -s `ls /var/spool/capisuite/users/melle/*.la -1 | rl | tail -1` /var/spool/capisuite/users/melle/ansage.la")

Fertig ist die Laube. Wer es ausprobieren will – einfach ein paar Mal hier anrufen: +49-331-8715419. Keine Angst, ist nur der Anrufbeantworter, ich werde nicht geweckt, wenn dort jemand anruft 😉

ssh-Login mit ohne Passwort

Bevor ich das wieder vergesse, schreibe ich es mal besser auf:

$ ssh-keygen -t rsa                                                                   
$ cat .ssh/id_rsa.pub | ssh server 'cat >> .ssh/authorized_keys'

CACert für den eigenen Webserver

Nachdem ich gleich Punkte von vier Assurern bekommen habe, habe ich meinen Webserver mit CACert-signierten Zertifikaten ausgestattet. Das Blog spricht jetzt also SSL und wenn man das CACErt-Root-Zertifikat installiert, klappt das auch ohne Browserwarnung.

Und so geht’s: Zuerst muss man/Frau einen Zertifikatsrequest erzeugen:

openssl req -new -newkey rsa:1024 -nodes -keyout mykey.pem -out myreq.pem

mykey.pem enthält den Private Key myreq.pem ist der Zertifikatsrequest. Dieser Zertifikatsrequest wird später an CACert / Verisign gesendet um ein signiertes Serverzertifikat zu erhalten.

Bei CACert muss man sich aber erstmal eine Domain anlegen (recht im Menü, Domain hinzufügen). Dort muss der vollständige Servername (www.meinedomain.de) eingetragen werden. An einen User dieses Servers wird dann eine Testmail gesendet, um zu prüfen, ob der Server wirklich Dir gehört. Dieser Teil ist sehr spannend, weil man dann erstmal merkt, wie kaputt der eigene Mailserver konfiguriert ist. Wenn also nach unzähligen Versuchen, der Server endlich Mails an root@www.meinedomain.de annimmt (und die Mail nicht als Spam klassifiziert wird…), kann man den Link in der Mail anklicken. Damit ist die Domain verifiziert.

Als nächstes kann man unter Server-Zertifikate ein neues Zertifikat erstellen, in das Webformular wird der Inhalt der Datei myreq.pem eingefügt, nach dem Absenden erhält man das Zertifikat, zur Sicherheit auch nochmal per Mail. Das Zertifikat ist abhängig vom Assurer-Punktekonto 6 oder 24 Monate gültig.

Jetzt muss das leckere neue Zertifkat nur noch dem Apache untergejubelt werden:

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/spark.dnsalias.net.cert.pem
SSLCertificateKEyFile /etc/apache2/ssl/spark.dnsalias.net.key.pem

SSLProtocol all
SSLCipherSuite HIGH:MEDIUM

Das war’s 🙂

SSL funktioniert :)

Update: Ich habe ssl erstmal wieder abgeschaltet, SSL auf mehreren virtuellen Hosts und ohne feste IP-Adressen führt zu sehr merkwürdigen Effekten 🙁

PDFs zusammenfassen

Es gibt diese ungemein praktischen Geräte von HP, die wie ein Kopierer aussehen, sich so anfühlen, auch so schnell arbeiten, aber eigentlich ein Scanner mit angeschlossenem Drucker sind.
Mein liebstes Feature ist der Scanner: irgendwelche Behördenpost kann man damit prima einscannen und als PDF archivieren. Leider erzeugt der Scanner pro Blatt einzelne PDFs, wenn man die Vorlage nicht in den Einzelblatteinzug legt. Das Zusammenfassen zu einem PDF ist jedoch kein Problem.
Man nehme dafür eine halbe Tasse Hühnerblut, drei Spinnenbeine, etwas Dung einer Bergziege und spreche unter kontinuierlichem Rühren die magischen Worte

gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf Document1.pdf Document2.pdf ...

(Ok, es soll auch ohne Dung funktionieren, habe ich gehört, aber sicher ist sicher!) [von hier]

Internet Explorer für Linux

Internet Explorer unter Linux

Auch wenn alle rumheulen, wie sinnlos dieses Script ist – ich finde es genial. Keine Wine-Orgien mehr, bloß um so einen dummen Browser unter Linux zum Laufen zu bringen. Ich wünsche mir ein entsprechendes Script für Lotus Notes. [ via ]