Forum: Mikrocontroller und Digitale Elektronik SMTP und POP3 mit SSL/TLS für Microcontroller


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Hanns-Jürgen M. (yogy)


Lesenswert?

Hallo zusammen,

seit einigen Jahren nutze ich kleine Controllersysteme zur 
Hausüberwachung oder zur Heizungssteuerung, die mir Statusmails senden 
und auch in der Lage sind, eMails zu empfangen.

Als HW nutze ich dazu Arduino-Hardware (Mega oder zunehmend  DUE) mit 
einem Wiznet W5100 oder W5500 Ethernetmodul, die ich über das 
Atmel-Studio in ANSI-C programmiere.

Vor über einem Jahr hat aber auch der letzte meiner eMail Provider den 
unverschlüsselten POP3-Zugriff  abgeschaltet. Und nur noch über 
SMTP2GO.COM kann ich unverschlüsselt versenden.

Ich möchte nun zumindest bei den DUE-Versionen SSL/TLS nachrüsten. Nur, 
irgendwie bin ich dazu zu blöde. Suchen im Internet führten mich u.a. zu 
WolfSSL (GITHUB), finde mich da aber nicht zurecht bzw. kann die 
notwenigen Routinen nicht extrahieren Zu Blöde?

Was brauche ich eigentlich?

Soweit ich das verstanden habe, sendet mir der Mailserver nach 
Kontaktierung seiner URL und dem zugehörigen Port seinen Schlüssel.

Den muß mein System nun mit einem eigenen Schlüssel „verknautschen“ und 
zurücksenden. (Die Verifizierung des Serverschlüssels lassen wir mal 
außen vor.) Dazu brauch ich "eigentlich" nur eine passende Routine.

Die weitere Kommunikation findet mit den üblichen SMTP/POP3  Befehlen 
etc. statt (?). Die jeweilige Übertragung wird dazu verschlüsselt bzw. 
entschlüsselt. Dazu brauche ich also weitere zwei Routinen. Mehr doch 
wohl nicht?

Was habe ich dabei mißverstanden bzw. übersehen? Wo finde ich die 
notwendigen Algorithmen oder gar Routinen dazu? Ich kaufe dazu auch 
gerne ein Buch.

Oder stellt eine TLS-Implementierung auf einem Arduino-DUE zu hohe 
Anforderungen an die Leistungsfähigkeit des Controllers SAM3X8E ?

Das Zwischenschalten eines Mailrelays (z.B. RasPI. mit Linux)  ist wegen 
des Stromverbrauchs und der Systemgröße unpassend und wäre wie „mit 
Kanonen auf Spatzen schießen“.

Danke für eure Tips.

von Frank K. (fchk)


Lesenswert?

Du brauchst AKTUELLE TLS-Standards. Die sind mit den aktuell geforderten 
Schlüssellängen schon heftig für einen Mikrocontroller, und es ist 
heftig komplexe Software. Veraltete Implementationen nützen Dir nichts, 
Du brauchst was aktuelles. Und die Anforderunegn steigen - von Jahr zu 
Jahr werden größere Schlüssellängen vorgeschrieben.

Gehe mal davon aus, dass Du mit Deinem Arduino-Zeugs am Ende bist. Du 
bräuchtest etwas deutlich stärkeres - so wie ein Teensy 4.1 mit 600 Mhz 
Cortex M7 oder ein STM32H7 System mit 480 MHz, und dazu ein 
Komplettpaket mit RTOS und Bibliotheksunterstützung wie NuttX, Zephyr 
oder etwas anderem in dieser Größenordnung. Da gibts dann auch 
TLS-Support.

Wenn Du Ver/Entschlüsselung aber nicht unbedingt brauchst, dann mach es 
doch ganz anders. Miete Dir einen kleinen VServer (z.B. bei NetCup ab 
3.99€ pro Monat) und installiere Dir dort einen eigenen Mailserver. Oder 
miete Dir Webspace und lasse da PHP-Skripte laufen, die mit Deinen 
Systemen über http oder nackte TCP-Verbindungen kommunizieren. Mit einem 
dieser Ansätze kannst Du bei Deiner bekannten Hard- und Software 
bleiben, musst dann eben halt zusätzliche Infrastruktur betreiben. Das 
ist dann halt so.

fchk

: Bearbeitet durch User
von Hmmm (hmmm)


Lesenswert?

Hanns-Jürgen M. schrieb:
> Das Zwischenschalten eines Mailrelays (z.B. RasPI. mit Linux)  ist wegen
> des Stromverbrauchs und der Systemgröße unpassend

Wenn Dein Router für OpenWRT geeignet ist, kannst Du darauf stunnel 
installieren. Dorthin verbindest Du Dich dann unverschlüsselt, und zum 
Mailprovider setzt es auf TLS um.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Frank K. schrieb:
> so wie ein Teensy 4.1 mit 600 Mhz
> Cortex M7 oder ein STM32H7 System mit 480 MHz

Oder einen ESP32, in deren Software-Framework (ESP-IDF) ist TLS fix und 
fertig integriert. Spart auch das Kabel und den W5000 dank WiFi (aber 
die ESP32 haben auch Ethernet integriert).

Hanns-Jürgen M. schrieb:
> (Die Verifizierung des Serverschlüssels lassen wir mal
> außen vor.)

Ohne diese Verifikation ist die ganze Verschlüsselung aber vollkommen 
nutzlos.

Oder du lässt das mit der E-Mail ganz bleiben und sendest deinen Status 
stattdessen per MQTT oder auch Rest-API an einen Server, es dürften sich 
genug fertige Systeme finden die dir das dann schick präsentieren. 
MQTT+TLS ist bei den ESP32 fertig integriert, muss man nur aufrufen.

Hmmm schrieb:
> Wenn Dein Router für OpenWRT geeignet ist, kannst Du darauf stunnel
> installieren.

Da doch besser direkt einen Mailserver installieren, welcher dann 
forwardet.

von Andreas M. (amesser)


Lesenswert?

Frank K. schrieb:
> Zeugs am Ende bist. Du bräuchtest etwas deutlich stärkeres - so wie ein
> Teensy 4.1 mit 600 Mhz Cortex M7 oder ein STM32H7 System mit 480 MHz,

Bullshit. Ich kann Dir versichern das ein 100MHz Cortex M4 ausreicht um 
einen Webserver mit TLS laufen zu lassen. Für ein bischen SMTPS als 
Client langt der allemal.

An den TO: ganz so einfach wie Du Dir das vorstellst ist das mit SSL/TLS 
nicht. Im Prinzip musst Du deinen Datenverkehr komplett durch den TLS 
Layer schicken. Eine fertige Implementierung davon für Mikrocontroller 
wäre zum Beispiel mbedTLS.

von Hanns-Jürgen M. (yogy)


Lesenswert?

Oh, ich sehe gerade, daß meine Antwort vom 10.9. auf Eure Postings wohl 
verschluckt worden ist (habe wohl die falsche "Taste" gedrückt).

Daher gekürzt: Danke für Eure Tips.

Ein Mailversendung über meine Website mittels PHP muß ich noch testen; 
Ein Mailempfang ist damit aber nicht möglich.

SSL/TLS mittels Controller: Ich habe nun einen ESP32 unter Nutzung der 
Library "ESP-Mail-Client" von mobizt unter der Arduino-Plattform dazu 
bringen können, eine Mail mit SSL/TLS zu versenden (SMTP) und abzufragen 
(IMAP). (Arduino-Plattform ist unerträglich langsam...).

Leider ist damit der Programmspeicher des ESP  über 90% belegt. 
Unglaublich.. Vielleicht werde ich eine andere Library checken 
(WolfSSL), mal sehen.

Yogy

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hanns-Jürgen M. schrieb:
> Leider ist damit der Programmspeicher des ESP  über 90% belegt.
> Unglaublich.. Vielleicht werde ich eine andere Library checken
> (WolfSSL), mal sehen.

Wie gesagt, das ESP-IDF Framework hat eine TLS-Library fix und fertig 
integriert. Muss man nur aufrufen.

von Thomas K. (joshua314)


Lesenswert?

Hanns-Jürgen M. schrieb:
> Als HW nutze ich dazu Arduino-Hardware (Mega oder zunehmend  DUE) mit
> einem Wiznet W5100 oder W5500 Ethernetmodul, die ich über das
> Atmel-Studio in ANSI-C programmiere.

Hallo Hans Jürgen,

mein einfacher kurzer Tipp an dich.
Bei Arduino Hardware und Netzwerk.
Setze alles auf MQTT auf. Sprich -- Deine Sensoren melden (publish) den 
Zustand an den MQTT Broker.   Deine Aktoren bestellen (subscribe) die 
Commandos.  Dann hast du ein N to N Netzwerk.  N Anzahl Daten Sender N 
Anzahl die die Daten empfangen.   Die gleiche Daten an N Anzahl 
Datenverarbeiter.

Das ganze kannst du dann auf einen nano-pi neo packen.
1 Watt    40mm x 40mm Linux quadcore Linux Rechner.
zum Beipiel mit FHEM, IO-Broker, NodeRed.
Gerade bei NodeRED kannst du Grafisch die Daten nehmen, einmal per Mail 
versenden, gleichzeitig per Telrgramm zusenden und zur Kontrolle in eine 
Datenbank schicken.

Wenn du mehr Info brauchst ... sende mir eine PN

Gruß Thomas

von Harald K. (kirnbichler)


Lesenswert?

Hanns-Jürgen M. schrieb:
> Ein Mailversendung über meine Website mittels PHP muß ich noch testen;
> Ein Mailempfang ist damit aber nicht möglich.

Wieso sollte das nicht gehen?

Es gibt komplette Webmailinterfaces, die in PHP geschrieben sind, und 
die mit IMAP(S) mit einem entsprechenden Mailserver kommunizieren 
können.

Ein Beispiel ist roundcube: https://roundcube.net/

von Hanns-Jürgen M. (yogy)


Lesenswert?

Niklas G. schrieb:
> Hanns-Jürgen M. schrieb:
>> Leider ist damit der Programmspeicher des ESP  über 90% belegt.
>> Unglaublich.. Vielleicht werde ich eine andere Library checken
>> (WolfSSL), mal sehen.
>
> Wie gesagt, das ESP-IDF Framework hat eine TLS-Library fix und fertig
> integriert. Muss man nur aufrufen.

Ob es dann weniger Speicher belegt?

BTW: Mit der ESP-IDF habe ich mich (noch) nicht auseinandergesetzt. 
Aber, mal sehen.

von Hanns-Jürgen M. (yogy)


Lesenswert?

Thomas K. schrieb:
> Hanns-Jürgen M. schrieb:
>> Als HW nutze ich dazu Arduino-Hardware (Mega oder zunehmend  DUE) mit
>> einem Wiznet W5100 oder W5500 Ethernetmodul, die ich über das
>> Atmel-Studio in ANSI-C programmiere.
>
> Hallo Hans Jürgen,
>
> mein einfacher kurzer Tipp an dich.
> Bei Arduino Hardware und Netzwerk.
> Setze alles auf MQTT auf. Sprich -- Deine Sensoren melden (publish) den
> Zustand an den MQTT Broker.   Deine Aktoren bestellen (subscribe) die
> Commandos.  Dann hast du ein N to N Netzwerk.  N Anzahl Daten Sender N
> Anzahl die die Daten empfangen.   Die gleiche Daten an N Anzahl
> Datenverarbeiter.
>
> Das ganze kannst du dann auf einen nano-pi neo packen.
> 1 Watt    40mm x 40mm Linux quadcore Linux Rechner.
> zum Beipiel mit FHEM, IO-Broker, NodeRed.
> Gerade bei NodeRED kannst du Grafisch die Daten nehmen, einmal per Mail
> versenden, gleichzeitig per Telrgramm zusenden und zur Kontrolle in eine
> Datenbank schicken.
>
> Wenn du mehr Info brauchst ... sende mir eine PN
>
> Gruß Thomas

Hallo Thomas,

mit MQTT und HomeAssist habe ich mich vor 2..3 Jahren einmal 
auseinandergesetzt und das Ganze auch zusammen mit ESP8266/ESP32 etc zum 
Spielen gebracht. Alles ganz nett, aber ich brauche einen dedizierten 
MQTT Server. Solange das alles auf ein Haus/Grundstück beschränkt 
bleibt, ist das auch ganz toll, aber wenn die Sensor- und Actorelemente 
Hundert oder mehr km entfernt sind, geht das halt (bei mir) nicht, da 
ich noch kleine Möglichkeit gefunden habe, die Anschlüsse der "dt. 
Glasfaser" von außen zugänglich zu machen. Früher bei der Telekom / DSL 
mit DynDNS hatte das alles funktioniert.

Aber danke für Deine Vorschläge und Mühen.

Hanns-Jürgen aka Yogy

PS: Ich verwende lokal ein eigenes Netzwerkprotokoll, Struktur ähnlich 
dem EIB

von Hanns-Jürgen M. (yogy)


Lesenswert?

Harald K. schrieb:
> Hanns-Jürgen M. schrieb:
>> Ein Mailversendung über meine Website mittels PHP muß ich noch testen;
>> Ein Mailempfang ist damit aber nicht möglich.
>
> Wieso sollte das nicht gehen?
>
> Es gibt komplette Webmailinterfaces, die in PHP geschrieben sind, und
> die mit IMAP(S) mit einem entsprechenden Mailserver kommunizieren
> können.
>
> Ein Beispiel ist roundcube: https://roundcube.net/

War mir unbekannt, werde ich mir ansehen. Danke für den Tip. Mit PHP 
habe ich mich zuletzt von ziemlich genau zwanzig Jahren beschäftigt, aus 
der Zeit gammelt bei mir auch ein abgestellter Apache Server in der 
Abstellkammer. Falls der noch funktioniert, kann ich das dort alles 
austesten, bevor es zu meinem Provider geht.

Viele Grüße, Yogy

von Frank K. (fchk)


Lesenswert?

Hanns-Jürgen M. schrieb:

>> Es gibt komplette Webmailinterfaces, die in PHP geschrieben sind, und
>> die mit IMAP(S) mit einem entsprechenden Mailserver kommunizieren
>> können.
>>
>> Ein Beispiel ist roundcube: https://roundcube.net/
>
> War mir unbekannt, werde ich mir ansehen. Danke für den Tip. Mit PHP
> habe ich mich zuletzt von ziemlich genau zwanzig Jahren beschäftigt, aus
> der Zeit gammelt bei mir auch ein abgestellter Apache Server in der
> Abstellkammer. Falls der noch funktioniert, kann ich das dort alles
> austesten, bevor es zu meinem Provider geht.

In den letzten 20 Jahren hat sich aber einiges an PHP getan. Du solltest 
dann mal ein aktuelles Linux installieren, damit Du das Zeugs dann 
nachher ohne Änderungen auf den Providerserver raufbekommst.

fchk

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hanns-Jürgen M. schrieb:
> Ob es dann weniger Speicher belegt?

Ich weiß jetzt nicht wie viel Speicher dein ESP32 hat. Aber das IDF ist 
so ausgelegt dass noch genug Speicher übrig ist. Im Zweifelsfall hast du 
TLS dann doppelt im System...

> BTW: Mit der ESP-IDF habe ich mich (noch) nicht auseinandergesetzt.

Das Arduino Framework für ESP32 basiert ja auf IDF.

von Hanns-Jürgen M. (yogy)


Lesenswert?

Niklas G. schrieb:
> Hanns-Jürgen M. schrieb:
>> Ob es dann weniger Speicher belegt?
>
> Ich weiß jetzt nicht wie viel Speicher dein ESP32 hat. Aber das IDF ist
> so ausgelegt dass noch genug Speicher übrig ist. Im Zweifelsfall hast du
> TLS dann doppelt im System...
>
>> BTW: Mit der ESP-IDF habe ich mich (noch) nicht auseinandergesetzt.
>
> Das Arduino Framework für ESP32 basiert ja auf IDF.

Hmm, also mein ESP32-Platinchen ist ein "DevKit" mit einem "ESP32 WROOM 
32D"

Meine Rumgugelei nach "email und ESP" landete ich immer wieder bei 
Arduino und das im Zusammenhang mit der erwähnten Library von mobizt. 
Daß SSL/TLS in der IDF enthalten iat, fand ich nirgendwo erwähnt, 
geschweige denn, wie sie aufzurufen ist. Da ich die Arduino Plattform 
für fürchterlich da langsam halte, werde ich mir wohl ohnehin eine 
andere EW-Plattform (von Espressif??) ansehen. Die kommenden langen 
Winterabende bieten sich dazu an.

Und ja, ich habe von den ESPs und deren Philosophie (noch) keine Ahnung.

Viele Grüße, Yogy

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hanns-Jürgen M. schrieb:
> Hmm, also mein ESP32-Platinchen ist ein "DevKit" mit einem "ESP32 WROOM
> 32D"

Also 4 MiB flash. Wenig für einen ESP32 aber sollte lockerst reichen für 
TLS und Email.

Hanns-Jürgen M. schrieb:
> Meine Rumgugelei nach "email und ESP" landete ich immer wieder bei
> Arduino und das im Zusammenhang mit der erwähnten Library von mobizt.

Und wie wäre es mit einer generischen Embedded-Email-Library? Die muss 
ja nicht ESP-spezifisch sein.

Hanns-Jürgen M. schrieb:
> Daß SSL/TLS in der IDF enthalten iat, fand ich nirgendwo erwähnt,
> geschweige denn, wie sie aufzurufen ist.

Erster Google Treffer:
https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/protocols/esp_tls.html

Hanns-Jürgen M. schrieb:
> Da ich die Arduino Plattform
> für fürchterlich da langsam halte

Ob deine E-Mail 7 Millisekunden früher oder später abgeschickt wird 
macht wohl kaum einen Unterschied. Die ESP32 sind sehr schnell, für eine 
gewöhnliche Smarthome-Anwendung kann das Arduino-Framework kaum zu 
langsam sein.

Hanns-Jürgen M. schrieb:
> werde ich mir wohl ohnehin eine
> andere EW-Plattform (von Espressif??) ansehen.

Deutlich schnellere Mikrocontroller als die ESP32 gibt es nicht außer 
ein paar Cortex-M7 oder Spezialisten wie TriCore - die aber wesentlich 
komplexer zu programmieren sind, weil die nicht so ein freundliches 
Rundum-Sorglos-Framework wie die ESP32 mit dem ESP-IDF haben. Aber wie 
schon erwähnt wurde, ist das mit Atomraketen auf Spatzen. Die ersten 
Computer, die SMTP unterstützten, hatten viel weniger Leistung als ein 
ESP32...

Die ESP32 sind absolut prädestiniert für deine Aufgabe außer vielleicht 
du brauchst präzise analog-Hardware oder Ultra-Low-Power.

Hanns-Jürgen M. schrieb:
> Und ja, ich habe von den ESPs und deren Philosophie (noch) keine Ahnung.

Die Philosophie ist: Billige Hardware, WiFi-Support, billig, Massiv 
Flash und Rechenleistung, billig, super einfache Programmierung dank 
umfassendem simpel zu nutzendem Framework (ESP-IDF) und außerdem sind 
sie auch noch billig.

: Bearbeitet durch User
von Franko S. (frank_s866)


Lesenswert?

Hanns-Jürgen M. schrieb:
> Was brauche ich eigentlich?
Ein tls tunnel, ist am einfachsten.

stunnel wurde schon genannt. Das läuft auch ohne OpenWRT auf so ziemlich 
jedem OS, für Windows gibts auch was mit Fenster, die Konfig geht aber 
auch dort über eine Textdatei.

Desweiteren gibts ghosttunnel, tlstunnel....

Damit musst du keine neue Hardware kaufen. Du musst nur an deinen 
Arduinos  die Emailaddresse ändern. Kein Gefrickel mit PHP oder Diensten 
von Dritten,  kein Anmieten von Servern... Das ist die einfachste und 
schnellste Lösung.

Und wenn mal wieder ne neue TLS Version fällig ist einfach stunnel 
udaten, an den Arduinos ändert sich nix.

von Hanns-Jürgen M. (yogy)


Lesenswert?

Niklas G. schrieb:
> Hanns-Jürgen M. schrieb:
>
> Hanns-Jürgen M. schrieb:
>> Da ich die Arduino Plattform
>> für fürchterlich da langsam halte
>
Es geht nicht dabei um die Performance der Arduino-Plattform und nicht 
das Ergebnis. Kompilationszeiten im Minutenbereich sind heutzutage, 
zumindest fpr mich, nicht mehr akzeptabel.

"Früher" zur guten alten Motorola EXORSET 30 Zeit und einem 6809 konnte 
"man" während der Kompilation Kaffee kochen, diesen trinken und die 
Toilette aufsuchen...

von Monk (roehrmond)


Lesenswert?

Als Espressif mit dem ESP8266 anfing gab es Zeitweise drei 
unterschiedliche konkurrierende SDK vom Hersteller. Keins davon wurde 
richtig zuende entwickelt, denn vorher wurde der erste ESP32 marktreif. 
Aus den vorherigen Ansätzen hat Espressif gelernt und und das viel 
bessere IDF für die ESP32 entwickelt. Anfangs wollte nan das auf den 
alten ESP8266 zurück portieren, aber daraus wurde nichts (zu wenig 
Speicher). Während dessen wurden die SDK von ESP8266 schwer 
vernachlässigt  so dass die Arduino Commity aus Teilen von dem NonOS-SDK 
den Arduino Core für den ESP8266 bastelten. Dank zahlreicher 
Fehlerkorrekturen läuft der auch stabil.

Beim ESP8266 ist daher Arduino meine erste Wahl. Die ESP32 würde ich 
lieber direkt mit dem IDF von Espressif programmieren.

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hanns-Jürgen M. schrieb:
> Kompilationszeiten im Minutenbereich sind heutzutage,
> zumindest fpr mich, nicht mehr akzeptabel.

Dann wird's schwierig. Sowohl das ESP-IDF als auch viele andere 
Frameworks brauchen derart lange zum kompilieren (natürlich nur initial 
und wenn man Framework-Einstellungen geändert hat). Dann musst du dir 
dein eigenes System manuell mit TLS-Libraries, IP-Stack und sonstigem 
Drumherum zusammenbasteln, aber ob das dann wirklich in <1min kompiliert 
kann man nicht garantieren. Ein minimales Zephyr-Setup könnte auf einem 
leistungsstarken PC schnell genug kompilieren, aber das ist (noch) nicht 
für ESP32 verfügbar.

Du kannst versuchen ein Java-basiertes System zu nutzen (Android?), Java 
kompiliert sehr schnell. Oder ein System mit externem Netzwerk-Stack 
welcher per AT-Commands angesteuert wird, das ist ja dann fix und fertig 
kompiliert - bei den ESP32 geht das angeblich auch mit TLS. Hast halt 
dann einen Chip mehr.

: Bearbeitet durch User
von Andreas M. (amesser)


Lesenswert?

Niklas G. schrieb:
> Hanns-Jürgen M. schrieb:
>> Kompilationszeiten im Minutenbereich sind heutzutage,
>> zumindest fpr mich, nicht mehr akzeptabel.
>
> Dann wird's schwierig. Sowohl das ESP-IDF als auch viele andere
> Frameworks brauchen derart lange zum kompilieren (natürlich nur initial
> und wenn man Framework-Einstellungen geändert hat). Dann musst du dir
> dein eigenes System manuell mit TLS-Libraries, IP-Stack und sonstigem
> Drumherum zusammenbasteln, aber ob das dann wirklich in <1min kompiliert

Da werden dann immerhin einige hundert Dateien compiliert. Das passiert 
aber auch immer nur beim ersten mal nach "make clean". Beim zweiten mal 
werden doch nur die Änderungen neu übersetzt. Das geht dann deutliche 
schneller.

Kompilierzeiten über 1 Minute sind auch heute nix ungewöhnliches, 
beruflich habe ich z.B. mit OPC UA Stacks zu tun, da dauert ein 
kompletter Build locker mal 15 Minuten oder mehr, da sprechen wir von 
einer 5 stelligen Anzahl von Compileraufrufen. Spätestens bei C++ mit 
Templates brauchts dann richtig Zeit. Ich habe damit auch kein Problem, 
mein Arbeitsstil ist allerdings auch nicht ala Trial&Error jede kleinst 
Änderung zu übersetzen sondern strukturierter ranzugehen, da kanns sein, 
das nur einmal am ganzen Tag überhaupt compiliert wird.

Ansonsten kann ich nur dringend Empfehlen auf Linux umzustellen. Aus 
eigener Erfahrung (Unser Build-System als auch die Compiler existieren 
in der gleichen Version unter Win und unter Linux) kann ich sagen das 
zwischen Linux und Windows locker ein Faktor 5 wenn nicht sogar noch 
mehr steht. Das hat verschiedene Gründe hängt aber vor allem mit dem 
Dateisystem zusammen. NTFS kann nicht so gut mit vielen kleinen Dateien 
(Was man halt bei C mit seinen vielen Headern nun mal hat) und auch die 
Zugriffsmuster vom GCC, der ursprünglich von Posix Systemen her kommt, 
passen wohl nicht so gut zum Windows. Die Visual C Compiler von Windows 
benutzt nicht ohne Grund Pre-Compilierte Headerdateien. (stdafx.h)

Zum Schluss hilft natürlich auch ein vernünftiges Entwicklungssystem, 
hab hier das Glück von 12 Kernen mit HT und richtig viel RAM. Da 
parallelisiert das dann schön. Ich denke mal, das Hanns-Jürgen "make" 
auch so aufruft, das alle Kerne die sein System hat benutzt werden? (Bei 
mir "make -j24", bzw "make -j25", ich gebe immer einen mehr an)

von Harald K. (kirnbichler)


Lesenswert?

Andreas M. schrieb:
> NTFS kann nicht so gut mit vielen kleinen Dateien
> (Was man halt bei C mit seinen vielen Headern nun mal hat) und auch die
> Zugriffsmuster vom GCC, der ursprünglich von Posix Systemen her kommt,
> passen wohl nicht so gut zum Windows.

Man könnte natürlich auch die Partition, auf der die Sourcen 
herumliegen, mit einem anderen Dateisystem formatieren, neben FAT32 
bietet sich da noch exFAT an. Beide dürften den Overhead von NTFS nicht 
aufweisen, und das bei FAT32 existierende Dateigrößenproblem sollte beim 
Gebrauch von Compilern auch nicht relevant sein (unter FAT32 kann eine 
Datei maximal 4 GByte groß werden).

Wäre ja mal eine Untersuchung wert, wie die Buildzeiten sich dann 
verhalten.

von Monk (roehrmond)


Lesenswert?

Auf einer CPU mit nur zwei Kernen ist auch der Virenscanner eine 
erhebliche Bremse.

von Andreas M. (amesser)


Lesenswert?

Harald K. schrieb:
> neben FAT32
> bietet sich da noch exFAT an. Beide dürften den Overhead von NTFS nicht
> aufweisen,

LOL FAT ist doch noch schlimmer. NTFS kann wenigstens bei kleinen 
Dateien die Daten gleich mit in den Verwaltungsinformationen ablegen so 
dass nur ein Block gelesen werden muss. Um bei FAT eine Datei zu lesen, 
müssen drei verschiedene Stellen angeschaut werden: Der 
Directory-Eintrag, die FAT und die eigentlichen Datenblöcke.

von Harald K. (kirnbichler)


Lesenswert?

Und warum ist dann NTFS so langsam, daß zur Verwendung von Linux geraten 
wird? Braten die besseren Fisch?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Andreas M. schrieb:
> Das hat verschiedene Gründe hängt aber vor allem mit dem Dateisystem
> zusammen.

Ich hatte eher den Eindruck dass der Grund dafür ist, dass Linux 
schneller neue Prozesse starten kann als Windows, und zum kompilieren 
von C eben viele einzelne Compiler-Instanzen erstellt werden.

Vielleicht hilft WSL...

von G. K. (zumsel)


Lesenswert?

Harald K. schrieb:
> Und warum ist dann NTFS so langsam, daß zur Verwendung von Linux geraten
> wird? Braten die besseren Fisch?

Ganz einfach: Schnelleres Windows ist kein Business-Case für die 
Shareholder von M$.

von J. S. (jojos)


Lesenswert?

Niklas G. schrieb:
> Vielleicht hilft WSL...

tut es, aber es ist tatsächlich das Filesystem was schneller ist.

von Monk (roehrmond)


Lesenswert?

Niklas G. schrieb:
> Ich hatte eher den Eindruck dass der Grund dafür ist, dass Linux
> schneller neue Prozesse starten kann als Windows

Das auch, aber das Filesystem ist ist größte Bremse.

Davon ist übrigens nicht nur der gcc betroffen. Mir fiel es zuerst mit 
Java (SAP Hybris) auf.

: Bearbeitet durch User
von Ein T. (ein_typ)


Lesenswert?

J. S. schrieb:
> Niklas G. schrieb:
>> Vielleicht hilft WSL...
>
> tut es, aber es ist tatsächlich das Filesystem was schneller ist.

Nicht nur das, auch Speicheroperationen und die Erzeugung von Prozessen 
sind unter Linux deutlich schneller.

von Hanns-Jürgen M. (yogy)


Lesenswert?

Nun, das alles hilft mir (noch) nicht. Die SSL/TLS Arduino-Geschichte 
habe ich beiseite gelegt.

Ich habe mich ein wenig bei Espressif umgesehen, um eine passende IDE 
zusammenzustellen (fertig gibt es wohl nichts). Ich fand da etwas mit 
Visual Code als Editor, doch beim Installieren der notwendigen 
Erweiterungen bekam ich dann die Meldung: Geht nicht auf meinem System.

Das arbeitet bislang einwandfrei unter Windoof 7. Ein Upgrade auf 
8...10..11 oder noch weiter kommt für mich unter keinen Umständen 
infrage. Ich habe damals (2013) bei Umstieg von XP auf 7 so viele 
Probleme erlebt, so daß ich mir zusätzlich einen XP-Rechner aufgebaut 
habe. (VMs waren nicht die Lösung). Zudem hasse ich das "Kacheldesign" 
und jegliche Überwachungsmethoden seitens der Gates-Bande.

Also habe ich vorläufig alles auf Eis gelegt. Notfalls kann ich ja 
Arduino einsetzen. Ich werde mir wohl irgendwann eine neue Workstation 
mit LINUX zusammenstellen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hanns-Jürgen M. schrieb:
> fertig gibt es wohl nichts

Es gibt ein fertiges und gut funktionierendes Eclipse Plugin. Aber ob 
das unter Windows 7 funktioniert...

Hanns-Jürgen M. schrieb:
> Ein Upgrade auf 8...10..11 oder noch weiter kommt für mich unter keinen
> Umständen infrage

Dann bist du auf dich allein gestellt. Keiner unterstützt mehr derart 
alte Betriebssysteme.

Arduino für ESP32 basiert ja auch auf dem ESP-IDF, da ist dann natürlich 
das TLS auch schon mit dabei.

von Hanns-Jürgen M. (yogy)


Lesenswert?

Niklas G. schrieb:
> Hanns-Jürgen M. schrieb:
>> fertig gibt es wohl nichts
>
> Es gibt ein fertiges und gut funktionierendes Eclipse Plugin. Aber ob
> das unter Windows 7 funktioniert...

Installation hat nicht funktioniert. Hängt wohl irgendwie mit Java 
zusammen, habe aber Version 1.8.0_421
>
> Hanns-Jürgen M. schrieb:
>> Ein Upgrade auf 8...10..11 oder noch weiter kommt für mich unter keinen
>> Umständen infrage
>
> Dann bist du auf dich allein gestellt. Keiner unterstützt mehr derart
> alte Betriebssysteme.

Ja, ich weiß. Final Destination: LINUX
>
> Arduino für ESP32 basiert ja auch auf dem ESP-IDF, da ist dann natürlich
> das TLS auch schon mit dabei.

Das habe ich mitbekommen, deswegen auch die Suche nach einer neuen IDE. 
Das Thema brennt mir aktuell nicht auf den Nägeln. Zunächst muß ich mir 
einen weiteren Rechner für Linux konfigurieren

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hanns-Jürgen M. schrieb:
> Final Destination: LINUX

Achtung, auch da gibt es Updates und die verändern auch das Aussehen.

von Hanns-Jürgen M. (yogy)


Lesenswert?

Niklas G. schrieb:
> Hanns-Jürgen M. schrieb:
>> Final Destination: LINUX
>
> Achtung, auch da gibt es Updates und die verändern auch das Aussehen.

Mag sein. Ich bin ein Gegner von Microsoft-Windoof und zudem den Gates 
Machenschaften. Von daher lebe ich künftig lieber mit Linux-Updates. 
Zudem gibt es ja mehrere graphische Oberflächen. Und ich fühle mich sehr 
wohl mit der Kommandozeile und dem Midnight-Commander. Ist alles viel 
schneller als die Mäuserutscherei (außer bei Graphic Programmen 
natürlich)

Aber nochmals zum Thema. Ich hatte das bei meinem letzten Posting 
vergessen zu erwähnen. Es gibt da offenbar einen supertollen kleinen 
Baustein, der die Lösung aller SSL-Fragen bringen könnte:

ATMEL ATECC508A

Kennr hier jemand diesen Baustein bzw. hat schon damit gearbeitet?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hanns-Jürgen M. schrieb:
> ATMEL ATECC508A
>
> Kennr hier jemand diesen Baustein bzw. hat schon damit gearbeitet?

Davon abgesehen, dass der NRND ist: Der implementiert nicht das TLS. 
Das musst du immer noch auf dem Mikrocontroller haben, inklusive der 
Verschlüsselungsalgorithmen (AES etc). Dieser Chip (und verschiedene 
ähnliche Produkte) sind nur dazu da, das TLS noch sicherer zu machen, 
indem die Schlüssel besonders sicher abgelegt werden. Das macht die 
TLS-Implementation also noch komplizierter.

Die TLS-Implementation auf einen separaten Chip auszulagern macht keinen 
Sinn, weil man die auch einfach per Software dazubauen kann, genau wie 
es z.B. beim ESP-IDF schon fix und fertig gemacht ist. Dann kann man es 
auch später noch aktualisieren. Ironischerweise unterstützt das ESP-IDF 
den ATECC608A, den Nachfolger des ATECC508A, um die Schlüssel abzulegen, 
aber die eigentliche TLS-Implementation bleibt natürlich auf dem ESP32.

Wie gesagt kann man einen ESP32 auch per AT-Firmware betreiben und somit 
dessen integrierte TLS-Lösung von "außen" nutzen, das entspricht dann 
einer Auslagerung der TLS-Funktionalität ohne dass man die Software 
selbst kompilieren müsste. Aber letztendlich ist es auch nur ein 
Mikrocontroller. Also statt des ATECC508A einen ESP32 nehmen, die 
fertige AT-Firmware drauf flashen und von einem beliebigen 
Mikrocontroller aus per UART ansteuern und du hast dein TLS fertig. Dazu 
gibt es übrigens auch Äquivalente für Mobilfunk/LTE statt WiFi, die 
genauso per AT-Commands TLS machen können, falls das interessant ist.

Niklas G. schrieb:
> Oder ein System mit externem Netzwerk-Stack
> welcher per AT-Commands angesteuert wird, das ist ja dann fix und fertig
> kompiliert - bei den ESP32 geht das angeblich auch mit TLS. Hast halt
> dann einen Chip mehr.


Hanns-Jürgen M. schrieb:
> Mag sein. Ich bin ein Gegner von Microsoft-Windoof und zudem den Gates
> Machenschaften.

Warum benutzt du dann nicht schon längst Linux? Das gibt's auch nicht 
erst seit gestern.

: Bearbeitet durch User
von Monk (roehrmond)


Lesenswert?

Hanns-Jürgen M. schrieb:
> Ich bin ein Gegner von ... den Gates Machenschaften.

Der Herr Gates ist da seit 2008 komplett raus.

von Hanns-Jürgen M. (yogy)


Lesenswert?

Niklas G. schrieb:
> Hanns-Jürgen M. schrieb:
>> ATMEL ATECC508A
>>
>> Kennr hier jemand diesen Baustein bzw. hat schon damit gearbeitet?
>
> Davon abgesehen, dass der NRND ist: Der implementiert nicht das TLS.

......
>

>
> Niklas G. schrieb:
>> Oder ein System mit externem Netzwerk-Stack
>> welcher per AT-Commands angesteuert wird, das ist ja dann fix und fertig
>> kompiliert - bei den ESP32 geht das angeblich auch mit TLS. Hast halt
>> dann einen Chip mehr.
>

Danke für die Info und den Tip. Hilft mir sehr.
>
> Hanns-Jürgen M. schrieb:
>> Mag sein. Ich bin ein Gegner von Microsoft-Windoof und zudem den Gates
>> Machenschaften.
>
> Warum benutzt du dann nicht schon längst Linux? Das gibt's auch nicht
> erst seit gestern.

Nun ja, gute Frage. Ich habe mir, ich glaube, es war 1998, ein Linux 
System mit Suse 6 aufgebaut uns auch damit ein wenig experimentiert 
(Kommandozeile). Da ich in viel früheren Jahren beruflich mit einem OS/9 
-68k VME-Bus System zu tun hatte, waren mir viele Dinge noch bekannt. 
Als graphische Oberfläche nutzte Suse 6, so glaube ich, KDE.  Fand ich 
nicht so prickelnd. Schließlich gab ich es auf und nutzte zum Webbrowsen 
weiter Netscape mit win95. Nur dafür. Für die anderen Dinge hatte ich 
mein DOS-System.

2002 installierte ich SUSE 8 auf einem "nackten" System, ich nutzte es 
zur Implementierung eines webbasierten Marktplatzsystems (eines 
"Tauschringes", ähnlich ebay). dazu gehörten auch Dinge wie "Firewall" 
(iptables?) und Mailserver. Alles lange her.

Warum ich dann allmählich über Win 2000 und XP zu Win 7 kam, hing mit 
der Verfügbarkeit der von mir eingesetzten SW-Pakete nur für Windows 
zusammen. EAGLE gab es nicht mehr für DOS, AUTOCAD ebenso wenig. Dann 
folgte Bequemlichkeit.

Da ich mich schon vor langer Zeit aus dem Erwerbsleben zurückgezogen 
habe, brauche ich nun keine Updates der SW-Pakete mehr, viele Dinge gibt 
es auch für Linux, wie ich feststellen konnte, so daß der Umstieg, auch 
wenn er mir heute viel Zeit kosten wird, kommen wird. Ich denke, 
zunächst als zusätzliche Maschine.

BTW: In einer VM habe ich Ubuntu sowie ein DEBIAN laufen

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hanns-Jürgen M. schrieb:
> BTW: In einer VM habe ich Ubuntu sowie ein DEBIAN laufen

Dann arbeite doch da mit Eclipse und dem ESP32 Plugin...

von Hanns-Jürgen M. (yogy)


Lesenswert?

Hmm, dann mache ich das mal. Installation läuft gerade.. ist ein wenig 
zäh
Ich berichte...

von Thomas K. (joshua314)


Lesenswert?

Hanns-Jürgen M. schrieb:
> Thomas K. schrieb:
>> Hanns-Jürgen M. schrieb:
>>> Als HW nutze ich dazu Arduino-Hardware (Mega oder zunehmend  DUE) mit
>>> einem Wiznet W5100 oder W5500 Ethernetmodul, die ich über das
>>> Atmel-Studio in ANSI-C programmiere.
>>
>> Hallo Hans Jürgen,
>>
>> mein einfacher kurzer Tipp an dich.
>> Bei Arduino Hardware und Netzwerk.
>> Setze alles auf MQTT auf. Sprich -- Deine Sensoren melden (publish) den
>> Zustand an den MQTT Broker.   Deine Aktoren bestellen (subscribe) die
>> Commandos.  Dann hast du ein N to N Netzwerk.  N Anzahl Daten Sender N
>> Anzahl die die Daten empfangen.   Die gleiche Daten an N Anzahl
>> Datenverarbeiter.
>>
>> Das ganze kannst du dann auf einen nano-pi neo packen.
>> 1 Watt    40mm x 40mm Linux quadcore Linux Rechner.
>> zum Beipiel mit FHEM, IO-Broker, NodeRed.
>> Gerade bei NodeRED kannst du Grafisch die Daten nehmen, einmal per Mail
>> versenden, gleichzeitig per Telrgramm zusenden und zur Kontrolle in eine
>> Datenbank schicken.
>>
>> Wenn du mehr Info brauchst ... sende mir eine PN
>>
>> Gruß Thomas
>
> Hallo Thomas,
>
> mit MQTT und HomeAssist habe ich mich vor 2..3 Jahren einmal
> auseinandergesetzt und das Ganze auch zusammen mit ESP8266/ESP32 etc zum
> Spielen gebracht. Alles ganz nett, aber ich brauche einen dedizierten
> MQTT Server. Solange das alles auf ein Haus/Grundstück beschränkt
> bleibt, ist das auch ganz toll, aber wenn die Sensor- und Actorelemente
> Hundert oder mehr km entfernt sind, geht das halt (bei mir) nicht, da
> ich noch kleine Möglichkeit gefunden habe, die Anschlüsse der "dt.
> Glasfaser" von außen zugänglich zu machen. Früher bei der Telekom / DSL
> mit DynDNS hatte das alles funktioniert.
>
> Aber danke für Deine Vorschläge und Mühen.
>
> Hanns-Jürgen aka Yogy
>
> PS: Ich verwende lokal ein eigenes Netzwerkprotokoll, Struktur ähnlich
> dem EIB

Hallo Hanns-Jürgen,

klar bleibt alles im Haus !!!!!!
Ich lasse mir auch von keinem in "Mein Netzwerk" schauen.
Der MQTT Server ist ein Kleines Programm und läuft bei dir auf dem 
MiniServer.     schreib mir ne PM     dann können wir mal telefonieren

Gruß Thomas

von Hanns-Jürgen M. (yogy)


Lesenswert?

Thomas K. schrieb:

>
> Hallo Hanns-Jürgen,
>
> klar bleibt alles im Haus !!!!!!
> Ich lasse mir auch von keinem in "Mein Netzwerk" schauen.
> Der MQTT Server ist ein Kleines Programm und läuft bei dir auf dem
> MiniServer.     schreib mir ne PM     dann können wir mal telefonieren
>
> Gruß Thomas

Hallo Thomas,

ich muß mir meine "alten" MQTT-Sachen aus der Ablage holen, dann kann 
ich mich näher dazu äußern, auch warum ich an "meinem" Protokoll 
festgehalten habe. Ich melde mich dann

Viele Grüße, Hanns-Jürgen

von Hanns-Jürgen M. (yogy)


Lesenswert?

Niklas G. schrieb:
> Hanns-Jürgen M. schrieb:
>> BTW: In einer VM habe ich Ubuntu sowie ein DEBIAN laufen
>
> Dann arbeite doch da mit Eclipse und dem ESP32 Plugin...

Hallo Niklas,

nachdem ich gestern gut 4h und heute wieder mich an mit der Installation 
erfolglos vergnügt habe, lege ich das Ganze bis auf Weiteres auf Eis.

Ich hatte gehofft, heute ein Demoprogrämmchen zum Spiele zu bringen, war 
wohl nix.

Viele Grüße, Hanns-Jürgen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.