Heiko Zimmermann
SAP-Berater, System Engineer und Entwickler.

Weblog

Ich wollte aus beruflichen Gründen meine Excel-Kenntnisse wieder etwas auffrischen und vertiefen. Deshalb habe ich bei udemy für 9,99 Euro den Kurs Excel Kurs Formeln & Funktionen & Pivot-Tabellen Masterclass gebucht.

Meiner Meinung nach hat das Daniel Kogan wirklich sehr gut gemacht. Er hat viele sehr gute Tipps gegeben, wie man etwas macht und Zeit spart. Ich kann den Kurs jeden empfehlen, der Excel beruflich braucht und noch kein Profi ist. Und wie immer bei udemy gilt, Schnäppchenpreise abwarten. :-)

Ich wollte auf OpenBSD das Modul "Photos" des Banshee PHP Framworks nutzen. Leider erhielt ich den Fehler: Grafik kann nicht angezeigt werden, weil sie Fehler enthält. Beim Suchen des Fehlers bin ich auf auf einen Beitrag auf stackoverflow.com gestossen.

Der Hinweis betreffend readfile und mehreren output buffers brachte mich zu folgender Lösung (controllers/photo.php):

--- photo.php   Wed Feb 28 18:27:41 2018
+++ photo.php   Mon May 21 19:57:17 2018
@@ -103,7 +103,10 @@
                        $this->view->disable();
 
                        header("Content-Type: ".$this->extensions[$extension]);
-                       readfile(PHOTO_PATH."/".$photo);
+                       while (ob_get_level()) {
+                          ob_end_clean();
+                       }
+                       readfile(PHOTO_PATH."/".$photo);
 
                        return true;
                }

Das Problem konnte ich nicht unter Linux nicht nachstellen, lediglich unter OpenBSD.

Die Public Key Pinning Erweiterung für HTTP (HPKP) ist ein Sicherheitsfeature, das einem Webclient mitteilt, einen spezifischen kryptographischen Schlüssel mit einem bestimmten Webserver in Verbindung zu bringen um Man-in-the-Middle-Angriffe mit gefälschten Zertifikaten zu vermeiden. (Quelle Mozilla)

Inzwischen nutzen wohl die meisten von uns für ihre Websites letsencrypt. Hier lässt sich HPKP im Hiawatha Webserver ganz einfach einrichten.

Man benötigt von letsencrypt zwei Zertifikate. Das lets-encrypt-x3-cross-signed.pem und als Backup das lets-encrypt-x4-cross-signed.pem. Wichtig hierbei ist, dass beide Dateien in ein File geschrieben werden müssen.

Am einfachste macht man das so:

cd /etc/hiawatha && mkdir hpkp && cd hpkp
wget -qO letsencrypt.pem https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem \
  https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem

Dann muss man nur noch in der jeweiligen Konfiguration der VirtualHost in hiawatha.conf die Zeile ergänzen:

TLScertFile = /etc/hiawatha/tls/www.mydomain.com.pem #ist natürlich von letsencrypt 
PublicKeyPins = /etc/hiawatha/hpkp/letsencrypt.pem, 30d

Danach muss Hiawatha nur neu gestartet werden.

Nun kann man z.B. im Firefox in der Netzwerkanalyse für meine Website folgendes sehen:

Public-Key-Pins: pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg="; pin-sha256="sRHdihwgkaib1P1gxX8HFszlD+7/gTfNvuAybgLPNis="; max-age=5184000

In der Laufzeitanalyse dürfen dann keine Pin-Fehler auftauchen.

Letztens habe ich mir auf eBay einen günstigen Pine64+ ersteigert. Bisher setzte ich Zuhause einen Banana Pi M3 für mein OpenVPN ein. Ich hatte mich damals für den Banana Pi M3 entschieden, weil dieser einen Gigabit-LAN-Anschluss hat und der Raspberry Pi 3 damals nicht.

Allerdings haben mich beim BPI-M3 der VPN-Datendurchsatz und die starke Wärmeantwicklung enttäuscht. In einem Gehäuse, ohne aktiven Lüfter, wären da permanent rund 74°C CPU-Temperatur. Also musste ich einen aktiven Lüfter einbauen.

Ich habe die AES256-CBC Geschwindigkeit der beiden Geräte mit openssl speed -evp AES256 verglichen, was natürlich nicht 100% dem OpenVPN entspricht. Die eingesetzte Version ist OpenSSL 1.1.0h auf beiden Geräten, der Pine64+ mit Armbian und der Banana Pi M3 mit Raspbian.

Hier die gemessenen Werte:

Banana Pi M3 (armv7l)

$ openssl speed -evp AES256
Doing aes-256-cbc for 3s on 16 size blocks: 2407574 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 64 size blocks: 1398737 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 256 size blocks: 375596 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 1024 size blocks: 95665 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 12024 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 16384 size blocks: 6015 aes-256-cbc's in 3.00s
OpenSSL 1.1.0h  27 Mar 2018
built on: reproducible build, date unspecified
options:bn(64,32) rc4(char) des(long) aes(partial) blowfish(ptr)
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/lib/ssl\"" -DENGINESDIR="\"/usr/lib/arm-linux-gnueabihf/engines-1.1\""
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-256-cbc      12840.39k    29839.72k    32050.86k    32653.65k    32833.54k    32849.92k

 

Pine 64+ (aarch64)

$ openssl speed -evp AES256
Doing aes-256-cbc for 3s on 16 size blocks: 10081660 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 64 size blocks: 7060120 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 256 size blocks: 3176452 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 1024 size blocks: 1017061 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 138364 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 16384 size blocks: 69601 aes-256-cbc's in 3.00s
OpenSSL 1.1.0h  27 Mar 2018
built on: reproducible build, date unspecified
options:bn(64,64) rc4(char) des(int) aes(partial) blowfish(ptr)
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/lib/ssl\"" -DENGINESDIR="\"/usr/lib/aarch64-linux-gnu/engines-1.1\""
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-256-cbc      53768.85k   150615.89k   271057.24k   347156.82k   377825.96k   380114.26k

 

Fazit: für mein Einsatzgebiet, als kleiner OpenVPN-Server und schneller DNS-Server, ist der Pine64+ (aarch64) spürbar besser geeignet als der BPI-M3 (armv7l). Dafür ist der BPI-M3 mit Bluetooth, WLAN, 8 Kernen und eMMC besser ausgestattet, und eignet sich z.B. als Mini-Desktop Rechner am TV.

Der Neupreis beider Geräte ist nicht ganz vergleichbar. Der Pine64+ liegt bei rund 69 Euro und der mit WLAN, Bluetooth und 8 GB eMMC und sogar SATA-Port ausgestattete BPI-M3 bei rund 79 Euro.

Ich betreibe meine Website mit dem Banshee PHP Framework. Dieses gilt als sehr sicher und wurde auch entsprechend auditiert. Darin eingebettet ist der CKEditor. Dieser verursacht gerade eine Sicherheitslücke in Drupal und sollte dringend aktualisiert werden. Das zugehörige Patch greift ab der Version 4.9.2.

In Banshee geht das Update seit Version 5.3 extrem einfach. Man wechselt in der Shell in das Verzeichnis extra und führt folgendes aus:

extra # ./download_ckeditor 4.9.2 
Downloading CKEditor version 4.9.2.
Installing CKEditor.
Cleaning up.

Damit ist die Aufgabe abgeschlossen.