<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Franz Steinkress</title>
    <description>The latest articles on DEV Community by Franz Steinkress (@franzsteinkress).</description>
    <link>https://dev.to/franzsteinkress</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3833998%2Facdff2c4-0179-4f6f-ac49-5a980f5f8c31.png</url>
      <title>DEV Community: Franz Steinkress</title>
      <link>https://dev.to/franzsteinkress</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/franzsteinkress"/>
    <language>en</language>
    <item>
      <title>Zero-Trust-Projekt mit C++20 Coroutinen und Secure mTLS Services</title>
      <dc:creator>Franz Steinkress</dc:creator>
      <pubDate>Thu, 19 Mar 2026 20:06:20 +0000</pubDate>
      <link>https://dev.to/franzsteinkress/zero-trust-projekt-mit-c20-coroutinen-und-secure-mtls-services-3g6i</link>
      <guid>https://dev.to/franzsteinkress/zero-trust-projekt-mit-c20-coroutinen-und-secure-mtls-services-3g6i</guid>
      <description>&lt;p&gt;Hallo zusammen, das ist mein erster Post hier. Ich möchte mein aktuelles Projekt vorstellen, mit dem ich mich tiefer in die Netzwerksicherheit mittels modernem C++ einarbeite. Es geht um den Aufbau einer Zero-Trust-Architektur mittels mTLS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Warum mTLS und nicht nur einfaches TLS?
&lt;/h3&gt;

&lt;p&gt;In vielen Systemen wird darauf vertraut, dass der Server sicher ist. Aber in einer Zero-Trust-Umgebung reicht das nicht aus. Ich wollte verstehen, wie man sicherstellt, dass auch der Server genau weiß, wer der Client ist. Bei mutual TLS (mTLS) müssen beide Seiten ein gültiges X.509-Zertifikat vorweisen. Das ist die Basis für echte Identitätsprüfung im Netzwerk, statt nur für reine Verschlüsselung.&lt;/p&gt;

&lt;h3&gt;
  
  
  Der Tech-Stack
&lt;/h3&gt;

&lt;p&gt;Ich habe aktuelle Standards genutzt, um zu sehen, wie sie in der Praxis zusammenspielen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;C++20 Coroutinen:&lt;/strong&gt; Um den asynchronen Netzwerk-Code lesbar zu halten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boost.Asio &amp;amp; OpenSSL:&lt;/strong&gt; Das technische Fundament für die mTLS-Abwicklung.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker &amp;amp; GitHub Actions:&lt;/strong&gt; Für eine saubere Build-Umgebung und automatisierte Tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ein Blick auf den Code
&lt;/h3&gt;

&lt;p&gt;Mein Interesse galt der Nutzung von &lt;code&gt;co_await&lt;/code&gt;, um damit die Zersplitterung asynchroner Abläufe durch Callback-Strukturen zu vermeiden. Hier ist ein kleiner Ausschnitt des Handshakes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Ein einfacher asynchroner mTLS Handshake&lt;/span&gt;
&lt;span class="n"&gt;asio&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;awaitable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;handle_session&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;asio&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ssl&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tcp&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// 1. Handshake durchführen: asynchrones Warten auf den Handshake&lt;/span&gt;
        &lt;span class="k"&gt;co_await&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;async_handshake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;asio&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ssl&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;stream_base&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;asio&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;use_awaitable&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Daten sicher verarbeiten...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;exception&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Fehlerbehandlung für fehlgeschlagene Zertifikatsprüfung&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  DevOps
&lt;/h3&gt;

&lt;p&gt;Neben dem C++ Code habe ich gemerkt, dass die Infrastruktur oft die meiste Zeit benötigt. Damit die mTLS-Tests funktionieren, habe ich die PKI-Erzeugung (Zertifikate mit SAN) automatisiert. &lt;/p&gt;

&lt;p&gt;Ein nützliches Nebenprodukt war ein kleines PowerShell-Skript (&lt;code&gt;sort_logs.ps1&lt;/code&gt;), das die verzahnten Logs von Client und Server aus den Docker-Containern chronologisch sortiert, um die Fehlersuche im Handshake zu erleichtern.&lt;/p&gt;
&lt;h3&gt;
  
  
  Dokumentation
&lt;/h3&gt;

&lt;p&gt;Ich habe den Code mit Doxygen dokumentiert und die Ergebnisse via GitHub Actions direkt als Pages bereitgestellt. Wer einen Blick in die Details werfen möchte:&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/franzsteinkress" rel="noopener noreferrer"&gt;
        franzsteinkress
      &lt;/a&gt; / &lt;a href="https://github.com/franzsteinkress/Zero-Trust-Architektur" rel="noopener noreferrer"&gt;
        Zero-Trust-Architektur
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      mTLS C++ Microservices Demonstration
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🛡️ Zero-Trust-Architektur: mTLS C++ Microservices&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/023d97a8efbd6d9cbbee0dc79b1815e0ad11cb944eb4ff57a841f2e5494c5359/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f432b2b2d32302d626c75652e7376673f7374796c653d666c61742d737175617265266c6f676f3d63253242253242"&gt;&lt;img src="https://camo.githubusercontent.com/023d97a8efbd6d9cbbee0dc79b1815e0ad11cb944eb4ff57a841f2e5494c5359/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f432b2b2d32302d626c75652e7376673f7374796c653d666c61742d737175617265266c6f676f3d63253242253242" alt="C++"&gt;&lt;/a&gt; &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/c488069a67aa5a5a441352f167c1455acb1b9c8f6f8f176d2fa06d15624eeafc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f636b65722d456e61626c65642d626c75653f7374796c653d666c61742d737175617265266c6f676f3d646f636b6572"&gt;&lt;img src="https://camo.githubusercontent.com/c488069a67aa5a5a441352f167c1455acb1b9c8f6f8f176d2fa06d15624eeafc/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f636b65722d456e61626c65642d626c75653f7374796c653d666c61742d737175617265266c6f676f3d646f636b6572" alt="Docker"&gt;&lt;/a&gt; &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/5dc48b8ba3b612098710c063b6eea39fa57f67c5e4a46c9e5d86b32c60216932/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5653253230436f64652d446576436f6e7461696e6572732d3030374143433f7374796c653d666c61742d737175617265266c6f676f3d76697375616c2d73747564696f2d636f6465"&gt;&lt;img src="https://camo.githubusercontent.com/5dc48b8ba3b612098710c063b6eea39fa57f67c5e4a46c9e5d86b32c60216932/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5653253230436f64652d446576436f6e7461696e6572732d3030374143433f7374796c653d666c61742d737175617265266c6f676f3d76697375616c2d73747564696f2d636f6465" alt="VS Code"&gt;&lt;/a&gt; &lt;a href="https://DEIN_USER.github.io/REPRO_NAME/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b33bdb0e171dc9db006dbfcd5c938de1460a3f792ce479922a0f7b7192fe96b6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f63732d646f787967656e2d626c75653f7374796c653d666c61742d737175617265" alt="Documentation"&gt;&lt;/a&gt; &lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a7e65aee57b11d28e4caff8b945729a66be0bb663f7f93bd24c5aa65699f148e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e7376673f7374796c653d666c61742d737175617265" alt="License: MIT"&gt;&lt;/a&gt;
Dieses Projekt demonstriert eine hochsichere &lt;strong&gt;Service-to-Service Kommunikation&lt;/strong&gt; in verteilten Systemen. Es wurde als technischer Proof-of-Concept für zwei zentrale Säulen moderner Softwareentwicklung entworfen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Moderne Asynchronität:&lt;/strong&gt; Nutzung von &lt;strong&gt;C++20 Coroutinen&lt;/strong&gt; in Verbindung mit &lt;strong&gt;Boost.Asio&lt;/strong&gt;, um hocheffiziente, nicht-blockierende Netzwerkoperationen bei gleichzeitig lesbarem Code-Fluss zu ermöglichen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sicherheit durch Design (DSA-Compliance):&lt;/strong&gt; Im Kontext des &lt;strong&gt;Digital Services Act (DSA)&lt;/strong&gt; der EU rücken Sicherheit, Identitätsprüfung und der Schutz digitaler Infrastrukturen in den Fokus. Diese Implementierung nutzt &lt;strong&gt;mTLS (Mutual TLS)&lt;/strong&gt;, um eine Zero-Trust-Umgebung zu schaffen, in der jeder Dienst seine Identität kryptographisch nachweisen muss.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mutual TLS (mTLS):&lt;/strong&gt; Beidseitige Zertifikatsprüfung (Server prüft Client, Client prüft Server).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C++20 Standard:&lt;/strong&gt; Nutzung von &lt;code&gt;std::format&lt;/code&gt;, &lt;code&gt;std::chrono&lt;/code&gt; und moderner Speicherverwaltung.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Trust-Prinzip:&lt;/strong&gt; Kein Vertrauen ohne explizite Identitätsbestätigung.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker-Native:&lt;/strong&gt; Vollständig isolierte Umgebung für reproduzierbare Tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠️ Voraussetzungen&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Das Projekt ist für die Nutzung mit &lt;strong&gt;VS Code DevContainers&lt;/strong&gt; optimiert, was die Installation von Abhängigkeiten (OpenSSL, Boost, CMake)…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/franzsteinkress/Zero-Trust-Architektur" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Source Code:&lt;/strong&gt; &lt;a href="https://github.com/franzsteinkress/Zero-Trust-Architektur/" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API-Referenz:&lt;/strong&gt; &lt;a href="https://franzsteinkress.github.io/Zero-Trust-Architektur/" rel="noopener noreferrer"&gt;Doxygen Dokumentation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Fazit:&lt;/strong&gt; Ich bin gespannt auf euer Feedback oder Tipps, wie man solche mTLS-Strukturen heute noch robuster gestalten könnte.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>security</category>
      <category>germandev</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
