Dank “Hearthbleed” musste ich mich mal wieder mit openssl und zwangsläufig allen davon abhängigen Diensten beschäftigen. Dabei ist mir eingefallen, dass es doch CPU Erweiterungen gibt, die HardwareAES unterstützen *freu*. Direkt mal mittels

openssl engine

geprüft, was so geht und das Ergebnis war ernüchternd:

(rsax) RSAX engine support
(dynamic) Dynamic engine loading support

Cryptodev installieren

Ein wenig suchen im Netz hat mich auf cryptodev-linux.org geführt. Also flink mittels

git clone https://github.com/cryptodev-linux/cryptodev-linux.git

eine kopie gezogen 🙂 Die Installation ist wirklich SEHR einfach:

cd cryptodev-linux
make
make install
echo "cryptodev" >> /etc/modules
modprobe cryptodev

Fertig. Das alleine reicht leider nicht ! Nun sollte zwar unter /dev/crypto ein Device vorhanden sein, jedoch wird openSSL (und openVPN, etc) damit nix anfangen können, was also tun? OpenSSL selbst kompilieren !

openSSL + cryptodev

Schritt für Schritt:

apt-get update
apt-get upgrade #openssl sollte auf dem aktuellen Stand sein, damit die Lücke an sich zu ist !
apt-get source openssl
cd openssl-<version>
vi debian/rules

dort bei CONFARGS hinten -DHAVE_CRYPTODEV ranhängen 🙂

Nun das Paket bauen:

dpkg-buildpackage -us -uc

Warnungen bitte beachten und fehlende Pakete nachinstallieren !

Wenn alles glatt lief, liegen ein Verzeichnis drüber nun ein paar .deb files, diese ALLE installieren.

dpkg -i ../*.deb

Bitte beachten: Dienste die openSSL verwenden (apache, postfix, openvpn, ….) müssen NEUGESTARTET werden.

FERTIG!

Ein

openssl engine

sollte nun

(cryptodev) BSD cryptodev engine
(rsax) RSAX engine support
(dynamic) Dynamic engine loading support

anzeigen.

Diese Engine kann nun auch unter openvpn (in der serverconf engine cryptodev reinschreiben) genutzt werden, was die CPU Last deutlich verringert, bzw schnelleren Datendurchsatz ermöglicht (aes-256-cbc -> 2.2 Sekunden Original, nach HardwareAES Patch 0.14 Sekunden!!!)

Optional:

Euch wird bei einem apt-get upgrade auffallen, dass Debian unbedingt die selbst gebauten Pakete “aktualisieren” will, das kann man verhindern in dem man für jedes Paket folgendes Kommando als root eingibt:

echo "<paketname> hold" | dpkg --set-selections