Heute gilt „die Umsetzung von Architekturvorgaben lässt sich testen!“. Und das sogar mit JUnit 5! Cool.


mit Java, Raspberry Pi, SDR, Linux, Arduino, Sicherheit, Blender, KI, Statistik, Krypto und Blockchain
Heute gilt „die Umsetzung von Architekturvorgaben lässt sich testen!“. Und das sogar mit JUnit 5! Cool.

Ein 521-Bit private Elliptic Curve Cryptography (ECC) Key mit secp521r1 erzeugen. Kleiner geht auch 😉

Ganz einfach:
openssl ecparam -out private-key.pem -name secp521r1 -genkey
Ausgabe des keys mit cat private-key.pem z.B.: „Bitcoin (XBT) >38k wg. Amazon? – dann mal gleich ein private ECC Key auf dem Pi mit neuem OpenSSL 3.0.0-beta1 generieren“ weiterlesen
Auf einem Raspberry Pi kann leicht in ca. 1-2 Stunden die aktuellste OpenSSL 3.0.0 beta installiert werden.
Also dann mal erst das Archiv runterladen und die Checksumme prüfen, wie hier beschrieben.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// laden der Version von https://www.openssl.org/source/openssl-3.0.0-beta1.tar.gz wget https://www.openssl.org/source/openssl-3.0.0-beta1.tar.gz // auspacken des Archives, gunzip -c openssl-3.0.0-beta1.tar.gz | tar xf - // in das Verzeichnis wechseln cd openssl-3.0.0-beta1 // alles Konfigurieren ./config // nun für das compilieren 1-2 Stunden (W Zero) einplanen make // das dauert auch, habe nicht auf die Uhr geschaut ... sudo make install // Version checken openssl version // Reboot tut gut sudo reboot now // Version abfragen openssl version // Ergebnis // OpenSSL 3.0.0-beta1 17 Jun 2021 (Library: OpenSSL 3.0.0-beta1 17 Jun 2021) |
Welche Algos. werden unterstüzt in diese Version? openssl dgst -list
|
1 2 3 4 5 6 7 8 9 10 |
Supported digests: -blake2b512 -blake2s256 -md4 -md5 -md5-sha1 -mdc2 -ripemd -ripemd160 -rmd160 -sha1 -sha224 -sha256 -sha3-224 -sha3-256 -sha3-384 -sha3-512 -sha384 -sha512 -sha512-224 -sha512-256 -shake128 -shake256 -sm3 -ssl3-md5 -ssl3-sha1 -whirlpool |
Welche Verschlüsselungen werden in dieser Version unterstüzt? openssl enc -list
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
Supported ciphers: -aes-128-cbc -aes-128-cfb -aes-128-cfb1 -aes-128-cfb8 -aes-128-ctr -aes-128-ecb -aes-128-ofb -aes-192-cbc -aes-192-cfb -aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr -aes-192-ecb -aes-192-ofb -aes-256-cbc -aes-256-cfb -aes-256-cfb1 -aes-256-cfb8 -aes-256-ctr -aes-256-ecb -aes-256-ofb -aes128 -aes128-wrap -aes192 -aes192-wrap -aes256 -aes256-wrap -aria-128-cbc -aria-128-cfb -aria-128-cfb1 -aria-128-cfb8 -aria-128-ctr -aria-128-ecb -aria-128-ofb -aria-192-cbc -aria-192-cfb -aria-192-cfb1 -aria-192-cfb8 -aria-192-ctr -aria-192-ecb -aria-192-ofb -aria-256-cbc -aria-256-cfb -aria-256-cfb1 -aria-256-cfb8 -aria-256-ctr -aria-256-ecb -aria-256-ofb -aria128 -aria192 -aria256 -bf -bf-cbc -bf-cfb -bf-ecb -bf-ofb -blowfish -camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1 -camellia-128-cfb8 -camellia-128-ctr -camellia-128-ecb -camellia-128-ofb -camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1 -camellia-192-cfb8 -camellia-192-ctr -camellia-192-ecb -camellia-192-ofb -camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1 -camellia-256-cfb8 -camellia-256-ctr -camellia-256-ecb -camellia-256-ofb -camellia128 -camellia192 -camellia256 -cast -cast-cbc -cast5-cbc -cast5-cfb -cast5-ecb -cast5-ofb -chacha20 -des -des-cbc -des-cfb -des-cfb1 -des-cfb8 -des-ecb -des-ede -des-ede-cbc -des-ede-cfb -des-ede-ecb -des-ede-ofb -des-ede3 -des-ede3-cbc -des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8 -des-ede3-ecb -des-ede3-ofb -des-ofb -des3 -des3-wrap -desx -desx-cbc -id-aes128-wrap -id-aes128-wrap-pad -id-aes192-wrap -id-aes192-wrap-pad -id-aes256-wrap -id-aes256-wrap-pad -id-smime-alg-CMS3DESwrap -idea -idea-cbc -idea-cfb -idea-ecb -idea-ofb -rc2 -rc2-128 -rc2-40 -rc2-40-cbc -rc2-64 -rc2-64-cbc -rc2-cbc -rc2-cfb -rc2-ecb -rc2-ofb -rc4 -rc4-40 -seed -seed-cbc -seed-cfb -seed-ecb -seed-ofb -sm4 -sm4-cbc -sm4-cfb -sm4-ctr -sm4-ecb -sm4-ofb |
Wer die Beta 3.0.0 Version von OpenSSL lädt, kann die Checksumme nach dem Download so überprüfen:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Download OpenSSL wget https://www.openssl.org/source/openssl-3.0.0-beta1.tar.gz // Download SHA-256 Checksumme wget https://www.openssl.org/source/openssl-3.0.0-beta1.tar.gz.sha256 // Überprüfen mit shasum shasum -a 256 openssl-3.0.0-beta1.tar.gz 7bfedc9a1062cbd2aabc294acc93cbd5259e6e7bd5bbe38e454cc6a32564029f openssl-3.0.0-beta1.tar.gz // ausgabe der Checksumme, mit cat ... cat openssl-3.0.0-beta1.tar.gz.sha256 7bfedc9a1062cbd2aabc294acc93cbd5259e6e7bd5bbe38e454cc6a32564029f // oder auch direkt mit OpenSSL überprüfen wenn schon eine Version installiert openssl sha256 openssl-3.0.0-beta1.tar.gz SHA256(openssl-3.0.0-beta1.tar.gz)= 7bfedc9a1062cbd2aabc294acc93cbd5259e6e7bd5bbe38e454cc6a32564029f |
OpenSSL ist ein in C entwickeltes Kryptographiewerkzeug für das Secure Socket Layer (SSL). Es enthält das Mehrzweck-Befehlszeilenwerkzeug /usr/bin/openssl. Das Programm eignet sich für kryptographische Operationen wie:

Welche Version ist auf dem Raspberry Pi installiert? Ein „OpenSSL nicht nur mit dem Raspberry Pi oder wie können Zertifikate selbst signiert werden mit eigener selbst-signierter Root-CA?“ weiterlesen

Die Telekom hat immer noch eine von mir gemeldete Sicherheitslücke in ihren Prepaid Karten verlinkt. Auch wenn die Sicherheitslücke von tausenden Betroffenen Karten als Verpackungsfehler deklariert wird (so kann man das dann auch nennen 😉 ).
Aber immerhin gibt es in der Hall auf Fame immer noch diesen Eintrag (Stand: 21.07.2021) obwohl es schon über zwei Jahre her ist:
Hier der Link zur Dankseite der Telekom. Na ja, eine Zeile ist besser als nichts, danke Telekom.

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import org.junit.jupiter.api.Test; /** * Dubletten Test. * * @author Thomas Wenzlaff * */ public class TestDoppelte { @Test void testDoppelteUndNullEntfernen() { System.out.println("----> Array mit Orten:"); List<String> orte = new ArrayList<>(); orte.add(null); orte.add(null); // doppelter Eintrag orte.add("Hannover"); orte.add("Langenhagen"); orte.add("Bremen"); orte.add("Bremen"); // doppelter Eintrag orte.stream().forEach(ort -> System.out.println(ort)); assertEquals(6, orte.size()); System.out.println("----> Entfernen von Dubletten mit HashSet:"); Set<String> orteSetOhneDublette = new HashSet<>(orte); orteSetOhneDublette.stream().forEach(ort -> System.out.println(ort)); assertEquals(4, orteSetOhneDublette.size()); System.out.println("----> Wieder zurück als Liste ohne die null Werte und anders sortiert:"); List<String> kopie = orteSetOhneDublette.stream().filter(Objects::nonNull).collect(Collectors.toList()); kopie.stream().forEach(ort -> System.out.println(ort)); assertEquals(3, kopie.size()); } } |
Ergebnis: „Java: Array von Dubletten und null entfernen mit HashSet und zurück“ weiterlesen
Wie kann die Performance einer React App. ermittelt werden? Dazu gibt es das „React Developer Tools“ von React. Wenn das im Browser installiert ist:

Es gib dann zwei neue Tabs am Ende: Components „React Developer Profiler im Firefox Browser für Performance Messungen“ weiterlesen
Hier mal ein kleines Beispiel einer React-Klasse, die zu einer Functional Components umgeformt wird:

Was ist anders?
-kein class dafür const
-kein extends React.Component dafür = (props) =>
-keine render Methode
-kein this
Noch ein Beispiel, im Prinzip das gleiche: „Functional Components vs. Class Components in React“ weiterlesen
Werden mit org.json.JSONObject Json Dateien erstellt, werden die ldt. Spezifikation nicht sortiert. Das ist für die Auswertung mitunter schwer zu lesen.

Und das mit der Antenne.
Eine Suche in Datenbeständen ist keine einfache Sache! Mit Fuse.js ist ein Suche mit Fuzzylogik möglich. Fuse.js ist eine mächtige Lib ohne viele Abhängigkeiten.
Eine suche mit Fuzzylogik ist eine unscharfe Suche und wird z. B. in der Automatisierungstechnik, Medizintechnik, Unterhaltungselektronik, KI, Fahrzeugtechnik und anderen Bereichen der Regelungstechnik verwendet. Zum Beispiel suchen wir nach dem Ort: Hameln und es werden uns auch Ergebnisse aus Hannover angezeigt. Beide beginnen mit Ha.
Wir programmieren mal Beispielsweise eine Arztsuche mit einfache Gui, wie bei Google, mit nur einem Eingabefeld. So soll die Seite aussehen, und ein Eintrag ist auch gleich die Online-Hilfe:

Das Ergebnis, wenn wir z.B. nach Anästhesie suchen sieht dann so aus bei den 5 Beispiel Datensätzen: „Dynamische Fuzzy-Suche mit Fuse.js in Json Daten mit React App TWArztSuche“ weiterlesen
Die neu veröffentlichte Version Eclipse 2021-06 muss auch bei 31 Grad Celsius getestet werden:

Update läuft und auch ein kurzer JUnit 5 Test mit meiner Blockchain läuft noch ohne Fehler durch: „Quicktest bei 31 Grad Celsius: Eclipse 2021-06“ weiterlesen

Eine minimale Single Page App (495 Byte) mit React und Babel. Das ganze Projekt ist hier zu finden. Einfach das git Repo in einem leeren Verzeichnis clonen
„Mal was anderes als Fussball: SPA mit React und Babel oder TOP 10 Gründe für Anti- Pattern „Big Ball of Mud““ weiterlesen
Raspberry Pi in EDDV. (nm x 1,6 = km) 39nm = 62 Km „96 Flugzeuge gesehen in einer Entfernung von über 60 km mit ca. 3000 Kontakten“ weiterlesen
Wer noch ein JavaScript CO2-Dashboard für seine CO2 Ampel mit PatternFly und React braucht, kann gerne diesen Code verwenden: „CO2-Dashboard mit JavaScript, PatternFly und React für CO2-Ampel“ weiterlesen
Hier nun noch ein Level von Sicherheit mit dem Raspberry Pi. Wie hier beschrieben kann eine Website leicht für jedermann mit eigener onion Domain im Darknet bereitgestellt werden. Die Seiten können nun aber auch noch mit einen Curve25519-Key gesichert werden, so das nur Nutzer die den Key haben auf die Seiten zugreifen können. Wenn man dann z.B. die Adresse
http://tokc2fifswouszmp4jy3ejizmchy4damvhmdug5crvkvfgmymbejkqqd.onion
aufruft, erscheint im Browser, oben links ein Schloß. Wenn man darauf klickt erscheint der Dialog:

Hier wird dann der private Schlüssel, den man vom Bereitsteller erhalten hat eingegeben. Für diese Seite ist es der Schlüssel:
JDSQ2RRI2SLYCN4SG6ZBP4DHE4TEHZG26EJS5R6FYBPH6AU3FVEA
Jeder der diesen privaten Schlüssel hat, kann nun auf die Seiten zugreifen. Wer das falsche Passwort eingibt, kann nicht auf die Seite zugreifen: „Onion Webseite mit Elliptische Kurve Curve25519 absichern“ weiterlesen

So, dann mal wieder nach langem Shutdown das Planespotting aktiviert:

Es geht wieder los… „Planespotting mit dem Pi: Es ist noch nicht viel los“ weiterlesen

Hier mal kurz noch ein Beispiel-Flow mit NodeRed um einen Server oder so zu überwachen und wenn er sich nicht in einen bestimmten Zeitraum meldet wird eine Pushover Nachricht an ein Handy versand. Bei mir wird ein CO2-Ampel-Server der auf einem anderen Raspberry Pi läuft damit überprüft. Der sendet jede Minute den CO2 Wert in ppm. Wenn nach 10 Minuten Timeout nichts kommt, wird die Meldung an mein Handy gesendet. Aber nur maximal nur einmal die Stunde, will ja wenn er ausfällt nicht alle 10 Minugen eine Meldung bekommen, das währe dann zuviel des guten.
Hier der Java-Script Flow zum kostenlosen Download:… „Watchdog für einen CO2-Ampel Server oder andere per NodeRed“ weiterlesen

Beim Anmelden mit SSH auf den Raspberry Pi wird jedes mal diese Meldung ausgegeben.
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Das Nervt! Die habe ich gelöscht und durch eine für mich sinnvolle Bezeichnung welches Gerät es ist angepasst. So kann ich beim anmelden leichter sehen, mit welchem Gerät ich mich verbunden haben. Dazu einfach mit
|
1 |
sudo nano /etc/motd |
die Datei wie gewünscht bearbeiten.
Ich habe da z.B. nur eingetragen: Raspberry Pi Zero Nr. 18 😉

Wenn man vom Mac (Windows geht natürlich auch) aus auf einen entfernten Raspberry Pi 4 B zugreifen will, kann man das auch ohne jedesmal ein Passwort eingeben zu müssen. Dafür kann das moderne ed25519 Key Verfahren verwendet werden.
Dazu muss auf dem Pi ein .ssh Verzeichnis mit einer authorized_keys Datei angelegt werden:
|
1 2 3 4 5 6 7 |
# wenn das <strong>.ssh</strong> Verzeichnis (Achtung, Verzeichnisname mit Punkt) noch nicht da ist, dann anlegen mit mkdir .ssh cd .ssh touch authorized_keys chmod 700 ~/.ssh/ chmod 600 ~/.ssh/authorized_keys |
Dann in der /etc/ssh/sshd_config des Pi die folgenden Einträge setzen: … „SSH Anmeldung an dem Raspberry Pi ohne Passwort mit Elliptische Kurve – ed25519 Key“ weiterlesen
„Black Box Test“ mit Wapiti. Es prüft Webseiten und Web-Applikationen auf Schwachstellen, indem es die Seitenstruktur ermittelt und daraufhin versucht, Daten und Payloads an Skripte und Formulare zu übergeben. Cool, dann mal den eigenen Server überprüfen. Hier schon mal der Ergebnis-Report vorweg:

Installieren mit: „„Black Box Test“ mit Wapiti“ weiterlesen
Wer einen eigenen Webserver laufen hat, kann mit nikto einen Sicherheitscann ausführen.
Nikto ist ein in Perl geschriebener Open Source Web Server Scanner. Nikto testet Web Server auf über 7800 potentiell schädliche Dateien und Programme und prüft über 1250 Server-Versionen auf ihre Aktualität und weist bei über 270 Server-Versionen auf bekannte Sicherheitslücken hin. Der Scanner prüft Header und versucht ausserdem, ausnutzbare Fehler und Defaults in der Webserver-Konfiguration aufzudecken. Nikto schickt ca. 7800 GET-Requests an den Webserver, um auf das Vorhandensein unsicherer Inhalte zu prüfen, richtet also keinen Schaden an.
Der ist schnell auf dem Raspberry Pi installiert mit:
sudo apt-get install nikto
Es wir die v2.1.5 installiert. Das kann mit
nikto -Version überprüft werden. Es wird die ausgegeben: „Webserver Sicherheit überprüfen mit nikto“ weiterlesen
Hier mal die Auswertung zur CO2-Ampel die auf einem Raspberry Pi läuf. Von fast einem halben Jahr Dauerlauf (23.1.-5.6.2021) im Arbeitszimmer mit max. 2 Personen mit 374374 Messwerten (jede Minute). Der Mittelwert beträg 693 ppm. Da hätte ich jetzt weniger erwartet, da ich immer rechtzeitig gelüftet habe, wenn ich einen zu hohen Wert gesehen haben.
Max. 2515 ppm und min wie nicht anders zu erwarten 400 ppm.


Wie kann kostenlos eine Webseite mit .onion Domain auf einen Raspberry Pi Zero bereitgestellt werden?
Man braucht keine kostenpflichtige Domain wie z.B. www.wenzlaff.info beantragen und bezahlen.
Die .onion Domain gibt es kostenlos. Wir brauchen nur tor und einen Webserver wie z.B. nginx.
Folgende Schritte sind auf dem Raspberry Pi nötig:
… „Kostenlos eine Webseite im Darknet mit Raspberry Pi bereitstellen über Onion Service“ weiterlesen
Wenn man Wikipedia glauben will dann ist „Curve25519 … eine elliptische Kurve, die für asymmetrische Kryptosysteme genutzt wird. Sie wird üblicherweise für digitale Signaturen und Schlüsselaustauschprotokolle genutzt und gilt als besonders schnell. Sie ist von der IETF als RFC 7748 standardisiert.“
Aber sie wird auch für Onion-Services verwendet. Deshalb mal heute zur Entspannung für 10 Minuten einen public und privaten Key auf einem Raspberry Pi (Zero) generieren. Inkl. Hostnamen. Das geht so:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// nötige Abhängigkeite installieren, wenn nicht schon vorhanden sudo apt install gcc libsodium-dev make autoconf // das Repo clonen git clone https://github.com/IT-Berater/mkp224o.git // die mkp224o App compilieren, bauen und installieren cd mkp224o/ ./autogen.sh ./configure make // Keys die mit fast oder filter starten und Hostname generieren im TW-Keys Verzeichnis, das dauert ca. 1 Minute ./mkp224o filter fast -t 1 -v -n 1 -d ./TW-Keys // Check cd TW-Keys ls |
Hier mal der lauf auf meinem Pi: „Zum heutigen National Donut Day mit Curve25519 free private/public Key generieren für Hidden Onion-Services“ weiterlesen
Quickttest BPMN Camunda Modeler Version 4.8.1. Läuft …
