<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Verschlüsselung Archives - yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</title>
	<atom:link href="https://yourdevice.ch/tag/verschluesselung/feed/" rel="self" type="application/rss+xml" />
	<link>https://yourdevice.ch/tag/verschluesselung/</link>
	<description></description>
	<lastBuildDate>Wed, 14 Oct 2026 04:58:28 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://yourdevice.ch/wp-content/uploads/2022/11/cropped-ydlogo-e1667602958877-32x32.png</url>
	<title>Verschlüsselung Archives - yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</title>
	<link>https://yourdevice.ch/tag/verschluesselung/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Let&#039;s Encrypt 64 Tage: kürzere Zertifikate ab 2027</title>
		<link>https://yourdevice.ch/lets-encrypt-64-tage/</link>
					<comments>https://yourdevice.ch/lets-encrypt-64-tage/#respond</comments>
		
		<dc:creator><![CDATA[Mario]]></dc:creator>
		<pubDate>Tue, 13 Oct 2026 08:55:49 +0000</pubDate>
				<category><![CDATA[Netzwerk & Sicherheit]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Neuigkeiten]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Verschlüsselung]]></category>
		<guid isPermaLink="false">https://yourdevice.ch/?p=23205</guid>

					<description><![CDATA[<p>Let's Encrypt stellt ab 10. Februar 2027 nur noch 64 Tage gültige Zertifikate aus. Was certbot, acme.sh und Caddy brauchen und wie ihr ab 14.10. testet.</p>
<p>The post <a href="https://yourdevice.ch/lets-encrypt-64-tage/">Let&#039;s Encrypt 64 Tage: kürzere Zertifikate ab 2027</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Let's Encrypt verkürzt die Laufzeit seiner Zertifikate: Ab dem 10. Februar 2027 stellt die grösste Zertifizierungsstelle des Netzes standardmässig nur noch Zertifikate mit 64 Tagen Gültigkeit aus, statt wie bisher 90. Das hat Let's Encrypt am 7. Oktober 2026 <a href="https://letsencrypt.org/2026/10/07/64-day-certs">in einem Blogbeitrag bestätigt</a>, und in der Testumgebung gilt die neue Laufzeit schon ab übermorgen, dem 14. Oktober. Wer zuletzt unsere Anleitung zu <a href="https://yourdevice.ch/mtls-mit-caddy-einrichten/">mTLS mit Caddy</a> gelesen hat, kennt das Muster bereits: Let's Encrypt hat dort im Juli die Client-Zertifikate endgültig gestrichen, jetzt schrumpft die Laufzeit der Server-Zertifikate.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="573" src="https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-titelbild-1024x573.png" alt="Titelbild zur Laufzeit von Let's-Encrypt-Zertifikaten: Oben links das Let's-Encrypt-Logo. Links ein ausgegrauter Block mit durchgestrichenem „90 Tage“ als bisherige Standardlaufzeit, rechts ein blau umrandeter Block mit „64 Tage“ als neue Standardlaufzeit ab 10.02.2027, mit dem Hinweis, dass die Testumgebung ab 14.10.2026 umstellt und ab Februar 2028 45 Tage gelten." class="wp-image-23203" srcset="https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-titelbild-1024x573.png 1024w, https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-titelbild-300x168.png 300w, https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-titelbild-768x430.png 768w, https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-titelbild-1536x860.png 1536w, https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-titelbild-500x280.png 500w, https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-titelbild.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Für die meisten Server ist das kein Drama, sofern die Erneuerung wirklich automatisch läuft. Für alle, bei denen irgendwo eine feste Zahl in einem Cronjob steht, ist es eine Frist. Diese Meldung sortiert, was sich wann ändert, welche verbreiteten ACME-Programme damit klarkommen und wo es eng wird.</p>





<h2 class="wp-block-heading">Let's Encrypt 64 Tage: die Termine im Überblick</h2>



<p class="wp-block-paragraph">Ganz neu ist der Plan nicht. Bereits am 2. Dezember 2025 hatte Let's Encrypt <a href="https://letsencrypt.org/2025/12/02/from-90-to-45">den Weg von 90 auf 45 Tage angekündigt</a>, mit einem Zwischenschritt über 64 Tage. Neu ist, dass die Termine jetzt verbindlich bestätigt sind und der Testbetrieb deutlich früher beginnt als damals in Aussicht gestellt. Die Daten im Einzelnen:</p>



<ul class="wp-block-list">
<li><strong>Seit 13. Mai 2026:</strong> Wer will, kann über das Profil <code>tlsserver</code> bereits <a href="https://letsencrypt.org/docs/profiles/">45 Tage gültige Zertifikate</a> beziehen. Das ist freiwillig und für Frühstarter gedacht.</li>



<li><strong>14. Oktober 2026:</strong> Die Testumgebung (Staging) stellt auf 64-Tage-Zertifikate um, und zwar mit genau dem Verhalten, das ab Februar in der Produktion gilt. Das bestätigt ein Mitarbeiter von Let's Encrypt <a href="https://community.letsencrypt.org/t/when-will-the-february-10-2027-classic-profile-change-64-day-certificates-reach-the-staging-environment/251945">im Community-Forum</a>.</li>



<li><strong>10. Februar 2027:</strong> Das Standardprofil <code>classic</code> liefert nur noch 64 Tage. Gleichzeitig sinkt die Zeit, während der eine erfolgreiche Domainprüfung wiederverwendet werden darf, von 30 auf 10 Tage.</li>



<li><strong>Um den 11. Mai 2027:</strong> Das letzte 90-Tage-Zertifikat läuft voraussichtlich ab. Gültige Zertifikate werden laut Let's Encrypt im Zuge der Umstellung nicht widerrufen.</li>



<li><strong>16. Februar 2028:</strong> Das Standardprofil sinkt auf 45 Tage, die Wiederverwendung einer Domainprüfung auf sieben Stunden.</li>
</ul>



<p class="wp-block-paragraph">Unverändert bleiben nach Angaben von Let's Encrypt die Rate Limits, die ACME-Adressen und die Zertifikatskette. Zu den Rate Limits hatte Let's Encrypt schon im Februar <a href="https://letsencrypt.org/2026/02/24/rate-limits-45-day-certs">einen eigenen Beitrag</a> veröffentlicht: Erneuerungen zählen nicht auf die Grenzen für neue Zertifikate, also ändert die häufigere Erneuerung daran nichts.</p>



<h3 class="wp-block-heading">Was gegenüber Dezember neu ist</h3>



<p class="wp-block-paragraph">Im Dezember hiess es noch, jede Änderung erreiche die Testumgebung etwa einen Monat vor der Produktion. Jetzt sind es fast vier Monate. Das ist die eigentlich nützliche Nachricht dieser Woche: Wer seine Erneuerung, seine Reload-Skripte und seine Überwachung gegen echte 64-Tage-Zertifikate prüfen will, kann das ab dem 14. Oktober tun und muss nicht bis Januar warten. Ausserdem nennt die Mitteilung zum ersten Mal ein konkretes Ablaufdatum für die letzten 90-Tage-Zertifikate.</p>



<h2 class="wp-block-heading">Warum die Zertifikate kürzer werden</h2>



<p class="wp-block-paragraph">Let's Encrypt handelt nicht aus eigenem Antrieb. Im April 2025 hat das CA/Browser Forum, in dem sich Zertifizierungsstellen und Browserhersteller auf gemeinsame Regeln einigen, den <a href="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/">Antrag SC081v3</a> angenommen. Er senkt die höchstzulässige Laufzeit öffentlich vertrauter Zertifikate schrittweise von 398 auf 47 Tage und die Wiederverwendung einer Domainprüfung von 398 auf 10 Tage. Begonnen hat das im März 2026, abgeschlossen ist es im März 2029. Die Zwischenschritte fasst der DNS-Anbieter DNSimple <a href="https://support.dnsimple.com/articles/announcement-ssl-certificate-validity-changes/">übersichtlich zusammen</a>: höchstens 200 Tage ab dem 15. März 2026, 100 Tage ab dem 15. März 2027 und 47 Tage ab dem 15. März 2029. Alle vier grossen Browserhersteller, Apple, Google, Microsoft und Mozilla, haben zugestimmt, keine Zertifizierungsstelle hat dagegen gestimmt.</p>



<p class="wp-block-paragraph">Die Begründung ist nüchtern. Ein Zertifikat, dessen Schlüssel gestohlen wurde, bleibt bis zu seinem Ablauf gültig, wenn der Widerruf nicht greift, und der Widerruf greift in der Praxis schlecht. Je kürzer die Laufzeit, desto kürzer das Zeitfenster für Missbrauch. Let's Encrypt schreibt dazu im Dezemberbeitrag, kürzere Laufzeiten begrenzten den Schaden einer Kompromittierung und machten den Widerruf wirksamer.</p>



<p class="wp-block-paragraph">Bemerkenswert ist das Tempo. Let's Encrypt lag mit 90 Tagen schon immer weit unter den Branchenregeln und bleibt das auch: Die 64 Tage greifen einen Monat, bevor die 100-Tage-Grenze überhaupt in Kraft tritt. Kommerzielle Anbieter, die früher Jahreszertifikate verkauften, mussten schon im März 2026 auf 200 Tage herunter und dürfen ihren Kunden ab März 2027 erklären, warum das Produkt nach 100 Tagen erneuert werden muss. Das ist allerdings nicht euer Problem.</p>



<h2 class="wp-block-heading">Wann certbot, acme.sh und Caddy erneuern</h2>



<p class="wp-block-paragraph">Ob die Umstellung euch etwas angeht, hängt fast nur davon ab, wie euer ACME-Programm den Erneuerungszeitpunkt bestimmt. Es gibt drei Verfahren: einen festen Abstand vor dem Ablauf, einen Anteil der Laufzeit, oder die Frage an die Zertifizierungsstelle selbst. Für Letzteres gibt es seit Juni 2025 den Standard <a href="https://www.rfc-editor.org/rfc/rfc9773.html">RFC 9773, ACME Renewal Information (ARI)</a>: Der Server nennt dem Client ein Zeitfenster, in dem er erneuern soll. Let's Encrypt <a href="https://letsencrypt.org/upcoming-features/">bietet ARI seit März 2023 an</a>.</p>



<figure class="wp-block-image size-large"><a href="https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-erneuerung.png"><img decoding="async" width="1024" height="604" src="https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-erneuerung-1024x604.png" alt="Übersicht, wann gängige ACME-Programme ein 64 Tage gültiges Let's-Encrypt-Zertifikat erneuern. Caddy ab 2.8 und certbot ab 4.1 fragen per ARI das von Let's Encrypt vorgeschlagene Zeitfenster ab, keine Anpassung nötig. certbot 4.0 in Debian 13 erneuert bei einem Drittel Restlaufzeit, nach rund 43 Tagen mit rund 21 Tagen Puffer. certbot bis 3.x in Debian 12 und Ubuntu 24.04 erneuert fest 30 Tage vor Ablauf, nach 34 Tagen mit 30 Tagen Puffer. Rot markiert: acme.sh mit der Vorgabe von 60 Tagen lässt nur 4 Tage Puffer und kommt bei 45 Tagen ab 2028 zu spät; ein eigenes Skript mit fest eingetragenen 80 oder 83 Tagen erneuert erst nach Ablauf." class="wp-image-23204" srcset="https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-erneuerung-1024x604.png 1024w, https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-erneuerung-300x177.png 300w, https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-erneuerung-768x453.png 768w, https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-erneuerung-1536x906.png 1536w, https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-erneuerung-2048x1208.png 2048w, https://yourdevice.ch/wp-content/uploads/2026/10/lets-encrypt-64-tage-erneuerung-500x295.png 500w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">Caddy: erledigt sich selbst</h3>



<p class="wp-block-paragraph">Caddy unterstützt ARI <a href="https://github.com/caddyserver/caddy/releases/tag/v2.8.0">seit Version 2.8</a> und zieht es zusammen mit Laufzeit und Widerrufsstatus heran, um eine Erneuerung auszulösen. Wer Caddy nach unserer Anleitung zum <a href="https://yourdevice.ch/caddy-reverse-proxy-einrichten/">Caddy Reverse Proxy</a> betreibt, muss nichts ändern.</p>



<h3 class="wp-block-heading">certbot: die Version entscheidet</h3>



<p class="wp-block-paragraph">Bei certbot kommt es darauf an, welche Fassung eure Distribution mitliefert. Bis Version 3 erneuerte certbot fest 30 Tage vor Ablauf. <a href="https://community.letsencrypt.org/t/certbot-4-0-0-released/236108">Version 4.0 vom 8. April 2025</a> stellte auf ein Drittel Restlaufzeit um, <a href="https://community.letsencrypt.org/t/certbot-4-1-0-release/238369">Version 4.1 vom 10. Juni 2025</a> fragt zusätzlich ARI ab und erneuert bei Let's Encrypt laut Changelog typischerweise nach rund zwei Dritteln der Laufzeit.</p>



<p class="wp-block-paragraph">Debian 12 liefert certbot 2.1.0, Debian 13 die Version 4.0.0, so steht es im <a href="https://tracker.debian.org/pkg/python-certbot">Debian-Paketverfolger</a>. Ubuntu 24.04 hat <a href="https://packages.ubuntu.com/noble/certbot">certbot 2.9.0</a>. Alle drei kommen mit 64 Tagen zurecht: Die alte 30-Tage-Regel erneuert ein 64-Tage-Zertifikat nach 34 Tagen, die Drittel-Regel nach rund 43 Tagen. Auch bei 45 Tagen im Jahr 2028 bleibt genug Puffer. Wer certbot mit dem vom Paket mitgelieferten Timer betreibt, ist also auf der sicheren Seite, solange niemand die Vorgabe mit einem eigenen <code>renew_before_expiry</code> verbogen hat.</p>



<h3 class="wp-block-heading">acme.sh: hier wird es eng</h3>



<p class="wp-block-paragraph">Anders sieht es beim reinen Shell-Skript acme.sh aus. Laut der <a href="https://manpages.debian.org/trixie/acme.sh/acme.sh.1.en.html">Handbuchseite in Debian 13</a> erneuert acme.sh standardmässig 60 Tage nach der Ausstellung, gesteuert über <code>--days</code>. ARI beherrscht es noch nicht, das schreibt der Hauptentwickler selbst <a href="https://github.com/acmesh-official/acme.sh/issues/6633">in Issue 6633</a> und empfiehlt dort für kurzlebige Zertifikate, <code>--days</code> von Hand anzupassen.</p>



<p class="wp-block-paragraph">Durchgerechnet bleiben bei einem 64-Tage-Zertifikat noch vier Tage zwischen dem ersten Erneuerungsversuch und dem Ablauf. Das reicht, solange nichts schiefgeht. Fällt die Erneuerung über ein langes Wochenende aus, weil der DNS-Anbieter klemmt oder Port 80 kurz zu ist, steht das Zertifikat abgelaufen da. Ab 2028, mit 45 Tagen, kommt der Erneuerungsversuch nach 60 Tagen schlicht zwei Wochen zu spät. Wer acme.sh nutzt, setzt <code>--days</code> deshalb jetzt auf einen Wert um 40, für jedes Zertifikat einzeln.</p>



<p class="wp-block-paragraph">Dass es auch anders geht, zeigt pfSense: Das ACME-Paket dort hatte dasselbe Problem mit einem festen 60-Tage-Abstand und erneuert seit <a href="https://redmine.pfsense.org/issues/16603">Version 1.1</a> standardmässig nach zwei Dritteln der Laufzeit. Das Paket ist für pfSense Plus 25.11.1 und CE 2.8.1 erschienen.</p>



<h3 class="wp-block-heading">Selbst geschriebene Skripte und Cronjobs</h3>



<p class="wp-block-paragraph">Die grösste Gefahr steckt nicht in den bekannten Programmen, sondern in Eigenbauten: dem Skript, das alle 60 Tage <code>--force-renewal</code> auslöst, oder dem Überwachungscheck, der erst bei 80 Tagen Alter Alarm gibt. Let's Encrypt rät ausdrücklich dazu, Cronjobs, Hilfsskripte und Betriebsanleitungen nach typischen fest eingetragenen Werten wie 83, 80 oder 60 zu durchsuchen. Ein Skript, das erst nach 80 oder 83 Tagen erneuert, kommt bei 64 Tagen schlicht zu spät. Ohne ARI empfiehlt Let's Encrypt, nach ungefähr zwei Dritteln der Laufzeit zu erneuern.</p>



<p class="wp-block-paragraph">Eine Sache, die viele noch im Kopf haben, gibt es übrigens nicht mehr: die Warn-E-Mail vor dem Ablauf. Let's Encrypt hat diesen Dienst <a href="https://letsencrypt.org/2025/06/26/expiration-notification-service-has-ended">am 4. Juni 2025 eingestellt</a>. Wer sich darauf verlassen hat, ist seit über einem Jahr ohne Netz unterwegs. Auch unsere ältere Anleitung zum <a href="https://yourdevice.ch/ssl-zertifikat-fuer-nextcloud-homeserver-beantragen/">SSL-Zertifikat für den Nextcloud-Homeserver</a> geht noch davon aus, dass diese Mail kommt.</p>



<h3 class="wp-block-heading">Die kürzere Wiederverwendung der Domainprüfung</h3>



<p class="wp-block-paragraph">Der zweite Teil der Änderung fällt weniger auf. Bisher durfte Let's Encrypt eine erfolgreiche Domainprüfung 30 Tage lang für weitere Zertifikate wiederverwenden, ab Februar sind es 10 Tage. Wer die Erneuerung voll automatisch erledigt, merkt davon laut Let's Encrypt nichts, ausser der Client ist ausdrücklich darauf gebaut, sich auf die Wiederverwendung zu verlassen. Betroffen sind vor allem Setups mit DNS-Challenge, bei denen der TXT-Eintrag von Hand gesetzt wird. Für sie hat Let's Encrypt im Februar <a href="https://letsencrypt.org/2026/02/18/dns-persist-01">das Verfahren DNS-PERSIST-01 angekündigt</a>, bei dem ein dauerhafter TXT-Eintrag ein bestimmtes ACME-Konto berechtigt. Der Produktivstart war für das zweite Quartal 2026 angepeilt; ob er erfolgt ist, sagt die aktuelle Mitteilung nicht.</p>



<h2 class="wp-block-heading">Was ihr bis Februar prüfen solltet</h2>



<p class="wp-block-paragraph">Das meiste davon ist eine Sache von zehn Minuten pro Server. Die Reihenfolge ist so gewählt, dass ihr nach dem ersten Punkt bereits wisst, ob der Rest euch überhaupt betrifft.</p>



<ol class="wp-block-list">
<li><strong>Herausfinden, welcher Client erneuert.</strong> Bei certbot zeigt <code>certbot --version</code> die Fassung, bei acme.sh <code>acme.sh --version</code>. Läuft Caddy, ist der Punkt erledigt.</li>



<li><strong>Feste Zahlen suchen.</strong> Durchsucht Cronjobs und systemd-Units nach Erneuerungsabständen. Ein grober erster Durchgang, der alle Zeilen mit den von Let's Encrypt genannten Werten zeigt:</li>
</ol>



<pre class="wp-block-code"><code>sudo grep -rnwE '60|80|83' /etc/cron* /etc/systemd/system /var/spool/cron 2&gt;/dev/null</code></pre>



<p class="wp-block-paragraph">Nicht jeder Treffer hat mit Zertifikaten zu tun, eine Minutenangabe von 60 ist harmlos. Gesucht sind Zeilen, in denen <code>certbot</code>, <code>acme.sh</code>, <code>--days</code>, <code>--force-renewal</code> oder ein eigenes Erneuerungsskript vorkommt.</p>



<ol start="3" class="wp-block-list">
<li><strong>Ab dem 14. Oktober gegen Staging testen.</strong> certbot holt mit <code>--dry-run</code> laut <a href="https://manpages.debian.org/trixie/certbot/certbot.1.en.html">Handbuchseite</a> ein Testzertifikat von der Staging-Umgebung, ohne es zu speichern. Das prüft, ob die Challenge durchläuft:</li>
</ol>



<pre class="wp-block-code"><code>sudo certbot renew --dry-run</code></pre>



<ol start="4" class="wp-block-list">
<li><strong>Die Laufzeit des aktuellen Zertifikats ansehen.</strong> So seht ihr, wann es ausgestellt wurde und abläuft. Den Domainnamen ersetzt ihr durch euren:</li>
</ol>



<pre class="wp-block-code"><code>sudo openssl x509 -noout -dates -in /etc/letsencrypt/live/cloud.example.ch/cert.pem</code></pre>



<ol start="5" class="wp-block-list">
<li><strong>acme.sh umstellen.</strong> Setzt <code>--days</code> beim nächsten Ausstellen auf einen Wert um 40, damit auch bei 45 Tagen im Jahr 2028 Puffer bleibt.</li>



<li><strong>Eine Ablaufwarnung einrichten, die nicht von Let's Encrypt kommt.</strong> Die Mail gibt es nicht mehr. Eine eigene Prüfung per systemd-Timer mit Benachrichtigung bei Fehlschlag haben wir in der Anleitung <a href="https://yourdevice.ch/systemd-timer-statt-cronjob/">systemd-Timer statt Cronjob</a> beschrieben; <code>openssl x509 -checkend</code> mit einer Sekundenzahl ist dafür der passende Baustein.</li>



<li><strong>Den Reload nicht vergessen.</strong> Ein erneuertes Zertifikat nützt nichts, wenn der Webserver weiter das alte ausliefert. Bei certbot erledigt das ein Deploy-Hook, bei Diensten mit eigener Zertifikatskopie (Mailserver, Datenbanken, NAS) muss die Kopie nach jeder Erneuerung neu verteilt werden. Wer nach zwei Dritteln der Laufzeit erneuert, tut das bei 64 Tagen rund achtmal im Jahr statt wie bisher rund sechsmal.</li>
</ol>



<div class="yd-cta" style="border:2px solid #e74c3c;border-radius:16px;padding:1.4rem 1.5rem;margin:2.2rem 0;background:#ffffff;display:flex;flex-wrap:wrap;gap:1rem 1.5rem;align-items:center;justify-content:space-between;color:#1f2933"><div style="flex:1 1 320px"><p style="margin:0 0 .3rem;font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:#e74c3c;font-weight:700">Keine Lust auf Zertifikatskalender?</p><p style="margin:0 0 .45rem;font-size:1.25rem;font-weight:800;line-height:1.3;color:#1f2933">Wir prüfen und betreuen euren Server</p><p style="margin:0;color:#52606d;font-size:.95rem">Wir stellen die Zertifikatserneuerung auf euren Servern auf 64 und 45 Tage um, richten eine Ablaufwarnung ein und halten Updates und Backups im Blick. Betreuung ab CHF 89 pro Server und Monat, remote in der ganzen Schweiz. <a href="https://yourdevice.ch/open-source-services-fuer-euer-zuhause-oder-euer-unternehmen/" style="color:#c0392b">Alle IT-Dienstleistungen</a>.</p></div><a href="https://yourdevice.ch/linux-server-wartung/" style="display:inline-block;padding:.8rem 1.35rem;border-radius:10px;background:#e74c3c;color:#ffffff;font-weight:700;text-decoration:none;white-space:nowrap">Server-Betreuung ansehen</a></div>



<h2 class="wp-block-heading">Fazit: 64 Tage bestrafen nur Handarbeit</h2>



<p class="wp-block-paragraph">Für einen sauber automatisierten Server ändert der 10. Februar 2027 nichts, ausser dass im Log etwas öfter eine Erneuerung steht. Caddy, aktuelle certbot-Fassungen und alles, was ARI spricht, regeln das selbst. Selbst die alten certbot-Versionen in Debian 12 und Ubuntu 24.04 kommen mit ihrer starren 30-Tage-Regel durch.</p>



<p class="wp-block-paragraph">Treffen wird es die Stellen, an denen ein Mensch einmal eine Zahl eingetragen hat und seither niemand mehr hingesehen hat: das acme.sh mit 60 Tagen, das Skript mit erzwungener Erneuerung, das NAS, auf das jemand das Zertifikat von Hand kopiert. Genau darauf zielt die Branche, und es fällt schwer, ihr zu widersprechen. Ein Zertifikat, das ein Jahr hält, verzeiht vergessene Automatisierung; eines, das 64 Tage hält, deckt sie auf. Wer die Testumgebung ab dem 14. Oktober nutzt, findet diese Stellen im Herbst statt an einem Februarmorgen, an dem die Nextcloud plötzlich eine rote Warnseite zeigt.</p>



<h2 class="wp-block-heading">Quellen und weiterführende Links</h2>



<ul class="wp-block-list">
<li><a href="https://letsencrypt.org/2026/10/07/64-day-certs">Let's Encrypt: 64-Day Certificate Lifetimes Coming Feb 2027</a>, Ankündigung vom 7. Oktober 2026</li>



<li><a href="https://letsencrypt.org/2025/12/02/from-90-to-45">Let's Encrypt: Decreasing Certificate Lifetimes to 45 Days</a>, Zeitplan vom 2. Dezember 2025</li>



<li><a href="https://letsencrypt.org/docs/profiles/">Let's Encrypt: Profiles</a>, Profile classic, tlsserver und shortlived</li>



<li><a href="https://letsencrypt.org/2026/02/24/rate-limits-45-day-certs">Let's Encrypt: Rate Limits and 45-Day Certificates</a>, Februar 2026</li>



<li><a href="https://community.letsencrypt.org/t/when-will-the-february-10-2027-classic-profile-change-64-day-certificates-reach-the-staging-environment/251945">Let's Encrypt Community: Staging-Termin für die 64-Tage-Zertifikate</a></li>



<li><a href="https://letsencrypt.org/2025/06/26/expiration-notification-service-has-ended">Let's Encrypt: Expiration Notification Service Has Ended</a></li>



<li><a href="https://letsencrypt.org/2026/02/18/dns-persist-01">Let's Encrypt: DNS-PERSIST-01</a>, Ankündigung vom 18. Februar 2026</li>



<li><a href="https://letsencrypt.org/upcoming-features/">Let's Encrypt: Upcoming Features</a>, Stand der Funktionen inklusive ARI</li>



<li><a href="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/">CA/Browser Forum: Ballot SC081v3</a>, Beschluss und Abstimmungsergebnis</li>



<li><a href="https://support.dnsimple.com/articles/announcement-ssl-certificate-validity-changes/">DNSimple: SSL Certificate Validity Changes (2026–2029)</a>, Zwischenschritte des Zeitplans</li>



<li><a href="https://www.rfc-editor.org/rfc/rfc9773.html">RFC 9773: ACME Renewal Information (ARI) Extension</a></li>



<li><a href="https://community.letsencrypt.org/t/certbot-4-0-0-released/236108">Certbot 4.0.0</a> und <a href="https://community.letsencrypt.org/t/certbot-4-1-0-release/238369">Certbot 4.1.0</a>, Changelogs zu Erneuerungszeitpunkt und ARI</li>



<li><a href="https://tracker.debian.org/pkg/python-certbot">Debian-Paketverfolger: python-certbot</a> und <a href="https://packages.ubuntu.com/noble/certbot">Ubuntu-Paket certbot in 24.04</a></li>



<li><a href="https://manpages.debian.org/trixie/certbot/certbot.1.en.html">certbot(1)</a> und <a href="https://manpages.debian.org/trixie/acme.sh/acme.sh.1.en.html">acme.sh(1)</a>, Handbuchseiten in Debian 13</li>



<li><a href="https://github.com/acmesh-official/acme.sh/issues/6633">acme.sh Issue 6633</a>, Aussage des Entwicklers zu fehlender ARI-Unterstützung</li>



<li><a href="https://github.com/caddyserver/caddy/releases/tag/v2.8.0">Caddy v2.8.0 Release Notes</a>, ARI-Unterstützung</li>



<li><a href="https://redmine.pfsense.org/issues/16603">pfSense Redmine 16603</a>, Erneuerung nach zwei Dritteln der Laufzeit im ACME-Paket 1.1</li>
</ul>
<p>The post <a href="https://yourdevice.ch/lets-encrypt-64-tage/">Let&#039;s Encrypt 64 Tage: kürzere Zertifikate ab 2027</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://yourdevice.ch/lets-encrypt-64-tage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>mTLS mit Caddy: Dienste nur für eigene Geräte</title>
		<link>https://yourdevice.ch/mtls-mit-caddy-einrichten/</link>
					<comments>https://yourdevice.ch/mtls-mit-caddy-einrichten/#respond</comments>
		
		<dc:creator><![CDATA[Mario]]></dc:creator>
		<pubDate>Wed, 07 Oct 2026 07:37:04 +0000</pubDate>
				<category><![CDATA[Netzwerk & Sicherheit]]></category>
		<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Verschlüsselung]]></category>
		<guid isPermaLink="false">https://yourdevice.ch/?p=23086</guid>

					<description><![CDATA[<p>mTLS mit Caddy einrichten: eigene CA mit OpenSSL, ein Client-Zertifikat pro Gerät, client_auth in der Caddyfile und verlorene Geräte gezielt wieder sperren.</p>
<p>The post <a href="https://yourdevice.ch/mtls-mit-caddy-einrichten/">mTLS mit Caddy: Dienste nur für eigene Geräte</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Nextcloud, Vaultwarden oder Immich hängen bei vielen von euch hinter einem Reverse Proxy und sind damit für das ganze Internet erreichbar — geschützt nur durch ein Anmeldeformular, das jeder Bot der Welt ausprobieren darf. Mit <strong>mTLS mit Caddy</strong> ändert sich das grundlegend: Der Proxy verlangt schon beim Verbindungsaufbau ein Client-Zertifikat, und wer keines vorzeigt, bekommt die Anmeldeseite gar nicht erst zu sehen.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="573" src="https://yourdevice.ch/wp-content/uploads/2026/10/mtls-mit-caddy-einrichten-titelbild-1024x573.png" alt="Titelbild zu mTLS mit Caddy: Links auf dunklem Grund das blaue Caddy-Logo mit dem Schriftzug caddy und dem Hinweis &quot;verlangt ein Zertifikat eurer eigenen CA&quot;. Drei Pfeile führen nach rechts zu drei Karten: laptop-mario mit Häkchen, eigene Client-CA, zugelassen; gesperrtes Gerät, in der Sperrregel, Status 403; fremdes Gerät, unknown ca, abgebrochen. Die Aussage: Caddy lässt nur Geräte mit einem Zertifikat der eigenen Zertifizierungsstelle durch." class="wp-image-23084" srcset="https://yourdevice.ch/wp-content/uploads/2026/10/mtls-mit-caddy-einrichten-titelbild-1024x573.png 1024w, https://yourdevice.ch/wp-content/uploads/2026/10/mtls-mit-caddy-einrichten-titelbild-300x168.png 300w, https://yourdevice.ch/wp-content/uploads/2026/10/mtls-mit-caddy-einrichten-titelbild-768x430.png 768w, https://yourdevice.ch/wp-content/uploads/2026/10/mtls-mit-caddy-einrichten-titelbild-1536x860.png 1536w, https://yourdevice.ch/wp-content/uploads/2026/10/mtls-mit-caddy-einrichten-titelbild-500x280.png 500w, https://yourdevice.ch/wp-content/uploads/2026/10/mtls-mit-caddy-einrichten-titelbild.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Diese Anleitung baut direkt auf unserer Einrichtung des <a href="https://yourdevice.ch/caddy-reverse-proxy-einrichten/">Caddy Reverse Proxy mit automatischem HTTPS</a> auf; Installation, Caddyfile und Zertifikate für den Server setzen wir voraus. Hier kommt die andere Richtung dazu: Nicht nur der Server weist sich gegenüber eurem Gerät aus, sondern auch euer Gerät gegenüber dem Server. Dafür legen wir mit OpenSSL eine eigene kleine Zertifizierungsstelle an, stellen jedem Gerät ein Zertifikat aus, bringen Caddy bei, nur noch diese zu akzeptieren, und klären, wie ihr ein verlorenes Gerät wieder aussperrt.</p>





<h2 class="wp-block-heading">mTLS mit Caddy: was gegenseitiges TLS leistet</h2>



<p class="wp-block-paragraph">Bei gewöhnlichem HTTPS ist die Prüfung einseitig. Der Server zeigt ein Zertifikat vor, euer Browser prüft es, und danach steht eine verschlüsselte Verbindung — zu irgendwem. Bis zum Login hat jeder Besucher Zugriff auf alles, was davor liegt: Anmeldemaske, öffentliche Schnittstellen und jede Sicherheitslücke, die genau dort steckt.</p>



<p class="wp-block-paragraph">Mutual TLS, kurz mTLS, macht die Prüfung gegenseitig. Während des TLS-Handshakes fordert der Server zusätzlich ein Zertifikat vom Client an und prüft, ob es von einer Stelle unterschrieben ist, der er vertraut. Fehlt es oder stammt es von einer fremden Stelle, endet die Verbindung, bevor eine einzige HTTP-Anfrage ausgewertet wird. Das Anmeldeformular bleibt, steht aber hinter einer zweiten Tür, die sich nur für Geräte öffnet, die ihr selbst ausgestattet habt.</p>



<p class="wp-block-paragraph">Wichtig ist die Abgrenzung zu einem Verfahren, das wir schon beschrieben haben. Die <a href="https://yourdevice.ch/ssh-zertifikate-eigene-ca-einrichten/">SSH-Zertifikate aus unserer SSH-CA-Anleitung</a> folgen derselben Idee, benutzen aber ein eigenes OpenSSH-Format ohne jede Verbindung zu X.509. Hier geht es um X.509-Zertifikate, also dasselbe Format, das auch euer Server für HTTPS vorzeigt. Eine SSH-CA lässt sich für mTLS nicht weiterverwenden, und umgekehrt.</p>



<figure class="wp-block-image size-large"><a href="https://yourdevice.ch/wp-content/uploads/2026/10/mtls-caddy-datenfluss.png"><img loading="lazy" decoding="async" width="1024" height="526" src="https://yourdevice.ch/wp-content/uploads/2026/10/mtls-caddy-datenfluss-1024x526.png" alt="Schaubild &quot;Caddy prüft das Zertifikat, der Dienst sieht nur den Namen&quot; mit drei Stationen von links nach rechts. Euer Gerät hält den privaten Schlüssel und das Client-Zertifikat CN=laptop-mario und zeigt das Zertifikat im TLS-Handshake vor. Caddy mit client_auth im Modus require_and_verify prüft die Unterschrift der eigenen Client-CA, die Laufzeit und eine eigene Sperrregel per Fingerabdruck und sieht Subject, Aussteller, Seriennummer und SHA-256-Fingerabdruck. Der Dienst, etwa Nextcloud auf 127.0.0.1:8080, sieht nur, was header_up weitergibt, zum Beispiel X-Client-Subject: CN=laptop-mario, aber weder Zertifikat noch Schlüssel. Ein roter Kasten darunter: Ohne Zertifikat oder mit fremdem bricht Caddy den TLS-Handshake ab, keine HTTP-Anfrage erreicht den Dienst." class="wp-image-23085" srcset="https://yourdevice.ch/wp-content/uploads/2026/10/mtls-caddy-datenfluss-1024x526.png 1024w, https://yourdevice.ch/wp-content/uploads/2026/10/mtls-caddy-datenfluss-300x154.png 300w, https://yourdevice.ch/wp-content/uploads/2026/10/mtls-caddy-datenfluss-768x394.png 768w, https://yourdevice.ch/wp-content/uploads/2026/10/mtls-caddy-datenfluss-1536x788.png 1536w, https://yourdevice.ch/wp-content/uploads/2026/10/mtls-caddy-datenfluss-2048x1051.png 2048w, https://yourdevice.ch/wp-content/uploads/2026/10/mtls-caddy-datenfluss-500x257.png 500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">Warum es eine eigene Zertifizierungsstelle sein muss</h3>



<p class="wp-block-paragraph">Die naheliegende Frage lautet, ob sich nicht einfach Let's Encrypt einspannen lässt. Die Antwort ist seit diesem Sommer endgültig nein. Let's Encrypt hat <a href="https://letsencrypt.org/2025/05/14/ending-tls-client-authentication/">im Mai 2025 angekündigt</a>, die Verwendung für Client-Authentifizierung aus seinen Zertifikaten zu streichen: Das Standardprofil verlor sie am 11. Februar 2026, und am 8. Juli 2026 wurde auch das Übergangsprofil <code>tlsclient</code> eingestellt. Als Grund nennt das Projekt die Vorgabe des Chrome-Root-Programms, Server- und Client-Authentifizierung bis Juni 2026 in getrennte Infrastrukturen aufzuteilen. Gleich dazu steht der Hinweis, viele Anwendungsfälle seien mit einer privaten Zertifizierungsstelle ohnehin besser bedient.</p>



<p class="wp-block-paragraph">Für euren Zweck ist das sogar der bessere Weg. Ein öffentliches Zertifikat beweist nur, dass jemand eine Domain kontrolliert, und das kann jeder. Eine eigene Zertifizierungsstelle beweist, dass ihr dieses Gerät persönlich ausgestattet habt. Genau diese Aussage soll Caddy prüfen. Dass ein Weltkonzern seine Wurzelzertifikate neu sortiert und dabei zufällig das Richtige für Selfhoster herauskommt, ist selten genug, um es einmal festzuhalten.</p>



<h3 class="wp-block-heading">mTLS oder VPN?</h3>



<p class="wp-block-paragraph">Das gleiche Ziel — nur eigene Geräte kommen an den Dienst — erreicht auch ein VPN, etwa ein <a href="https://yourdevice.ch/schnell-und-einfach-einen-wireguard-vpn-betreiben/">eigener Wireguard-Server</a>. Der Unterschied liegt in der Ebene. Ein VPN öffnet einen Tunnel ins Netz, und hinter dem Tunnel ist dann alles erreichbar, was dort freigegeben ist. mTLS gilt pro Dienst und pro Hostname, und auf dem Gerät muss nichts laufen ausser dem Browser oder der App, die ohnehin benutzt wird.</p>



<p class="wp-block-paragraph">Ein VPN ist die richtige Wahl für Verwaltungsoberflächen, die gar nicht öffentlich sein sollen. mTLS passt dort, wo ein Dienst bewusst im Internet steht, weil Familie oder Freunde ihn ohne VPN-Client nutzen sollen.</p>



<h2 class="wp-block-heading">Was ihr für die Client-Zertifikate braucht</h2>



<ul class="wp-block-list">
<li><strong>Einen laufenden Caddy in Version 2.11.1 oder neuer.</strong> Älteren Fassungen fehlt eine Sicherheitskorrektur, die genau diese Funktion betrifft; mehr dazu in Schritt 3. Die aktuelle Version zeigt <code>caddy version</code>.</li>



<li><strong>OpenSSL auf dem Rechner, der die Zertifizierungsstelle verwahrt.</strong> Unter Debian und Ubuntu ist es vorinstalliert. Die Befehle unten wurden mit OpenSSL 3 geprüft.</li>



<li><strong>Einen sicheren Ort für den privaten Schlüssel der Zertifizierungsstelle.</strong> Das ist nicht der Server, auf dem Caddy läuft. Ein verschlüsselter Arbeitsrechner oder USB-Stick genügt.</li>



<li><strong>Einen zweiten Zugang zum Server,</strong> etwa eine offene SSH-Sitzung. Sonst sperrt euch ein Tippfehler aus.</li>
</ul>



<h2 class="wp-block-heading">Schritt 1: Eine eigene Zertifizierungsstelle anlegen</h2>



<p class="wp-block-paragraph">Die Zertifizierungsstelle, kurz CA, ist bei OpenSSL ein Schlüsselpaar und ein selbst unterschriebenes Zertifikat. Erzeugt wird beides auf dem Rechner, auf dem es dauerhaft bleiben soll:</p>



<pre class="wp-block-code"><code>mkdir -p ~/client-ca &amp;&amp; chmod 700 ~/client-ca
cd ~/client-ca

openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out client-ca.key
chmod 600 client-ca.key

openssl req -x509 -new -key client-ca.key -sha256 -days 3650 \
  -subj "/CN=Heimnetz Client-CA" \
  -addext "basicConstraints=critical,CA:TRUE,pathlen:0" \
  -addext "keyUsage=critical,keyCertSign,cRLSign" \
  -out client-ca.crt</code></pre>



<p class="wp-block-paragraph">Der erste Befehl erzeugt einen Schlüssel auf der Kurve P-256, der zweite daraus ein zehn Jahre gültiges Zertifikat. Die Optionen sind in <a href="https://manpages.debian.org/trixie/openssl/openssl-req.1ssl.en.html">openssl-req(1)</a> beschrieben: <code>-x509</code> erzeugt direkt ein Zertifikat statt einer Anfrage, und <code>-addext</code> fügt eine Erweiterung hinzu, in derselben Schreibweise wie in einer Konfigurationsdatei.</p>



<p class="wp-block-paragraph">Die beiden Erweiterungen sind der eigentliche Inhalt. <code>basicConstraints</code> mit <code>CA:TRUE</code> erklärt das Zertifikat zur Zertifizierungsstelle, und <code>pathlen:0</code> bedeutet laut <a href="https://manpages.debian.org/trixie/openssl/x509v3_config.5ssl.en.html">x509v3_config(5)</a>, dass sie nur Endzertifikate unterschreiben darf, keine weiteren Zwischenstellen. <code>keyUsage</code> beschränkt den Schlüssel auf das Signieren von Zertifikaten und Sperrlisten. Prüft das Ergebnis:</p>



<pre class="wp-block-code"><code>openssl x509 -in client-ca.crt -noout -subject -enddate -ext basicConstraints,keyUsage</code></pre>



<p class="wp-block-paragraph">Die Datei <code>client-ca.crt</code> ist öffentlich und wandert gleich auf den Server. Die Datei <code>client-ca.key</code> ist das Gegenteil: Wer sie besitzt, kann sich selbst ein Zertifikat für jeden eurer Dienste ausstellen. Für sie gilt dasselbe wie für den CA-Schlüssel aus der <a href="https://yourdevice.ch/ssh-zertifikate-eigene-ca-einrichten/">SSH-CA-Anleitung</a> — nicht auf den Server, nicht in ein Cloud-Verzeichnis, und eine Kopie an einen zweiten Ort, wie es die <a href="https://yourdevice.ch/was-ist-ein-gutes-backup/">3-2-1-Regel für Backups</a> verlangt. Wer zusätzlich eine Passphrase will, hängt beim ersten Befehl <code>-aes256</code> an.</p>



<h2 class="wp-block-heading">Schritt 2: Ein Client-Zertifikat pro Gerät ausstellen</h2>



<p class="wp-block-paragraph">Jedes Gerät bekommt ein eigenes Zertifikat, sonst lässt sich später kein einzelnes Gerät aussperren. Legt zuerst einmalig eine kleine Datei mit den Erweiterungen für Client-Zertifikate an:</p>



<pre class="wp-block-code"><code>cat &gt; ~/client-ca/client.ext &lt;&lt;'EOF'
basicConstraints = critical, CA:FALSE
keyUsage = critical, digitalSignature
extendedKeyUsage = clientAuth
EOF</code></pre>



<p class="wp-block-paragraph"><code>CA:FALSE</code> verhindert, dass das Gerät selbst Zertifikate ausstellen kann. <code>extendedKeyUsage = clientAuth</code> ist der Eintrag, den x509v3_config(5) als <em>"SSL/TLS WWW Client Authentication"</em> beschreibt — genau der, den Let's Encrypt gestrichen hat. Dann das eigentliche Zertifikat, hier für einen Laptop:</p>



<pre class="wp-block-code"><code>cd ~/client-ca
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out laptop-mario.key
openssl req -new -key laptop-mario.key -subj "/CN=laptop-mario" -out laptop-mario.csr
openssl x509 -req -in laptop-mario.csr \
  -CA client-ca.crt -CAkey client-ca.key \
  -days 365 -sha256 -extfile client.ext \
  -out laptop-mario.crt
openssl verify -CAfile client-ca.crt laptop-mario.crt</code></pre>



<p class="wp-block-paragraph">Der Name hinter <code>CN=</code> ist frei wählbar. Nehmt etwas, das Person und Gerät eindeutig benennt; er taucht später in den Protokollen auf und ist das, was ihr beim Sperren sucht. Zur Seriennummer müsst ihr nichts tun: Laut <a href="https://manpages.debian.org/trixie/openssl/openssl-x509.1ssl.en.html">openssl-x509(1)</a> erzeugt OpenSSL eine zufällige, wenn weder <code>-CAserial</code> noch <code>-CAcreateserial</code> angegeben ist und keine Seriennummerndatei existiert. Ohne <code>-days</code> gälte das Zertifikat übrigens nur 30 Tage; ein Jahr ist ein brauchbarer Mittelweg zwischen Sicherheit und Erneuerungsaufwand. Die letzte Zeile muss mit <code>laptop-mario.crt: OK</code> enden.</p>



<p class="wp-block-paragraph">Browser und Betriebssysteme wollen Schlüssel und Zertifikat in einer gemeinsamen, passwortgeschützten Datei im Format PKCS#12. Die entsteht so:</p>



<pre class="wp-block-code"><code>openssl pkcs12 -export \
  -in laptop-mario.crt -inkey laptop-mario.key \
  -certfile client-ca.crt \
  -name "laptop-mario" \
  -out laptop-mario.p12</code></pre>



<p class="wp-block-paragraph">OpenSSL fragt nach einem Exportpasswort. Vergebt ein echtes, denn die Datei reist gleich über USB-Stick, Messenger oder E-Mail auf das Gerät. <code>-name</code> setzt laut <a href="https://manpages.debian.org/trixie/openssl/openssl-pkcs12.1ssl.en.html">openssl-pkcs12(1)</a> den Anzeigenamen, den Browser beim Auswählen des Zertifikats zeigen. Verschlüsselt wird standardmässig mit AES-256-CBC. Ältere Programme kennen das unter Umständen nicht; meldet ein Gerät beim Import ein falsches Passwort, obwohl es stimmt, erzeugt die Datei mit dem zusätzlichen Schalter <code>-legacy</code> neu, der auf die älteren Verfahren zurückfällt.</p>



<p class="wp-block-paragraph">Haltet zum Schluss den Fingerabdruck fest. Ihr braucht ihn in Schritt 6, und zwar genau in dem Moment, in dem das Gerät nicht mehr greifbar ist:</p>



<pre class="wp-block-code"><code>openssl x509 -in laptop-mario.crt -noout -fingerprint -sha256 \
  | cut -d= -f2 | tr -d ':' | tr 'A-F' 'a-f' \
  | sed 's/^/laptop-mario /' &gt;&gt; ~/client-ca/register.txt</code></pre>



<p class="wp-block-paragraph">Die Umformung in Kleinbuchstaben ohne Doppelpunkte ist kein Zierrat: In genau dieser Schreibweise gibt Caddy den Fingerabdruck aus, und nur so passt er später in die Sperrregel. Die Dateien <code>.key</code>, <code>.csr</code> und <code>.p12</code> des Geräts könnt ihr nach dem Import auf dem Gerät löschen; aufbewahrt werden nur das Zertifikat und das Register.</p>



<h2 class="wp-block-heading">Schritt 3: Caddy verlangt das Client-Zertifikat</h2>



<p class="wp-block-paragraph">Auf den Server gehört ausschliesslich das öffentliche CA-Zertifikat. Legt es dort ab, wo Caddy es lesen kann:</p>



<pre class="wp-block-code"><code>scp ~/client-ca/client-ca.crt benutzer@server:/tmp/
ssh benutzer@server
sudo install -o root -g caddy -m 0644 /tmp/client-ca.crt /etc/caddy/client-ca.crt</code></pre>



<p class="wp-block-paragraph">Im Site-Block des Dienstes bekommt die <a href="https://caddyserver.com/docs/caddyfile/directives/tls">tls-Direktive</a> einen Unterblock <code>client_auth</code>:</p>



<pre class="wp-block-code"><code>cloud.example.ch {
	tls {
		client_auth {
			mode require_and_verify
			trust_pool file /etc/caddy/client-ca.crt
		}
	}
	reverse_proxy 127.0.0.1:8080
}</code></pre>



<p class="wp-block-paragraph"><code>trust_pool file</code> nennt die Datei mit dem CA-Zertifikat, gegen das geprüft wird. <code>mode</code> legt fest, wie streng Caddy dabei ist. Die Dokumentation kennt vier Stufen:</p>



<ul class="wp-block-list">
<li><code>request</code> — fragt nach einem Zertifikat, lässt aber auch ohne durch und prüft keines.</li>



<li><code>require</code> — verlangt ein Zertifikat, prüft aber nicht, von wem es stammt.</li>



<li><code>verify_if_given</code> — lässt auch ohne Zertifikat durch, prüft aber jedes, das vorgezeigt wird.</li>



<li><code>require_and_verify</code> — verlangt ein gültiges Zertifikat und prüft es.</li>
</ul>



<p class="wp-block-paragraph">Für den Schutz eines ganzen Dienstes ist nur die letzte Stufe sinnvoll. Ist ein <code>trust_pool</code> gesetzt, ist sie laut Dokumentation ohnehin die Vorgabe; ohne <code>trust_pool</code> fällt Caddy auf <code>require</code> zurück, und dann genügt irgendein Zertifikat. Schreibt die Zeile trotzdem hin, damit niemand raten muss. Danach wie gewohnt:</p>



<pre class="wp-block-code"><code>sudo caddy fmt --overwrite /etc/caddy/Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy</code></pre>



<h3 class="wp-block-heading">Testen, bevor ihr den Browser bemüht</h3>



<p class="wp-block-paragraph">Am schnellsten prüft ihr das Ergebnis mit <code>curl</code> von einem Rechner, auf dem Zertifikat und Schlüssel liegen. Drei Aufrufe, drei erwartete Ergebnisse:</p>



<pre class="wp-block-code"><code># ohne Zertifikat: Verbindung muss scheitern
curl -sS https://cloud.example.ch/

# mit Zertifikat: Antwort des Dienstes
curl -sS --cert laptop-mario.crt --key laptop-mario.key https://cloud.example.ch/

# mit einem selbst gebauten fremden Zertifikat: muss ebenfalls scheitern
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 -nodes \
  -keyout fremd.key -out fremd.crt -subj "/CN=fremd" -days 1
curl -sS --cert fremd.crt --key fremd.key https://cloud.example.ch/</code></pre>



<p class="wp-block-paragraph">Ohne Zertifikat meldet <code>curl</code> einen TLS-Abbruch mit <code>certificate required</code>, beim fremden Zertifikat <code>unknown ca</code>. Genau so soll es aussehen. Nur der mittlere Aufruf darf eine Antwort des Dienstes liefern. Lasst den dritten Test nicht weg: Nur er zeigt, dass Caddy wirklich gegen eure CA prüft.</p>



<h3 class="wp-block-heading">Warum die Version zählt</h3>



<p class="wp-block-paragraph">Ende Februar 2026 wurde in Caddy eine Lücke geschlossen, die genau diesen Aufbau betrifft. Laut dem <a href="https://github.com/caddyserver/caddy/security/advisories/GHSA-hffm-g8v7-wrv7">Sicherheitshinweis GHSA-hffm-g8v7-wrv7</a> (CVE-2026-27586) haben zwei verschluckte Fehlermeldungen dazu geführt, dass die Client-Authentifizierung <em>"silently fail open"</em>, wenn die CA-Datei fehlt, nicht lesbar oder beschädigt ist. Caddy startete dann ohne Warnung und nahm jedes Client-Zertifikat an, das von einer der im System hinterlegten öffentlichen Zertifizierungsstellen stammte. Ein Tippfehler im Pfad hätte den Schutz also lautlos abgeschaltet. Behoben ist das mit <a href="https://github.com/caddyserver/caddy/releases/tag/v2.11.1">Caddy 2.11.1</a>.</p>



<p class="wp-block-paragraph">Mit einer aktuellen Version sieht derselbe Fehler anders aus: Zeigt <code>trust_pool file</code> auf eine Datei, die es nicht gibt, bricht schon <code>caddy validate</code> mit einer Meldung ab, die den Pfad und <code>no such file or directory</code> nennt. So muss es sein: Ein Fehler in der Konfiguration muss den Start verhindern, nicht den Schutz abschalten. Prüft deshalb mit <code>caddy version</code>, dass ihr nicht auf einer älteren Fassung sitzt, etwa aus dem Paketarchiv einer älteren Distribution.</p>



<h3 class="wp-block-heading">Ein Snippet für mehrere Dienste</h3>



<p class="wp-block-paragraph">Sollen mehrere Dienste denselben Schutz bekommen, schreibt ihr den Block einmal als Snippet und bindet ihn überall ein. Ein Snippet steht in runden Klammern ausserhalb aller Site-Blöcke:</p>



<pre class="wp-block-code"><code>(mtls) {
	tls {
		client_auth {
			mode require_and_verify
			trust_pool file /etc/caddy/client-ca.crt
		}
	}
}

cloud.example.ch {
	import mtls
	reverse_proxy 127.0.0.1:8080
}

fotos.example.ch {
	import mtls
	reverse_proxy 127.0.0.1:2283
}</code></pre>



<p class="wp-block-paragraph">Eine Eigenheit nimmt euch Caddy dabei von selbst ab. Weil TLS-Einstellungen am Hostnamen aus dem Handshake hängen, die HTTP-Anfrage aber einen eigenen <code>Host</code>-Header mitbringt, könnte ein Client sich mit dem Namen eines ungeschützten Dienstes verbinden und dann einen geschützten anfragen. Die <a href="https://caddyserver.com/docs/caddyfile/options">globale Option <code>strict_sni_host</code></a> verhindert das, und sie ist laut Dokumentation automatisch aktiv, sobald Client-Authentifizierung konfiguriert ist. Wer es ausprobiert, bekommt den Status <code>421 Misdirected Request</code>.</p>



<h2 class="wp-block-heading">Schritt 4: Das Client-Zertifikat auf die Geräte bringen</h2>



<p class="wp-block-paragraph">Jetzt braucht jedes Gerät seine <code>.p12</code>-Datei. Übertragt sie auf einem Weg, den ihr kontrolliert, und das Exportpasswort auf einem anderen. Die Bedienschritte unterscheiden sich je nach System:</p>



<ul class="wp-block-list">
<li><strong>Firefox</strong> führt einen eigenen Zertifikatsspeicher. Unter Einstellungen, Datenschutz &amp; Sicherheit, Abschnitt Zertifikate, öffnet <em>Zertifikate anzeigen</em>, wechselt auf den Reiter <em>Ihre Zertifikate</em> und wählt <em>Importieren</em>. Die Schritte entsprechen der <a href="https://docs.digicert.com/en/platform-overview/manage-your-accounts/digicert-account/sign-in-methods/two-factor-authentication/install-client-authentication-certificate-in-your-browser.html">Importanleitung von DigiCert</a>, die dort für Firefox und Windows beschrieben ist.</li>



<li><strong>Chrome, Edge und andere Programme unter Windows</strong> greifen auf den Zertifikatsspeicher von Windows zu. Ein Doppelklick auf die <code>.p12</code>-Datei startet den Importassistenten; als Ziel wählt ihr den aktuellen Benutzer und den Speicher <em>Eigene Zertifikate</em>.</li>



<li><strong>Android</strong> verwaltet Zertifikate in den Einstellungen unter <em>Sicherheit &amp; Datenschutz</em>, <em>Weitere Sicherheitseinstellungen</em>, <em>Verschlüsselung &amp; Anmeldedaten</em>, <em>Ein Zertifikat installieren</em>; den Pfad beschreibt Google in der <a href="https://support.google.com/pixelphone/answer/2844832?hl=de">Pixel-Hilfe</a>, die Bezeichnungen weichen je nach Hersteller leicht ab. Wählt dort die Variante für <em>VPN- und App-Nutzerzertifikate</em>, wie es etwa die <a href="https://kb.mit.edu/confluence/display/istcontrib/Installing+Certificates+on+Android">Anleitung des MIT</a> für dessen Client-Zertifikate zeigt — nicht die für CA-Zertifikate.</li>



<li><strong>Linux auf der Kommandozeile</strong> braucht keinen Import. <code>curl</code> nimmt Zertifikat und Schlüssel direkt mit <code>--cert</code> und <code>--key</code>, wie im Test oben.</li>
</ul>



<p class="wp-block-paragraph">Beim ersten Aufruf fragt der Browser, welches Zertifikat er vorzeigen soll, und zeigt dabei den Namen aus <code>-name</code>. Danach öffnet sich die gewohnte Anmeldeseite. Prüft auch die App des Dienstes: Nicht jede mobile App kann ein Client-Zertifikat aus dem Systemspeicher vorzeigen, und eine, die es nicht kann, ist ab jetzt ausgesperrt. Testet das, bevor ihr euch unterwegs darauf verlasst.</p>



<h2 class="wp-block-heading">Schritt 5: Nur den Admin-Bereich hinter das Zertifikat stellen</h2>



<p class="wp-block-paragraph">Manchmal soll der Dienst öffentlich bleiben und nur ein Teil davon geschützt werden, etwa die Verwaltungsoberfläche unter <code>/admin</code>. Eine Einstellung pro Pfad gibt es bei <code>client_auth</code> nicht, weil das Zertifikat im TLS-Handshake abgefragt wird, bevor überhaupt ein Pfad bekannt ist. Der Umweg führt über die mildere Stufe <code>verify_if_given</code> und einen Matcher, der prüft, ob ein Zertifikat vorgezeigt wurde:</p>



<pre class="wp-block-code"><code>vault.example.ch {
	tls {
		client_auth {
			mode verify_if_given
			trust_pool file /etc/caddy/client-ca.crt
		}
	}

	@admin_ohne_zertifikat {
		path /admin*
		vars {tls_client_subject} ""
	}
	respond @admin_ohne_zertifikat "Nur mit Zertifikat" 403

	reverse_proxy 127.0.0.1:8000
}</code></pre>



<p class="wp-block-paragraph">Der <a href="https://caddyserver.com/docs/caddyfile/matchers">Matcher <code>vars</code></a> vergleicht den Wert eines Platzhalters, hier <code>{tls_client_subject}</code>, also den Namen aus dem Zertifikat. Ist er leer, wurde keines vorgezeigt, und für Pfade unter <code>/admin</code> gibt es einen 403. Ein vorgezeigtes Zertifikat einer fremden Stelle scheitert schon im Handshake, weil <code>verify_if_given</code> jedes vorgezeigte Zertifikat prüft. Alles ausserhalb von <code>/admin</code> bleibt ohne Zertifikat erreichbar.</p>



<p class="wp-block-paragraph">Zwei Nebenwirkungen solltet ihr kennen. Erstens fragt Caddy jetzt auf der ganzen Domain nach einem Zertifikat, nicht nur unter <code>/admin</code>; Browser mit installiertem Zertifikat bieten es deshalb auch auf der öffentlichen Seite an. Zweitens schützt dieser Aufbau nur Pfade, die ihr kennt; liegt dieselbe Funktion noch in einer API, bleibt sie offen. Eine eigene Subdomain mit <code>require_and_verify</code> ist deshalb robuster.</p>



<h2 class="wp-block-heading">Wer ist angemeldet: Zertifikatsdaten an den Dienst weitergeben</h2>



<p class="wp-block-paragraph">Caddy kennt nach dem Handshake die Daten des Client-Zertifikats und stellt sie als Platzhalter bereit. Die <a href="https://caddyserver.com/docs/caddyfile/concepts">Übersicht der Platzhalter</a> nennt unter anderem <code>{tls_client_subject}</code>, <code>{tls_client_issuer}</code>, <code>{tls_client_serial}</code> und <code>{tls_client_fingerprint}</code>. Mit <a href="https://caddyserver.com/docs/caddyfile/directives/reverse_proxy"><code>header_up</code></a> reicht ihr davon weiter, was der Dienst dahinter wissen soll:</p>



<pre class="wp-block-code"><code>cloud.example.ch {
	import mtls
	reverse_proxy 127.0.0.1:8080 {
		header_up X-Client-Subject {tls_client_subject}
	}
}</code></pre>



<p class="wp-block-paragraph">Der Dienst sieht dann eine Kopfzeile wie <code>X-Client-Subject: CN=laptop-mario</code>, aber nie das Zertifikat oder gar den Schlüssel. In unserem Test mit Caddy 2.11.4 hat Caddy eine vom Client mitgeschickte, gefälschte Kopfzeile gleichen Namens dabei überschrieben. Darauf verlassen darf sich der Dienst trotzdem nur, wenn er ausschliesslich über Caddy erreichbar ist, also an <code>127.0.0.1</code> gebunden, wie in der <a href="https://yourdevice.ch/caddy-reverse-proxy-einrichten/">Caddy-Grundanleitung</a> beschrieben. Sonst kann jeder Caddy umgehen und die Kopfzeile selbst setzen.</p>



<h2 class="wp-block-heading">Schritt 6: Ein Gerät ist weg — Zertifikat sperren</h2>



<p class="wp-block-paragraph">Das klassische Werkzeug zum Widerrufen von X.509-Zertifikaten ist eine Sperrliste. Die <a href="https://caddyserver.com/docs/caddyfile/directives/tls">Dokumentation der tls-Direktive</a> erwähnt allerdings an keiner Stelle Sperrlisten oder eine andere Widerrufsprüfung für Client-Zertifikate. Verlasst euch also nicht darauf.</p>



<p class="wp-block-paragraph">Der verlässliche Weg ist eine Sperrregel mit demselben Matcher wie in Schritt 5, gestützt auf den Fingerabdruck aus eurem Register:</p>



<pre class="wp-block-code"><code>(mtls) {
	tls {
		client_auth {
			mode require_and_verify
			trust_pool file /etc/caddy/client-ca.crt
		}
	}
	@gesperrt vars {tls_client_fingerprint} 151a598999f66b8a2bf831977b32d6a273ba945734ce0cf3f330fa1954206d93
	respond @gesperrt "Zertifikat gesperrt" 403
}</code></pre>



<p class="wp-block-paragraph">Der Wert oben ist ein Beispiel; tragt den Fingerabdruck des verlorenen Geräts aus <code>register.txt</code> ein. Weitere gesperrte Geräte hängt ihr mit Leerzeichen getrennt an dieselbe Zeile, denn <code>vars</code> nimmt mehrere Werte und trifft, sobald einer davon passt. Nach <code>caddy validate</code> und <code>systemctl reload caddy</code> bekommt das gesperrte Gerät auf jedem Dienst, der das Snippet einbindet, einen 403. Alle anderen Geräte arbeiten unverändert weiter.</p>



<p class="wp-block-paragraph">Zur Schreibweise eine Warnung, weil sie Zeit kostet: Caddy liefert den Fingerabdruck in Kleinbuchstaben ohne Doppelpunkte, OpenSSL dagegen in Grossbuchstaben mit Doppelpunkten. Bei der Seriennummer ist es noch tückischer. OpenSSL zeigt sie hexadezimal an, der Platzhalter <code>{tls_client_serial}</code> lieferte in unserem Test dieselbe Zahl in Dezimalschreibweise. Wer eine Seriennummer aus <code>openssl x509 -serial</code> in die Sperrregel kopiert, sperrt deshalb niemanden. Der Fingerabdruck in der Umformung aus Schritt 2 umgeht dieses Problem. Im Zweifel lasst euch den Wert einmal von Caddy selbst ausgeben, etwa mit einem vorübergehenden <code>respond {tls_client_fingerprint}</code>.</p>



<p class="wp-block-paragraph">Daneben bleibt die Laufzeit das zuverlässigste Sperrmittel, weil sie ohne euer Zutun wirkt. Den Ablauf behaltet ihr am besten mit einer Erinnerung im Blick, etwa über einen <a href="https://yourdevice.ch/systemd-timer-statt-cronjob/">systemd-Timer mit Benachrichtigung</a>, der <code>openssl x509 -checkend</code> über die Zertifikate im Register laufen lässt. Und falls der CA-Schlüssel selbst abhandenkommt, hilft keine Sperrregel mehr: Dann legt ihr eine neue CA an, ersetzt <code>client-ca.crt</code> auf dem Server und stattet alle Geräte neu aus.</p>



<h2 class="wp-block-heading">Wo mTLS an seine Grenzen kommt</h2>



<p class="wp-block-paragraph">Ein Client-Zertifikat schützt den Weg zum Dienst, nicht den Dienst selbst. Wer ein entsperrtes Gerät in der Hand hält, hat das Zertifikat gleich mit. mTLS ergänzt Passwort und zweiten Faktor, es ersetzt sie nicht.</p>



<p class="wp-block-paragraph">Ausserdem muss die TLS-Verbindung tatsächlich bei Caddy enden. Steht ein fremder Proxy davor, etwa der Proxy-Modus von Cloudflare mit der orangen Wolke, baut Cloudflare die Verbindung zu euren Geräten auf und Caddy sieht nur noch Cloudflare. Ein Client-Zertifikat eures Laptops kommt dort nie an. Für mTLS muss der Eintrag im DNS direkt auf euren Server zeigen.</p>



<p class="wp-block-paragraph">Und schliesslich will die Absicherung gepflegt werden: Zertifikate laufen ab, Geräte werden ersetzt, neue Familienmitglieder wollen Zugang. Bei drei Geräten ist das wenig Arbeit, bei zwanzig ist ein VPN oder ein Werkzeug, das die Ausstellung automatisiert, die einfachere Antwort. Spätestens wenn die Tabelle mit den Fingerabdrücken länger ist als die Einkaufsliste, ist dieser Punkt erreicht.</p>



<h2 class="wp-block-heading">Was ihr vorher festlegen solltet</h2>



<p class="wp-block-paragraph">Die Befehle sind in einer Stunde abgearbeitet. Die folgenden Entscheidungen solltet ihr vorher treffen, weil sie sich später nur mühsam ändern lassen:</p>



<ul class="wp-block-list">
<li><strong>Wo der CA-Schlüssel liegt</strong> — und wo seine Kopie liegt. Nicht auf dem Server, nicht unverschlüsselt, nicht nur an einem Ort.</li>



<li><strong>Wie lange Client-Zertifikate gelten.</strong> Kürzer heisst sicherer und mehr Arbeit. Ein Jahr ist ein vernünftiger Anfang; für Geräte, die öfter verloren gehen können, darf es weniger sein.</li>



<li><strong>Nach welchem Schema ihr die Namen vergebt.</strong> <code>person-geraet</code> ist im Protokoll lesbar und beim Sperren auffindbar. <code>test2</code> ist es nicht.</li>



<li><strong>Wo das Register liegt.</strong> Name, Fingerabdruck und Ablaufdatum jedes ausgestellten Zertifikats, an einem Ort, den ihr auch erreicht, wenn das Gerät weg ist.</li>



<li><strong>Welche Dienste mit welcher Stufe laufen.</strong> Ganzer Dienst mit <code>require_and_verify</code> oder nur ein Pfad mit <code>verify_if_given</code> — und ob die zugehörige App überhaupt Client-Zertifikate kann.</li>



<li><strong>Wie ihr reinkommt, wenn es klemmt.</strong> Eine SSH-Sitzung auf den Server oder ein Weg im lokalen Netz, der nicht über den geschützten Dienst führt.</li>
</ul>



<h2 class="wp-block-heading">Fazit: mTLS sperrt Fremde aus, bevor sie das Login überhaupt sehen</h2>



<p class="wp-block-paragraph">Ein selbst gehosteter Dienst im Internet ist so sicher wie das, was vor seinem Login liegt. Bei den meisten Installationen ist das nichts: Jeder Scanner der Welt darf die Anmeldeseite abrufen, Benutzernamen durchprobieren und auf die nächste Lücke in genau diesem Code warten. Mit mTLS endet dieser Versuch im Handshake, noch bevor der Dienst davon erfährt. Caddy braucht dafür sechs Zeilen, OpenSSL eine Handvoll Befehle.</p>



<p class="wp-block-paragraph">Dass Let's Encrypt die Client-Authentifizierung in diesem Jahr gestrichen hat, wirkt auf den ersten Blick wie ein Verlust und ist in Wahrheit eine Klarstellung. Wer bestimmt, welche Geräte an eure Dienste dürfen, gehört nicht in eine öffentliche Zertifizierungsstelle, sondern in euren Schrank. Der Preis dafür ist Verantwortung: für den CA-Schlüssel, für das Register, für die Ablaufdaten. Wer sie übernimmt, hat das stärkste Schloss, das ein Reverse Proxy zu bieten hat — ohne Cloud und ohne irgendjemandes Erlaubnis.</p>



<h2 class="wp-block-heading">Quellen und weiterführende Links</h2>



<ul class="wp-block-list">
<li><a href="https://caddyserver.com/docs/caddyfile/directives/tls">Caddy Documentation — tls</a>, Syntax von <code>client_auth</code>, die vier Modi, Vorgabeverhalten und das Modul <code>trust_pool file</code></li>



<li><a href="https://caddyserver.com/docs/caddyfile/options">Caddy Documentation — Global Options</a>, <code>strict_sni_host</code> und seine automatische Aktivierung bei Client-Authentifizierung</li>



<li><a href="https://caddyserver.com/docs/caddyfile/matchers">Caddy Documentation — Request Matchers</a>, der Matcher <code>vars</code> mit Platzhaltern und mehreren Werten</li>



<li><a href="https://caddyserver.com/docs/caddyfile/concepts">Caddy Documentation — Caddyfile Concepts</a>, Platzhalter <code>{tls_client_*}</code></li>



<li><a href="https://caddyserver.com/docs/caddyfile/directives/reverse_proxy">Caddy Documentation — reverse_proxy</a>, Kopfzeilen mit <code>header_up</code> setzen</li>



<li><a href="https://github.com/caddyserver/caddy/security/advisories/GHSA-hffm-g8v7-wrv7">GHSA-hffm-g8v7-wrv7 / CVE-2026-27586</a>, Client-Authentifizierung schlägt bei fehlender CA-Datei offen fehl</li>



<li><a href="https://github.com/caddyserver/caddy/releases/tag/v2.11.1">Caddy v2.11.1 — Release Notes</a>, Behebung von CVE-2026-27586</li>



<li><a href="https://letsencrypt.org/2025/05/14/ending-tls-client-authentication/">Let's Encrypt — Ending TLS Client Authentication Certificate Support in 2026</a>, Zeitplan und Begründung</li>



<li><a href="https://manpages.debian.org/trixie/openssl/openssl-req.1ssl.en.html">openssl-req(1)</a>, <code>-x509</code>, <code>-addext</code>, <code>-subj</code> und <code>-days</code></li>



<li><a href="https://manpages.debian.org/trixie/openssl/openssl-x509.1ssl.en.html">openssl-x509(1)</a>, Signieren mit <code>-CA</code>, <code>-CAkey</code> und <code>-extfile</code>, zufällige Seriennummer</li>



<li><a href="https://manpages.debian.org/trixie/openssl/x509v3_config.5ssl.en.html">x509v3_config(5)</a>, <code>basicConstraints</code>, <code>keyUsage</code> und <code>extendedKeyUsage = clientAuth</code></li>



<li><a href="https://manpages.debian.org/trixie/openssl/openssl-pkcs12.1ssl.en.html">openssl-pkcs12(1)</a>, Export als PKCS#12, Standardverschlüsselung und <code>-legacy</code></li>



<li><a href="https://docs.digicert.com/en/platform-overview/manage-your-accounts/digicert-account/sign-in-methods/two-factor-authentication/install-client-authentication-certificate-in-your-browser.html">DigiCert — Install client authentication certificate in your browser</a>, Import in Firefox und Windows</li>



<li><a href="https://support.google.com/pixelphone/answer/2844832?hl=de">Google Pixel-Hilfe — Zertifikate hinzufügen und entfernen</a>, Pfad zu Verschlüsselung &amp; Anmeldedaten</li>



<li><a href="https://kb.mit.edu/confluence/display/istcontrib/Installing+Certificates+on+Android">MIT Knowledge Base — Installing Certificates on Android</a>, Import als VPN- und App-Nutzerzertifikat</li>
</ul>
<p>The post <a href="https://yourdevice.ch/mtls-mit-caddy-einrichten/">mTLS mit Caddy: Dienste nur für eigene Geräte</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://yourdevice.ch/mtls-mit-caddy-einrichten/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Chatkontrolle-Trilog: Suchplan statt Verdacht</title>
		<link>https://yourdevice.ch/chatkontrolle-trilog-suchplan/</link>
					<comments>https://yourdevice.ch/chatkontrolle-trilog-suchplan/#respond</comments>
		
		<dc:creator><![CDATA[Mario]]></dc:creator>
		<pubDate>Sun, 27 Sep 2026 17:42:59 +0000</pubDate>
				<category><![CDATA[Weiteres]]></category>
		<category><![CDATA[Datenschutz]]></category>
		<category><![CDATA[Messenger]]></category>
		<category><![CDATA[Neuigkeiten]]></category>
		<category><![CDATA[Privatsphäre]]></category>
		<category><![CDATA[Überwachung]]></category>
		<category><![CDATA[Verschlüsselung]]></category>
		<guid isPermaLink="false">https://yourdevice.ch/?p=23030</guid>

					<description><![CDATA[<p>Chatkontrolle-Trilog am 29. September: Die Präsidentschaft will Suchpläne für ganze Teile eines Dienstes genehmigen. Was vorliegt und was ihr tun könnt.</p>
<p>The post <a href="https://yourdevice.ch/chatkontrolle-trilog-suchplan/">Chatkontrolle-Trilog: Suchplan statt Verdacht</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Am Dienstag, dem 29. September 2026, verhandeln Rat, Parlament und Kommission im sechsten <strong>Chatkontrolle-Trilog</strong> über die dauerhafte CSA-Verordnung — in den Räumen des Rates und, wie jeder Trilog, hinter verschlossenen Türen. Auf dem Tisch liegt ein Vorschlag, der die anlasslose Durchsuchung privater Chats nicht mehr so nennt, sondern „Suchplan".</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="573" src="https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-suchplan-titelbild-1024x573.jpg" alt="Illustration: geöffneter Briefumschlag mit halb herausgezogenem Brief und rotem Stempel «DURCHSUCHT», im Hintergrund die Umrisse einer Lupe." class="wp-image-23029" srcset="https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-suchplan-titelbild-1024x573.jpg 1024w, https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-suchplan-titelbild-300x168.jpg 300w, https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-suchplan-titelbild-768x430.jpg 768w, https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-suchplan-titelbild-1536x860.jpg 1536w, https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-suchplan-titelbild-500x280.jpg 500w, https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-suchplan-titelbild.jpg 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Die Chatkontrolle ist damit endgültig das Gesetz, das nie beschlossen wird und nie verschwindet. Wie die freiwillige Variante im Juli per Verfahrenstrick zurückkam, steht in unserem Beitrag <a href="https://yourdevice.ch/eu-beschliesst-chatkontrolle-light-im-eilverfahren/">EU beschliesst Chatkontrolle Light im Eilverfahren</a>; die Unterscheidung zwischen Chatkontrolle 1.0 und 2.0 ist dort ebenfalls erklärt. Hier geht es um das, was seither dazugekommen ist, und um die Frage, was am Dienstag entschieden werden soll.</p>





<h2 class="wp-block-heading">Chatkontrolle-Trilog am 29. September: was feststeht</h2>



<p class="wp-block-paragraph">Ein Trilog ist die informelle Verhandlungsrunde, in der Vertreter der drei EU-Institutionen einen gemeinsamen Gesetzestext aushandeln. Protokolle werden nicht veröffentlicht, die Öffentlichkeit erfährt vom Ergebnis erst, wenn es feststeht. Dass am 29. September verhandelt wird, belegt ein internes Papier der irischen Ratspräsidentschaft an die Mitgliedstaaten: Das <a href="https://aeur.eu/f/nei" target="_blank" rel="noreferrer noopener">Ratsdokument 11956/26 vom 10. September 2026</a>, eingestuft als „LIMITE" und von Agence Europe öffentlich gemacht, kündigt den sechsten Trilog „at the Council premises on 29 September 2026" an.</p>



<p class="wp-block-paragraph">Patrick Breyer, früherer EU-Abgeordneter der Piraten und derjenige, der den Begriff Chatkontrolle geprägt hat, beschreibt die Lage auf seiner <a href="https://www.patrick-breyer.de/beitraege/chatkontrolle/" target="_blank" rel="noreferrer noopener">laufend aktualisierten Themenseite</a> so: „Am Dienstag, den 29. September findet ein potenziell letzter und entscheidender Trilog statt." Und weiter: „Die EU-Unterhändler stehen unter massivem Druck, einen ‚faulen Kompromiss' zu schliessen, der verdachtslose Massenscans unserer Chats dauerhaft zementieren würde." Verhandlungsführer der Kommission ist Innenkommissar Magnus Brunner.</p>



<h2 class="wp-block-heading">Seit Juli wieder erlaubt: die freiwillige Chatkontrolle</h2>



<p class="wp-block-paragraph">Der Juli-Beitrag endete mit dem Hinweis, dass der Rat noch zustimmen muss. Das hat er getan: Am 23. Juli 2026 hat der Rat die <a href="https://www.consilium.europa.eu/en/press/press-releases/2026/07/23/fighting-child-sexual-abuse-online-interim-measure-protecting-children-now-reinstated/" target="_blank" rel="noreferrer noopener">Übergangsverordnung wieder in Kraft gesetzt</a>. Anbieter dürfen damit erneut freiwillig nach Darstellungen sexuellen Kindesmissbrauchs suchen, und zwar „until 3 April 2028". Laut <a href="https://edri.org/our-work/the-chat-control-1-0-saga-big-tech-can-scan-our-private-messages-again-but-parliament-sent-a-strong-signal-against-mass-surveillance/" target="_blank" rel="noreferrer noopener">EDRi</a> gilt die neue Ausnahme seit dem 31. Juli 2026.</p>



<p class="wp-block-paragraph">Eine Einschränkung hat das Parlament durchgesetzt, und sie ist die wichtigste: Ende-zu-Ende-verschlüsselte Kommunikation ist ausgenommen. Der Rat zitiert die Änderung wörtlich, ausgeschlossen sind Dienste, „to which end-to-end encryption is, has been or will be applied". EDRi hält fest, dass die beiden Änderungsanträge ausdrücklich auch gegen Client-Side-Scanning schützen. Für die Übergangszeit heisst das: Signal bleibt draussen, unverschlüsselte Direktnachrichten grosser Plattformen nicht.</p>



<p class="wp-block-paragraph">Das verschiebt die Kräfte im Trilog. Die Übergangslösung, die das Parlament im März abgelehnt hatte, gilt jetzt wieder bis 2028. Breyer hatte schon im Juli gewarnt, dass die Regierungen keinen Anreiz haben, sich auf das Konzept des Parlaments einzulassen, solange ihr Status quo immer wieder verlängert wird. Seit dem 31. Juli liegt dieser Status quo für die nächsten zwanzig Monate fest.</p>



<h2 class="wp-block-heading">Der Kompromiss der Präsidentschaft: zwei Spuren</h2>



<p class="wp-block-paragraph">Wie die irische Präsidentschaft die Verordnung zuschneiden will, hat <a href="https://agenceurope.eu/en/bulletin/article/13943/15/csam-regulation-faced-with-deadlock-over-detection-irish-presidency-of-eu-council-seeks-to-refine-approach-between-public-and-private-content" target="_blank" rel="noreferrer noopener">Agence Europe am 23. September 2026</a> beschrieben. Der Vorschlag teilt Inhalte in zwei Gruppen:</p>



<ul class="wp-block-list">
<li><strong>Öffentliche Inhalte</strong> — also alles, was ohnehin jeder sehen kann — sollen per Aufdeckungsanordnung durchsucht werden können, allerdings nur nach bereits bekanntem Material, ausdrücklich um eine allgemeine Überwachungspflicht zu vermeiden.</li>



<li><strong>Private Kommunikation</strong> — Chats, Direktnachrichten, private Cloud-Ordner — soll weiter freiwillig durchsucht werden, gestützt auf die Ausnahme von der ePrivacy-Richtlinie. Und zwar nach bekanntem <em>und</em> neuem Material sowie nach Anbahnungsversuchen gegenüber Kindern, dem sogenannten Grooming.</li>
</ul>



<p class="wp-block-paragraph">Die Reihenfolge ist bezeichnend: Dort, wo ohnehin alles öffentlich ist, gibt es enge Regeln. Dort, wo es um private Nachrichten geht, gibt es die weiteste Befugnis.</p>



<figure class="wp-block-image size-large"><a href="https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-zwei-spuren.png"><img loading="lazy" decoding="async" width="1024" height="601" src="https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-zwei-spuren-1024x601.png" alt="Schema zum Chatkontrolle-Kompromiss: Öffentliche Inhalte nur auf Anordnung und nur bekanntes Material, private Kommunikation freiwillig durchsucht, inklusive neuem Material und Grooming, nach einem Suchplan für einen Zeitraum." class="wp-image-23028" srcset="https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-zwei-spuren-1024x601.png 1024w, https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-zwei-spuren-300x176.png 300w, https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-zwei-spuren-768x451.png 768w, https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-zwei-spuren-1536x901.png 1536w, https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-zwei-spuren-2048x1201.png 2048w, https://yourdevice.ch/wp-content/uploads/2026/09/chatkontrolle-trilog-zwei-spuren-500x293.png 500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">Der Unterschied zwischen bekanntem und neuem Material ist dabei nicht nur juristisch. Bekanntes Material lässt sich mit einer Liste von Prüfwerten bereits identifizierter Aufnahmen abgleichen. Neues Material und Grooming dagegen setzen voraus, dass eine Software private Bilder und Unterhaltungen inhaltlich beurteilt, die sie nie zuvor gesehen hat. Das Parlament verlangt deshalb laut Agence Europe, automatisierte Erkennung auf bekanntes Material zu beschränken und dafür die Indikatoren-Datenbank des geplanten EU-Zentrums zu verwenden.</p>



<h2 class="wp-block-heading">Suchplan statt Verdacht</h2>



<p class="wp-block-paragraph">Der Kern des Streits ist die Frage, wer eine Durchsuchung auslösen darf und für wie lange. Das Ratsdokument 11956/26 nennt als möglichen Kompromiss die „authorisation of search plans for a period of time rather than on a case-by-case basis" — also die Genehmigung von Suchplänen für einen Zeitraum statt im Einzelfall. Der Antrag eines Anbieters könne dabei „the technologies used and other relevant safeguards" enthalten. Was dem Rat dabei am wichtigsten ist, steht im selben Papier: „the most important aspect for the Council is effective detection and removal of content online as provided for through the voluntary regime".</p>



<p class="wp-block-paragraph">Pikant ist, dass der Plan auch in der Position des Parlaments vorkommt. Es verlangt laut Agence Europe, dass jede Suche einen Plan mit den eingesetzten Technologien und Schutzvorkehrungen voraussetzt und von einer Justiz- oder unabhängigen Verwaltungsbehörde genehmigt und beaufsichtigt wird. Der Rat übernimmt den Begriff, verschiebt aber den Gegenstand: Durchsucht werden sollen laut Agence Europe „specific parts of a service or individual users". Nicht mehr nur einzelne Nutzer also, sondern wahlweise einzelne Nutzer oder ganze Teile eines Dienstes.</p>



<p class="wp-block-paragraph">Breyer nennt das auf seiner Seite „Schein-Targeting" und fasst den Vorschlag so zusammen: „Sie wollen Behörden dauerhaft erlauben, auf Antrag eines Anbieters ‚Suchpläne' für ‚Teile eines Dienstes' zu genehmigen." Was ein „Teil eines Dienstes" ist, beantragt der Anbieter; genehmigen muss es die Behörde — nur eben nicht mehr im Einzelfall, sondern für einen Zeitraum. Die Direktnachrichten einer Plattform sind ebenso ein Teil des Dienstes wie ihre Gruppenchats. Ein richterlicher Durchsuchungsbefehl nennt eine Person. Ein Suchplan nennt eine Funktion. Das ist kein Durchsuchungsbefehl für eine Wohnung, sondern eine Dauerbewilligung für das ganze Treppenhaus.</p>



<h3 class="wp-block-heading">Was sonst noch auf dem Tisch liegt</h3>



<p class="wp-block-paragraph">Das Ratsdokument listet als ergänzende Massnahmen „safety by design, facilitating user flagging, metadata analysis and behaviour patterns and age verification systems". Zwei davon verdienen Aufmerksamkeit. Metadaten und Verhaltensmuster fallen auch dort an, wo Inhalte verschlüsselt sind — ihre Analyse wäre also der Weg, auf dem auch verschlüsselte Dienste wieder in den Blick geraten. Warum Metadaten oft mehr verraten als Inhalte, haben wir in <a href="https://yourdevice.ch/metadaten-bei-messengern-was-nachrichten-ueber-euch-verraten/">Metadaten bei Messengern</a> ausführlich beschrieben. Und die Altersverifikation, die der Rat laut <a href="https://edri.org/our-work/chat-control-is-in-the-final-stretch-but-it-could-be-a-marathon-not-a-sprint/" target="_blank" rel="noreferrer noopener">EDRi</a> für riskante Dienste verpflichtend machen will, ist dieselbe Art Werkzeug, die die Kommission parallel im <a href="https://yourdevice.ch/eu-kids-act-alterskontrolle/">EU KIDS Act</a> vorsieht. Das Parlament lehnt sie in der CSA-Verordnung ab.</p>



<p class="wp-block-paragraph">Offen ist, ob die Verschlüsselung in der dauerhaften Verordnung so geschützt bleibt wie in der Übergangslösung. Laut <a href="https://netzpolitik.org/2026/interne-dokumente-trilog-zur-chatkontrolle-geht-in-entscheidende-phase/" target="_blank" rel="noreferrer noopener">netzpolitik.org</a> galt der Ausschluss verschlüsselter Inhalte im Juni nur als „vorläufig" vereinbart. Ob das nach dem Dienstag noch gilt, steht in keinem öffentlich bekannten Dokument.</p>



<h2 class="wp-block-heading">Was ihr bis Dienstag tun könnt</h2>



<p class="wp-block-paragraph">Ein Trilog ist nicht öffentlich, aber die Verhandler des Parlaments sind gewählt und erreichbar. Viel Zeit bleibt nicht:</p>



<ul class="wp-block-list">
<li><strong>Schreibt euren EU-Abgeordneten, oder ruft an.</strong> Das Werkzeug auf <a href="https://fightchatcontrol.eu/de/about" target="_blank" rel="noreferrer noopener">fightchatcontrol.eu</a> hilft dabei, die eigenen Abgeordneten zu kontaktieren, und verfolgt die Positionen der Mitgliedstaaten. Betrieben wird es nach eigener Angabe von einem dänischen Softwareentwickler ohne Parteibindung, der keine Spenden annimmt.</li>



<li><strong>Nennt drei konkrete Punkte</strong>, wie Breyer sie formuliert: Das Parlament soll bei seinem Mandat bleiben — Anordnungen nur gegen konkret Verdächtige —, pauschale Suchpläne ablehnen und keine Schlupflöcher für freiwillige Massenscans zulassen.</li>



<li><strong>Setzt bei den grossen Fraktionen an.</strong> Breyer empfiehlt, vor allem Abgeordnete der konservativen EVP und der Sozialdemokraten anzusprechen, weil an ihnen das Ergebnis hängt.</li>



<li><strong>Lest in der Schweiz mit.</strong> Die Schweiz verhandelt nicht mit, eure Abgeordneten sitzen nicht in Strassburg. Die Dienste, um die es geht, sind aber dieselben, die ihr benutzt — teilt die Information mit Bekannten in der EU.</li>



<li><strong>Schützt eure eigene Kommunikation</strong>, unabhängig vom Ausgang: Ende-zu-Ende-verschlüsselte Messenger sind von der freiwilligen Chatkontrolle ausgenommen. Welche sich eignen, steht in unserem <a href="https://yourdevice.ch/eu-beschliesst-chatkontrolle-light-im-eilverfahren/">Juli-Beitrag</a>.</li>
</ul>



<h2 class="wp-block-heading">Fazit: Ein Suchplan ist kein Verdacht</h2>



<p class="wp-block-paragraph">Die Chatkontrolle 2.0 kommt nicht mehr als Scanpflicht für alle zurück, sondern in Einzelteilen: freiwilliges Scannen, das bis 2028 bereits gilt, Suchpläne, die ganze Teile eines Dienstes umfassen dürfen, Metadatenanalyse für das, was verschlüsselt bleibt, und eine Altersprüfung für Dienste, die als riskant gelten. Jedes Einzelteil lässt sich als massvoll verkaufen. Zusammen ergeben sie das, was das Parlament seit 2023 ablehnt: die Durchsuchung privater Kommunikation ohne konkreten Verdacht.</p>



<p class="wp-block-paragraph">Der Unterschied zwischen dem Parlament und dem Rat lässt sich deshalb auf eine einzige Frage zurückführen, die am Dienstag beantwortet werden soll: Beginnt eine Durchsuchung bei einem Menschen, gegen den etwas vorliegt, oder bei einem Dienst, auf dem viele Menschen sind? Alles andere ist Verpackung. Dass diese Frage hinter verschlossenen Türen entschieden wird, gehört leider zur Tradition des Verfahrens — ebenso wie der Umstand, dass die Öffentlichkeit vom Ergebnis voraussichtlich aus einem geleakten Dokument erfährt.</p>



<h2 class="wp-block-heading">Quellen und weiterführende Links</h2>



<ul class="wp-block-list">
<li><a href="https://aeur.eu/f/nei" target="_blank" rel="noreferrer noopener">Rat der EU: Dokument 11956/26 (LIMITE), 10.09.2026, via Agence Europe</a> — Stand der Verhandlungen, sechster Trilog am 29.09.2026, Suchpläne für einen Zeitraum, ergänzende Massnahmen</li>



<li><a href="https://agenceurope.eu/en/bulletin/article/13943/15/csam-regulation-faced-with-deadlock-over-detection-irish-presidency-of-eu-council-seeks-to-refine-approach-between-public-and-private-content" target="_blank" rel="noreferrer noopener">Agence Europe, 23.09.2026: Irish Presidency seeks to refine approach between public and private content</a> — die zwei Spuren, die Positionen von Rat und Parlament</li>



<li><a href="https://www.patrick-breyer.de/beitraege/chatkontrolle/" target="_blank" rel="noreferrer noopener">Patrick Breyer: Chatkontrolle</a> — laufend aktualisierte Themenseite mit Termin, Einschätzung „Schein-Targeting" und Handlungsaufruf</li>



<li><a href="https://www.consilium.europa.eu/en/press/press-releases/2026/07/23/fighting-child-sexual-abuse-online-interim-measure-protecting-children-now-reinstated/" target="_blank" rel="noreferrer noopener">Rat der EU, 23.07.2026: Interim measure now reinstated</a> — Wiederinkraftsetzung der Übergangsverordnung bis 03.04.2028, Ausschluss verschlüsselter Kommunikation</li>



<li><a href="https://edri.org/our-work/the-chat-control-1-0-saga-big-tech-can-scan-our-private-messages-again-but-parliament-sent-a-strong-signal-against-mass-surveillance/" target="_blank" rel="noreferrer noopener">EDRi, 04.08.2026: The Chat Control 1.0 saga</a> — Geltung ab 31.07.2026, Schutz auch gegen Client-Side-Scanning</li>



<li><a href="https://edri.org/our-work/chat-control-is-in-the-final-stretch-but-it-could-be-a-marathon-not-a-sprint/" target="_blank" rel="noreferrer noopener">EDRi, 25.02.2026: Chat Control is in the final stretch</a> — Positionen von Rat und Parlament zu Scanpflicht, Verschlüsselung und Altersverifikation</li>



<li><a href="https://netzpolitik.org/2026/interne-dokumente-trilog-zur-chatkontrolle-geht-in-entscheidende-phase/" target="_blank" rel="noreferrer noopener">netzpolitik.org, 12.06.2026: Trilog zur Chatkontrolle geht in entscheidende Phase</a> — interne Dokumente, vorläufiger Ausschluss verschlüsselter Inhalte</li>



<li><a href="https://fightchatcontrol.eu/de/about" target="_blank" rel="noreferrer noopener">Fight Chat Control</a> — Werkzeug zum Kontaktieren der EU-Abgeordneten</li>
</ul>
<p>The post <a href="https://yourdevice.ch/chatkontrolle-trilog-suchplan/">Chatkontrolle-Trilog: Suchplan statt Verdacht</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://yourdevice.ch/chatkontrolle-trilog-suchplan/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Caddy Reverse Proxy einrichten: HTTPS ohne Certbot</title>
		<link>https://yourdevice.ch/caddy-reverse-proxy-einrichten/</link>
					<comments>https://yourdevice.ch/caddy-reverse-proxy-einrichten/#respond</comments>
		
		<dc:creator><![CDATA[Mario]]></dc:creator>
		<pubDate>Wed, 12 Aug 2026 07:35:58 +0000</pubDate>
				<category><![CDATA[Netzwerk & Sicherheit]]></category>
		<category><![CDATA[Anleitungen]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Verschlüsselung]]></category>
		<guid isPermaLink="false">https://yourdevice.ch/?p=20716</guid>

					<description><![CDATA[<p>Caddy als Reverse Proxy einrichten: Installation unter Debian und Ubuntu, Caddyfile für mehrere Dienste, automatisches HTTPS und Wildcards per DNS-Challenge.</p>
<p>The post <a href="https://yourdevice.ch/caddy-reverse-proxy-einrichten/">Caddy Reverse Proxy einrichten: HTTPS ohne Certbot</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Wer mehr als einen Dienst selbst betreibt, steht irgendwann vor derselben Wand: Nextcloud, Vaultwarden und Immich wollen alle Port 443, und den gibt es pro IP-Adresse nur einmal. Ein Caddy Reverse Proxy nimmt sämtliche Anfragen auf den Ports 80 und 443 entgegen, entscheidet anhand des angefragten Hostnamens, welcher Dienst gemeint ist, und reicht die Anfrage intern weiter — an einen Dienst, der selbst nie mit dem Internet spricht.</p>



<p class="wp-block-paragraph">Der Unterschied zu einem gewöhnlichen Proxy liegt in der Richtung. Ein normaler Proxy steht vor euch und schützt euch gegenüber dem Server. Ein Reverse Proxy steht vor den Servern und nimmt ihnen die Aussenwelt ab. Für den Browser existiert nur eine einzige Adresse, ein einziges Zertifikat, ein einziger Einstiegspunkt. Was dahinter läuft, auf welchem Port, in welchem Container, auf welchem Rechner im lokalen Netz — davon bekommt der Client nichts mit.</p>



<p class="wp-block-paragraph">Der naheliegende Gegenvorschlag lautet: einfach jedem Dienst einen eigenen Port geben und die Sache über <code>example.ch:8080</code> ansprechen. Das funktioniert, bis ihr das erste Mal aus einem fremden WLAN, einem Firmennetz oder einem Hotelnetzwerk zugreifen wollt. Dort ist alles ausser 80 und 443 üblicherweise dicht. Dazu kommt, dass jedes dieser Ziele ein eigenes gültiges Zertifikat braucht und jeder Dienst seine TLS-Konfiguration selbst pflegen müsste — mit dem Ergebnis, dass drei Programme drei verschiedene Meinungen darüber haben, welche Cipher noch in Ordnung sind.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="573" src="https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-titelbild-1024x573.png" alt="Titelbild zum Thema Caddy als Reverse Proxy: Links auf dunklem Grund das grüne Caddy-Logo mit dem Schriftzug caddy und dem Hinweis Ports 80 und 443, automatisches HTTPS. Von dort führen drei geschwungene Pfeile nach rechts zu drei Karten mit den Diensten Nextcloud unter cloud.example.ch auf 127.0.0.1:8080, Vaultwarden unter vault.example.ch auf 127.0.0.1:8000 und Immich unter fotos.example.ch auf 127.0.0.1:2283." class="wp-image-20719" srcset="https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-titelbild-1024x573.png 1024w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-titelbild-300x168.png 300w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-titelbild-768x430.png 768w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-titelbild-1536x860.png 1536w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-titelbild-500x280.png 500w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-titelbild.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Genau an dieser Stelle setzt dieser Artikel an: eine vollständige Einrichtung von Caddy als Reverse Proxy unter Debian und Ubuntu, von der Installation über die erste Caddyfile bis zu Wildcard-Zertifikaten per DNS-Challenge. Wer bisher mit Apache und Certbot gearbeitet hat, findet den vertrauten Weg in unserer Anleitung zum <a href="https://yourdevice.ch/ssl-zertifikat-fuer-nextcloud-homeserver-beantragen/">SSL-Zertifikat für den Nextcloud-Homeserver</a>. Hier geht es um den Weg, bei dem dieser Schritt schlicht entfällt.</p>



<figure class="wp-block-image size-large"><a href="https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-topologie.png"><img loading="lazy" decoding="async" width="1024" height="712" src="https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-topologie-1024x712.png" alt="Schema eines Reverse Proxy: Links der Browser im Internet, der nur cloud.example.ch auf Port 443 und ein gültiges Zertifikat sieht, aber keine internen Portnummern. In der Mitte Caddy als einziger Einstiegspunkt auf den Ports 80 und 443, der nach Hostname zuordnet, TLS terminiert, von HTTP auf HTTPS weiterleitet und die X-Forwarded-Header setzt. Rechts die drei Dienste Nextcloud auf 127.0.0.1:8080, Vaultwarden auf 127.0.0.1:8000 und Immich auf 127.0.0.1:2283, die alle keinen offenen Port nach aussen haben, keine eigene TLS-Pflege benötigen und je einen Site-Block in einer einzigen Konfigurationsdatei belegen." class="wp-image-20714" srcset="https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-topologie-1024x712.png 1024w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-topologie-300x209.png 300w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-topologie-768x534.png 768w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-topologie-1536x1068.png 1536w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-topologie-2048x1423.png 2048w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-reverse-proxy-topologie-500x348.png 500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>





<h2 class="wp-block-heading">Warum Caddy und nicht nginx</h2>



<p class="wp-block-paragraph">Caddy ist ein in Go geschriebener Webserver, der <a href="https://github.com/caddyserver/caddy">unter der Apache-2.0-Lizenz steht</a> und ohne externe Abhängigkeiten auskommt. Die aktuelle stabile Version ist <a href="https://github.com/caddyserver/caddy/releases">v2.11.4 vom 3. Juni 2026</a>. Das Alleinstellungsmerkmal steht im Untertitel des Projekts und ist keine Marketingfloskel: automatisches HTTPS, und zwar als Standardverhalten, nicht als Zusatzpaket.</p>



<h3 class="wp-block-heading">Automatisches HTTPS ist eingebaut, nicht angeflanscht</h3>



<p class="wp-block-paragraph">Bei nginx oder Apache läuft die Zertifikatsbeschaffung über ein zweites Programm. Certbot legt Dateien ab, schreibt in die Konfiguration hinein, richtet einen Timer ein und startet den Webserver neu. Vier bewegliche Teile, die alle einzeln kaputtgehen können. Caddy spricht ACME selbst. Es <a href="https://caddyserver.com/docs/automatic-https">erkennt aus der Konfiguration, für welche Hostnamen es Zertifikate braucht</a>, holt sie, erneuert sie und leitet HTTP auf HTTPS um — ohne dass ihr das irgendwo hinschreibt.</p>



<p class="wp-block-paragraph">Wie gross der Unterschied im Alltag ist, zeigt das Projekt Immich selbst. In der <a href="https://docs.immich.app/administration/reverse-proxy/">offiziellen Reverse-Proxy-Dokumentation</a> steht eine nginx-Konfiguration mit erhöhtem Upload-Limit, abgeschaltetem Request-Buffering, gesetzten Weiterleitungs-Headern und Timeouts von 600 Sekunden. Direkt darunter steht die Caddy-Variante, vollständig:</p>



<pre class="wp-block-code"><code>immich.example.org {
    reverse_proxy http://127.0.0.1:2283
}</code></pre>



<p class="wp-block-paragraph">Das ist kein verkürztes Beispiel. Die drei Dinge, die nginx dort von Hand braucht, sind in Caddy Standard. Das Upload-Limit: nginx begrenzt den Request-Body <a href="https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size">per Vorgabe auf 1 MB</a> und antwortet darüber mit einem 413, was bei Foto- und Video-Uploads sofort auffällt. Caddy kennt kein solches Vorgabelimit, die <a href="https://caddyserver.com/docs/caddyfile/directives/request_body">Direktive <code>request_body</code></a> müsst ihr setzen, wenn ihr <em>begrenzen</em> wollt. Die Weiterleitungs-Header: Caddy setzt <code>X-Forwarded-For</code>, <code>X-Forwarded-Proto</code> und <code>X-Forwarded-Host</code> <a href="https://caddyserver.com/docs/caddyfile/directives/reverse_proxy">von sich aus</a> und verwirft eingehende Werte dieser Felder, damit sie nicht gefälscht werden können. Und WebSockets laufen einfach durch, ohne die aus nginx bekannte <code>Upgrade</code>-Klausel.</p>



<h3 class="wp-block-heading">Wo Caddy nginx nicht ersetzt</h3>



<p class="wp-block-paragraph">Ehrlichkeitshalber gehört die Gegenrichtung dazu. nginx hat ein deutlich grösseres Ökosystem an Modulen, mehr Feinsteuerung beim Caching und mehr Personen, die sich damit auskennen. Wer bereits eine gewachsene, funktionierende nginx-Konfiguration hat, gewinnt durch einen Wechsel wenig. Und Caddy hat eine architektonische Eigenheit, die überrascht: Erweiterungen sind einkompilierte Go-Module. Ein Plugin nachzurüsten bedeutet, das Binary neu zu bauen. Dafür gibt es einen bequemen Befehl, aber es bleibt ein anderes Modell als eine nachinstallierte <code>.so</code>-Datei — mit einer Nebenwirkung, auf die wir weiter unten zurückkommen.</p>



<h2 class="wp-block-heading">Voraussetzungen für den Reverse Proxy</h2>



<p class="wp-block-paragraph">Vier Dinge müssen stimmen, bevor die erste Zeile Konfiguration Sinn ergibt.</p>



<ul class="wp-block-list">
<li><strong>Ein Server mit Debian 12/13 oder Ubuntu 24.04</strong> und Root- beziehungsweise sudo-Rechten. Ein Raspberry Pi reicht für den Heimgebrauch vollkommen aus, der Proxy selbst ist genügsam.</li>



<li><strong>Eine Domain, deren DNS-Einträge auf eure öffentliche IP zeigen.</strong> Bei wechselnder IP am Hausanschluss braucht es dafür einen dynamischen Eintrag, wie in unserer Anleitung zum <a href="https://yourdevice.ch/dyndns-eintrag-erstellen-bei-dynamischer-ip/">DynDNS-Eintrag bei dynamischer IP</a> beschrieben. Für jeden Dienst legt ihr eine eigene Subdomain an.</li>



<li><strong>Die Ports 80 und 443 müssen von aussen auf den Proxy zeigen.</strong> Wie das am Schweizer Router eingerichtet wird, steht in unserem Beitrag zur <a href="https://yourdevice.ch/portweiterleitungen-auf-swisscom-oder-upc-modem/">Portweiterleitung auf Swisscom- und UPC-Modems</a>. Hängt ihr an einem DS-Lite-Anschluss ohne öffentliche IPv4-Adresse, hilft keine Weiterleitung — dann führt der Weg über einen VPS als Brücke, wie in <a href="https://yourdevice.ch/webdienste-hinter-ds-lite-anschluss-verfuegbar-machen-mit-wireguard/">Webdienste hinter DS-Lite verfügbar machen mit Wireguard</a> gezeigt.</li>



<li><strong>Die Dienste laufen bereits und lauschen lokal.</strong> Ob nativ installiert oder über <a href="https://yourdevice.ch/docker-basics-und-installation-auf-mint-ubuntu-und-debian/">Docker</a>, spielt keine Rolle. Wichtig ist, dass sie auf <code>127.0.0.1</code> gebunden sind und nicht auf <code>0.0.0.0</code> — sonst ist der Proxy umgehbar.</li>
</ul>



<p class="wp-block-paragraph">Läuft auf dem Rechner bereits ein Apache oder nginx auf Port 80 und 443, stoppt und deaktiviert ihn vorher. Zwei Programme auf demselben Port ergeben beim Start nur eine Fehlermeldung.</p>



<h2 class="wp-block-heading">Caddy unter Debian und Ubuntu installieren</h2>



<p class="wp-block-paragraph">Die Distributionspakete hinken der Entwicklung meist hinterher. Nehmt deshalb das <a href="https://caddyserver.com/docs/install">offizielle Repository des Projekts</a>:</p>



<pre class="wp-block-code"><code>sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy</code></pre>



<p class="wp-block-paragraph">Das Paket bringt eine systemd-Unit mit und startet den Dienst sofort. Prüft danach die Version:</p>



<pre class="wp-block-code"><code>caddy version
systemctl status caddy</code></pre>



<p class="wp-block-paragraph">Ruft ihr jetzt die IP des Servers im Browser auf, begrüsst euch eine Startseite. Der Dienst läuft unter dem Benutzer <code>caddy</code>, die Konfiguration liegt in <code>/etc/caddy/Caddyfile</code>, und die Zertifikate landen später <a href="https://caddyserver.com/docs/running">unter <code>/var/lib/caddy/.local/share/caddy</code></a>. Diese drei Pfade solltet ihr euch merken, sie beantworten später die meisten Fragen.</p>



<h2 class="wp-block-heading">Die erste Caddyfile: ein Dienst, ein Zertifikat</h2>



<p class="wp-block-paragraph">Öffnet <code>/etc/caddy/Caddyfile</code>, löscht den mitgelieferten Inhalt und schreibt stattdessen:</p>



<pre class="wp-block-code"><code>{
	email admin@example.ch
}

cloud.example.ch {
	reverse_proxy 127.0.0.1:8080
}</code></pre>



<p class="wp-block-paragraph">Das war die vollständige Konfiguration für einen Dienst mit gültigem Zertifikat und automatischer Weiterleitung von HTTP auf HTTPS. Der geschweifte Block ganz oben ist der <a href="https://caddyserver.com/docs/caddyfile/options">globale Optionsblock</a>. Er muss der erste Block der Datei sein und darf nur einmal vorkommen. Die Adresse unter <code>email</code> wird für das ACME-Konto verwendet; darüber informiert euch die Zertifizierungsstelle, wenn eine Erneuerung dauerhaft scheitert. Der zweite Block ist ein Site-Block: alles zwischen den Klammern gilt für Anfragen an diesen Hostnamen.</p>



<p class="wp-block-paragraph">Formatiert und prüft die Datei, bevor ihr sie aktiviert:</p>



<pre class="wp-block-code"><code>sudo caddy fmt --overwrite /etc/caddy/Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy</code></pre>



<p class="wp-block-paragraph">Ein Hinweis zur Einrückung: Die Caddyfile erwartet Tabulatoren, keine Leerzeichen. <code>caddy fmt --overwrite</code> räumt das für euch auf, weshalb dieser Befehl der erste von dreien ist. <a href="https://caddyserver.com/docs/command-line">Alle Unterbefehle sind dokumentiert</a>, im Alltag braucht ihr vor allem diese drei.</p>



<h2 class="wp-block-heading">Was beim ersten Neuladen tatsächlich passiert</h2>



<p class="wp-block-paragraph">Caddy liest aus dem Site-Block heraus, dass es ein Zertifikat für <code>cloud.example.ch</code> braucht, und beginnt sofort damit. Primäre Zertifizierungsstelle ist Let's Encrypt, bei Fehlern weicht Caddy automatisch auf ZeroSSL aus. Zur Validierung stehen die HTTP-Challenge über Port 80 und die TLS-ALPN-Challenge über Port 443 bereit; Caddy wählt zunächst zufällig und merkt sich, welcher Weg bei euch verlässlich funktioniert. Nach wenigen Sekunden ist das Zertifikat da und der Dienst über HTTPS erreichbar.</p>



<p class="wp-block-paragraph">Zusehen könnt ihr dabei im Journal:</p>



<pre class="wp-block-code"><code>journalctl -u caddy -f</code></pre>



<p class="wp-block-paragraph">Und hier lauert die erste ernsthafte Falle. Solange die DNS-Einträge noch nicht stimmen oder die Portweiterleitung fehlt, scheitert die Validierung — und Let's Encrypt zählt mit. <a href="https://letsencrypt.org/docs/rate-limits/">Nach den offiziellen Rate Limits</a> sind pro Bezeichner und Konto fünf fehlgeschlagene Autorisierungen pro Stunde erlaubt, pro registrierter Domain 50 Zertifikate in sieben Tagen und für einen exakt gleichen Satz von Bezeichnern fünf Zertifikate in sieben Tagen. Wer eine Konfiguration in Ruhe durchprobieren will, schaltet deshalb vorher auf die Testumgebung um:</p>



<pre class="wp-block-code"><code>{
	email admin@example.ch
	acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
}</code></pre>



<p class="wp-block-paragraph">Die Zertifikate der Testumgebung sind im Browser ungültig, das ist beabsichtigt. Wenn alles steht, nehmt ihr die Zeile wieder heraus und ladet neu. Praktisch heisst das: erst mit Staging bauen, dann scharf schalten. Wer diese zwei Minuten überspringt, sitzt im schlechtesten Fall eine Woche auf einem gesperrten Bezeichner.</p>



<h2 class="wp-block-heading">Drei Dienste hinter einer Adresse</h2>



<p class="wp-block-paragraph">Der eigentliche Gewinn zeigt sich erst ab dem zweiten Dienst. Jeder bekommt seinen eigenen Site-Block, jeder sein eigenes Zertifikat, alle teilen sich denselben Port:</p>



<pre class="wp-block-code"><code>{
	email admin@example.ch
}

cloud.example.ch {
	reverse_proxy 127.0.0.1:8080
}

vault.example.ch {
	reverse_proxy 127.0.0.1:8000
}

fotos.example.ch {
	reverse_proxy 127.0.0.1:2283
}</code></pre>



<p class="wp-block-paragraph">Die Ports sind die Vorgaben der jeweiligen Projekte: 8000 für Vaultwarden, 2283 für Immich, 8080 für einen Nextcloud-Container hinter dem Proxy. Bemerkenswert ist vor allem, was hier <em>nicht</em> steht. Keine Upload-Grenze für Immich. Keine WebSocket-Klausel für Vaultwarden, dessen <a href="https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples">eigenes Caddy-Beispiel im Projekt-Wiki</a> ebenfalls mit einer einzigen <code>reverse_proxy</code>-Zeile auskommt. Keine Zertifikatspfade, keine Cipher-Listen, kein Redirect-Block.</p>



<p class="wp-block-paragraph">Liegt ein Dienst auf einem anderen Rechner im lokalen Netz, tragt ihr dort statt <code>127.0.0.1</code> dessen IP ein. Und wenn das Backend selbst schon HTTPS spricht, etwa mit einem selbstsignierten Zertifikat, sieht das so aus:</p>



<pre class="wp-block-code"><code>nas.example.ch {
	reverse_proxy https://192.168.1.50:5001 {
		transport http {
			tls_insecure_skip_verify
		}
	}
}</code></pre>



<p class="wp-block-paragraph">Das Überspringen der Zertifikatsprüfung ist hier vertretbar, weil die Strecke im eigenen Netz liegt und die Verschlüsselung nach aussen der Proxy übernimmt. Auf einer Verbindung über das Internet wäre es ein Fehler.</p>



<h2 class="wp-block-heading">Nextcloud hinter dem Reverse Proxy richtig konfigurieren</h2>



<p class="wp-block-paragraph">Nextcloud ist der Dienst, bei dem am häufigsten etwas schiefgeht — nicht wegen Caddy, sondern weil Nextcloud sich selbst hinter einem Proxy falsch einschätzt. Es sieht eine unverschlüsselte Anfrage von <code>127.0.0.1</code> und baut daraus Links mit <code>http://</code>. Ergebnis: Anmeldeschleifen, kaputte Vorschaubilder, und im Log steht bei jedem Zugriff dieselbe IP-Adresse. Ergänzt deshalb in <code>config/config.php</code>:</p>



<pre class="wp-block-code"><code>'trusted_domains' =&gt; &#91;
  'cloud.example.ch',
],
'trusted_proxies' =&gt; &#91;'127.0.0.1'],
'forwarded_for_headers' =&gt; &#91;'HTTP_X_FORWARDED_FOR'],
'overwriteprotocol' =&gt; 'https',
'overwritehost' =&gt; 'cloud.example.ch',
'overwrite.cli.url' =&gt; 'https://cloud.example.ch',</code></pre>



<p class="wp-block-paragraph">Die Bedeutung der Werte steht in der <a href="https://github.com/nextcloud/server/blob/master/config/config.sample.php">kommentierten Beispielkonfiguration im Nextcloud-Repository</a>. <code>trusted_proxies</code> erlaubt Nextcloud, den weitergereichten Client-IPs überhaupt zu glauben, <code>forwarded_for_headers</code> legt fest, welchem Header dabei vertraut wird, und die drei <code>overwrite</code>-Werte korrigieren die Selbsteinschätzung bei der URL-Erzeugung. Läuft Nextcloud in einem Container, gehört unter <code>trusted_proxies</code> nicht <code>127.0.0.1</code>, sondern die Adresse des Docker-Netzes.</p>



<h2 class="wp-block-heading">Sicherheitskopfzeilen an einer Stelle statt in jedem Dienst</h2>



<p class="wp-block-paragraph">Der zweite grosse Vorteil eines zentralen Einstiegspunkts: Kopfzeilen, die für alle Dienste gelten sollen, schreibt ihr genau einmal. Caddy kennt dafür wiederverwendbare Bausteine, sogenannte Snippets, die in runden Klammern definiert und mit <code>import</code> eingebunden werden:</p>



<pre class="wp-block-code"><code>{
	header {
		Strict-Transport-Security "max-age=31536000"
		X-Content-Type-Options "nosniff"
		X-Frame-Options "SAMEORIGIN"
		Referrer-Policy "no-referrer"
		-Server
	}
}

cloud.example.ch {
	import sicherheit
	reverse_proxy 127.0.0.1:8080
}

vault.example.ch {
	import sicherheit
	reverse_proxy 127.0.0.1:8000
}</code></pre>



<p class="wp-block-paragraph">Das führende Minus vor <code>Server</code> löscht die Kopfzeile aus der Antwort. Bei <code>Strict-Transport-Security</code> ist Vorsicht angebracht: Die Anweisung sagt jedem Browser, diese Domain für die angegebene Dauer ausschliesslich über HTTPS anzusprechen — hier ein Jahr. Das ist erwünscht, aber es lässt sich nicht kurzfristig zurücknehmen. Nehmt die Zusätze <code>includeSubDomains</code> und <code>preload</code> erst dazu, wenn wirklich jede Subdomain dauerhaft per HTTPS erreichbar ist.</p>



<h2 class="wp-block-heading">Zertifikate ohne offene Ports: die DNS-Challenge</h2>



<p class="wp-block-paragraph">HTTP- und TLS-ALPN-Challenge setzen voraus, dass die Zertifizierungsstelle euren Server von aussen erreicht. Das ist nicht immer der Fall: an einem DS-Lite-Anschluss fehlt die öffentliche IPv4-Adresse, manche Provider sperren Port 80, und für Dienste, die absichtlich nur im VPN erreichbar sind, gibt es gar keinen Weg von aussen. Ausserdem lassen sich Wildcard-Zertifikate ausschliesslich per DNS ausstellen.</p>



<p class="wp-block-paragraph">Die <a href="https://caddyserver.com/docs/caddyfile/directives/tls">DNS-Challenge</a> dreht die Beweisrichtung um: Statt einer Datei auf eurem Server legt Caddy einen TXT-Eintrag in eurer DNS-Zone an. Damit braucht es keinen einzigen offenen Port — aber Schreibzugriff auf die Zone.</p>



<figure class="wp-block-image size-large"><a href="https://yourdevice.ch/wp-content/uploads/2026/08/caddy-acme-challenges.png"><img loading="lazy" decoding="async" width="1024" height="724" src="https://yourdevice.ch/wp-content/uploads/2026/08/caddy-acme-challenges-1024x724.png" alt="Vergleich der drei ACME-Validierungswege. Die HTTP-Challenge läuft über Port 80, setzt einen aus dem Internet erreichbaren Port 80 und einen DNS-Eintrag auf die öffentliche IP voraus und kann keine Wildcard-Zertifikate. Die TLS-ALPN-Challenge läuft über Port 443 im TLS-Handshake, setzt einen erreichbaren Port 443 voraus, kann ebenfalls keine Wildcards und scheitert hinter fremder TLS-Terminierung. Die DNS-Challenge braucht keinen offenen Port, sondern ein Anbieter-Plugin im Caddy-Binary und einen API-Token mit Schreibrecht auf die DNS-Zone, und ist der einzige Weg zu Wildcard-Zertifikaten und zu Diensten ohne Zugang von aussen." class="wp-image-20715" srcset="https://yourdevice.ch/wp-content/uploads/2026/08/caddy-acme-challenges-1024x724.png 1024w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-acme-challenges-300x212.png 300w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-acme-challenges-768x543.png 768w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-acme-challenges-1536x1087.png 1536w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-acme-challenges-2048x1449.png 2048w, https://yourdevice.ch/wp-content/uploads/2026/08/caddy-acme-challenges-500x354.png 500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">Plugin nachrüsten mit caddy add-package</h3>



<p class="wp-block-paragraph">Für jeden DNS-Anbieter gibt es ein eigenes Modul, und weil Caddy-Erweiterungen einkompiliert werden, braucht es ein neues Binary. Der eingebaute Befehl erledigt das:</p>



<pre class="wp-block-code"><code>sudo caddy add-package github.com/caddy-dns/cloudflare
caddy list-modules --packages | grep cloudflare
sudo systemctl restart caddy</code></pre>



<p class="wp-block-paragraph">Und damit zur angekündigten Nebenwirkung: <code>caddy add-package</code> ersetzt das vom Paketmanager installierte Binary. Beim nächsten <code>apt upgrade</code> überschreibt apt es wieder mit der Standardversion — das Plugin ist weg, die Caddyfile verweist auf ein Modul, das es nicht mehr gibt, und der Dienst startet nicht. Wer das vermeiden will, führt <code>add-package</code> nach jedem Upgrade erneut aus oder aktualisiert stattdessen mit <code>caddy upgrade</code>, das die installierten Module beibehält. Notiert euch die Zeile mit euren Paketen an einer Stelle, an der ihr sie wiederfindet.</p>



<h3 class="wp-block-heading">Den API-Token sauber übergeben</h3>



<p class="wp-block-paragraph">Der Token gehört nicht in die Caddyfile, sondern in die Umgebung des Dienstes. Bei Cloudflare braucht er laut <a href="https://github.com/caddy-dns/cloudflare">Modul-Dokumentation</a> genau zwei Berechtigungen: <code>Zone.Zone:Read</code> und <code>Zone.DNS:Edit</code>, beschränkt auf die betroffenen Zonen. Legt ein systemd-Override an:</p>



<pre class="wp-block-code"><code>sudo systemctl edit caddy</code></pre>



<p class="wp-block-paragraph">Und tragt dort ein:</p>



<pre class="wp-block-code"><code>&#91;Service]
Environment="CF_API_TOKEN=euer_token_hier"</code></pre>



<p class="wp-block-paragraph">In der Caddyfile wird der Wert dann als Platzhalter referenziert:</p>



<pre class="wp-block-code"><code>intern.example.ch {
	tls {
		dns cloudflare {env.CF_API_TOKEN}
	}
	reverse_proxy 127.0.0.1:3000
}</code></pre>



<p class="wp-block-paragraph">Die ältere Schreibweise mit getrennten <code>zone_token</code>- und <code>api_token</code>-Feldern taucht in vielen Anleitungen im Netz noch auf. Das Modul bezeichnet sie ausdrücklich als veraltet und behält sie nur aus Kompatibilitätsgründen — nehmt die einzeilige Variante.</p>



<h3 class="wp-block-heading">Wildcard-Zertifikate</h3>



<p class="wp-block-paragraph">Steht die DNS-Challenge, könnt ihr ein einziges Zertifikat für alle Subdomains ausstellen lassen. Das reduziert die Zahl der ACME-Anfragen erheblich und hält euch von den Rate Limits fern:</p>



<pre class="wp-block-code"><code>*.example.ch {
	tls {
		dns cloudflare {env.CF_API_TOKEN}
	}

	@cloud host cloud.example.ch
	handle @cloud {
		reverse_proxy 127.0.0.1:8080
	}

	@vault host vault.example.ch
	handle @vault {
		reverse_proxy 127.0.0.1:8000
	}

	handle {
		abort
	}
}</code></pre>



<p class="wp-block-paragraph">Die mit <code>@</code> beginnenden Ausdrücke sind Matcher, die den passenden Hostnamen herausgreifen. Der letzte <code>handle</code>-Block ohne Matcher fängt alles ab, was zu keinem Dienst gehört, und bricht die Verbindung ab — sonst würde jede erfundene Subdomain irgendwo landen. Beachtet dabei, dass ein Wildcard-Zertifikat nur eine Ebene abdeckt: <code>*.example.ch</code> gilt für <code>cloud.example.ch</code>, aber nicht für <code>a.b.example.ch</code>.</p>



<h2 class="wp-block-heading">Betrieb: prüfen, neu laden, Logs lesen</h2>



<p class="wp-block-paragraph">Im laufenden Betrieb sind es vor allem drei Handgriffe. Nach jeder Änderung an der Caddyfile gilt dieselbe Reihenfolge wie oben: formatieren, validieren, neu laden. <code>systemctl reload caddy</code> übernimmt die neue Konfiguration ohne Verbindungsabbruch — ein <code>restart</code> ist nur nötig, wenn ihr das Binary getauscht oder die systemd-Unit geändert habt.</p>



<p class="wp-block-paragraph">Standardmässig landet alles im Journal. Für einen einzelnen Dienst lohnt sich ein eigenes Zugriffsprotokoll, etwa um es später an <a href="https://yourdevice.ch/mit-crowdsec-server-absichern/">CrowdSec</a> zu übergeben:</p>



<pre class="wp-block-code"><code>cloud.example.ch {
	log {
		output file /var/log/caddy/cloud.log {
			roll_size 10MiB
			roll_keep 5
		}
	}
	reverse_proxy 127.0.0.1:8080
}</code></pre>



<p class="wp-block-paragraph">Das Verzeichnis muss dem Benutzer <code>caddy</code> gehören. Und ein Punkt, der gern vergessen wird: In eure Sicherung gehört nicht nur <code>/etc/caddy</code>, sondern auch <code>/var/lib/caddy/.local/share/caddy</code>. Dort liegen die Zertifikate, die privaten Schlüssel und der ACME-Kontoschlüssel. Ohne dieses Verzeichnis holt ein neu aufgesetzter Server zwar alle Zertifikate neu — aber jeder solche Durchlauf zählt auf die Rate Limits.</p>



<h2 class="wp-block-heading">Stolperfallen, die euch einen Abend kosten</h2>



<ul class="wp-block-list">
<li><strong>Port 80 zugemacht.</strong> Viele schliessen ihn, weil ohnehin alles über HTTPS läuft. Dann fehlt die Weiterleitung für Besucher, die ohne Präfix tippen, und die HTTP-Challenge fällt als Ausweichweg weg. Lasst ihn offen, ausser ihr nutzt ausschliesslich die DNS-Challenge.</li>



<li><strong>Alter Webserver läuft noch.</strong> Ein <code>address already in use</code> im Journal bedeutet fast immer einen vergessenen Apache oder nginx.</li>



<li><strong>Dienst lauscht auf 0.0.0.0.</strong> Dann ist er direkt über seinen Port erreichbar, unverschlüsselt und ohne die gesetzten Kopfzeilen. Bindet Backends an <code>127.0.0.1</code> und blockt die Ports zusätzlich in der Firewall.</li>



<li><strong>Cloudflare-Proxy davor.</strong> Steht in eurem DNS die orange Wolke, terminiert Cloudflare TLS selbst und die TLS-ALPN-Challenge scheitert zwangsläufig. Dann führt der Weg über die DNS-Challenge.</li>



<li><strong>Konfiguration nicht validiert.</strong> <code>systemctl reload</code> mit einer fehlerhaften Datei lässt die alte Konfiguration aktiv und meldet den Fehler nur im Journal. Wer nicht hinsieht, wundert sich, warum die Änderung nichts bewirkt.</li>



<li><strong>Leerzeichen statt Tabulatoren.</strong> Erzeugt Fehlermeldungen, die auf den ersten Blick nichts mit Einrückung zu tun haben. <code>caddy fmt --overwrite</code> zuerst.</li>
</ul>



<h2 class="wp-block-heading">Was ihr tun könnt</h2>



<ul class="wp-block-list">
<li>Legt für jeden Dienst eine eigene Subdomain an, statt Ports nach aussen zu öffnen. Das kostet nichts und ist die Grundlage für alles Weitere.</li>



<li>Baut die erste Konfiguration gegen den Staging-Endpunkt von Let's Encrypt. Zwei zusätzliche Minuten, die euch im Fehlerfall eine Woche Wartezeit ersparen.</li>



<li>Bindet alle Backends auf <code>127.0.0.1</code> und prüft mit <code>ss -tlnp</code>, ob sich noch etwas an einer öffentlichen Adresse festhält.</li>



<li>Zieht die Sicherheitskopfzeilen in ein Snippet und importiert es in jeden Site-Block, statt sie in jedem Dienst einzeln zu pflegen.</li>



<li>Nehmt <code>/var/lib/caddy/.local/share/caddy</code> in die Sicherung auf.</li>



<li>Wenn ihr Plugins nachrüstet: haltet die <code>add-package</code>-Zeile fest und prüft nach jedem Systemupdate mit <code>caddy list-modules --packages</code>, ob sie noch da sind.</li>
</ul>



<div class="yd-cta" style="border:2px solid #e74c3c;border-radius:16px;padding:1.4rem 1.5rem;margin:2.2rem 0;background:#ffffff;display:flex;flex-wrap:wrap;gap:1rem 1.5rem;align-items:center;justify-content:space-between;color:#1f2933"><div style="flex:1 1 320px"><p style="margin:0 0 .3rem;font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:#e74c3c;font-weight:700">Keine Zeit für Caddyfile und Zertifikate?</p><p style="margin:0 0 .45rem;font-size:1.25rem;font-weight:800;line-height:1.3;color:#1f2933">Wir richten eure Dienste ein und betreuen den Server</p><p style="margin:0;color:#52606d;font-size:.95rem">Einen Dienst wie Nextcloud, Vaultwarden oder Immich setzen wir auf eurem Server samt HTTPS und Backup auf, ab CHF 260. Die laufende Betreuung mit Updates und Backup-Kontrolle gibt es ab CHF 89 pro Server und Monat, remote in der ganzen Schweiz. <a href="https://yourdevice.ch/open-source-services-fuer-euer-zuhause-oder-euer-unternehmen/" style="color:#c0392b">Alle IT-Dienstleistungen</a>.</p></div><a href="https://yourdevice.ch/linux-server-wartung/" style="display:inline-block;padding:.8rem 1.35rem;border-radius:10px;background:#e74c3c;color:#ffffff;font-weight:700;text-decoration:none;white-space:nowrap">Server-Betreuung ansehen</a></div>



<h2 class="wp-block-heading">Fazit: Caddy macht TLS zur Standardeinstellung statt zur Bastelaufgabe</h2>



<p class="wp-block-paragraph">Die verbreitete Kombination aus nginx und Certbot funktioniert seit Jahren zuverlässig, und niemand muss sie ersetzen. Aber sie besteht aus vier Teilen, die zusammenarbeiten müssen: Webserver, ACME-Client, Timer und Konfigurationsdateien, die zwei Programme gleichzeitig bearbeiten. Jeder dieser Teile hat schon einmal jemandem ein abgelaufenes Zertifikat beschert.</p>



<p class="wp-block-paragraph">Caddy schneidet diese Kette auf ein Teil zusammen. Sechs Zeilen Konfiguration reichen für einen Dienst mit gültigem Zertifikat, automatischer Erneuerung, HTTP-Weiterleitung, HTTP/2, HTTP/3 und funktionierenden WebSockets. Dass Immich in der eigenen Dokumentation eine halbe Seite nginx neben drei Zeilen Caddy stellt, ist keine Werbung des Caddy-Projekts, sondern die Einschätzung eines unbeteiligten Dritten.</p>



<p class="wp-block-paragraph">Der Preis dafür sind weniger Stellschrauben und ein Erweiterungsmodell, das bei jedem Systemupdate Aufmerksamkeit verlangt. Für die überwiegende Mehrheit selbst gehosteter Installationen ist das ein guter Handel. Verschlüsselung sollte der unauffällige Normalzustand sein und nicht die Aufgabe, die dreimal im Jahr um drei Uhr morgens Alarm schlägt — und genau daran gemessen ist Caddy für Selfhoster derzeit die vernünftigste Wahl.</p>



<h2 class="wp-block-heading">Quellen und weiterführende Links</h2>



<ul class="wp-block-list">
<li><a href="https://caddyserver.com/docs/install">Caddy Documentation — Install</a>, offizielle Installationswege inklusive apt-Repository</li>



<li><a href="https://caddyserver.com/docs/automatic-https">Caddy Documentation — Automatic HTTPS</a>, Ablauf der Zertifikatsbeschaffung und Challenge-Auswahl</li>



<li><a href="https://caddyserver.com/docs/caddyfile/directives/reverse_proxy">Caddy Documentation — reverse_proxy</a>, Syntax, gesetzte Header, Transport und Lastverteilung</li>



<li><a href="https://caddyserver.com/docs/caddyfile/directives/tls">Caddy Documentation — tls</a>, DNS-Challenge, Propagation und alternative Zertifizierungsstellen</li>



<li><a href="https://caddyserver.com/docs/caddyfile/options">Caddy Documentation — Global Options</a>, globaler Optionsblock mit email und acme_ca</li>



<li><a href="https://caddyserver.com/docs/command-line">Caddy Documentation — Command Line</a>, validate, fmt, reload, add-package und upgrade</li>



<li><a href="https://caddyserver.com/docs/running">Caddy Documentation — Keeping Caddy Running</a>, systemd-Dienst, Benutzer und Datenverzeichnisse</li>



<li><a href="https://caddyserver.com/docs/caddyfile/directives/request_body">Caddy Documentation — request_body</a>, Begrenzung der Anfragegrösse</li>



<li><a href="https://github.com/caddyserver/caddy/releases">caddyserver/caddy — Releases</a>, Versionsstand v2.11.4 vom 3. Juni 2026</li>



<li><a href="https://github.com/caddy-dns/cloudflare">caddy-dns/cloudflare</a>, Konfigurationssyntax und benötigte Token-Berechtigungen</li>



<li><a href="https://letsencrypt.org/docs/rate-limits/">Let's Encrypt — Rate Limits</a>, verbindliche Grenzwerte für Ausstellung und Fehlversuche</li>



<li><a href="https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size">nginx — client_max_body_size</a>, Vorgabewert 1 MB und Verhalten bei Überschreitung</li>



<li><a href="https://docs.immich.app/administration/reverse-proxy/">Immich — Reverse Proxy</a>, Vergleich der nginx- und Caddy-Konfiguration</li>



<li><a href="https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples">Vaultwarden Wiki — Proxy examples</a>, Caddy-Beispiel des Projekts</li>



<li><a href="https://github.com/nextcloud/server/blob/master/config/config.sample.php">Nextcloud — config.sample.php</a>, kommentierte Referenz zu trusted_proxies und den overwrite-Werten</li>
</ul>
<p>The post <a href="https://yourdevice.ch/caddy-reverse-proxy-einrichten/">Caddy Reverse Proxy einrichten: HTTPS ohne Certbot</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://yourdevice.ch/caddy-reverse-proxy-einrichten/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Was ist LUKS und wann sollte ich meine Festplatte verschlüsseln</title>
		<link>https://yourdevice.ch/was-ist-luks-und-wann-sollte-ich-meine-festplatte-verschluesseln/</link>
					<comments>https://yourdevice.ch/was-ist-luks-und-wann-sollte-ich-meine-festplatte-verschluesseln/#respond</comments>
		
		<dc:creator><![CDATA[Mario]]></dc:creator>
		<pubDate>Fri, 07 Feb 2025 08:40:49 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[LUKS]]></category>
		<category><![CDATA[Privatsphäre]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Verschlüsselung]]></category>
		<guid isPermaLink="false">https://yourdevice.ch/?p=17700</guid>

					<description><![CDATA[<p>Die LUKS Verschlüsselung ist unter Linux der Standard, um Festplatten und andere Datenträger zu verschlüsseln. LUKS steht für Linux Unified Key Setup. Es wurde entwickelt, um eine sichere, plattformunabhängige und...</p>
<p>The post <a href="https://yourdevice.ch/was-ist-luks-und-wann-sollte-ich-meine-festplatte-verschluesseln/">Was ist LUKS und wann sollte ich meine Festplatte verschlüsseln</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Die LUKS Verschlüsselung ist unter Linux der Standard, um Festplatten und andere Datenträger zu verschlüsseln. <a href="https://wiki.ubuntuusers.de/LUKS/">LUKS</a> steht für <strong>Linux Unified Key Setup</strong>. Es wurde entwickelt, um eine sichere, plattformunabhängige und benutzerfreundliche Möglichkeit zur Verschlüsselung von Speichermedien zu bieten. LUKS verwendet das <strong>dm-crypt</strong>-Subsystem des Linux-Kernels, um eine vollständige Festplattenverschlüsselung zu ermöglichen. In diesem Beitrag geht es kurz darum, wann ihr eure Festplatte mit LUKS verschlüsseln solltet, und wann eher nicht. Diese Frage stellt sich vor allem dann, wenn ihr auf eurem Laptop oder PC eine Linux Distribution selber installieren wollt, oder ihr in unserem Shop ein Linux-Gerät kaufen wollt und euch bei der Option Verschlüsselung nicht sicher seid.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="512" src="https://yourdevice.ch/wp-content/uploads/2025/02/LUKS_title-1024x512.jpeg" alt="" class="wp-image-17702" style="width:750px" srcset="https://yourdevice.ch/wp-content/uploads/2025/02/LUKS_title-1024x512.jpeg 1024w, https://yourdevice.ch/wp-content/uploads/2025/02/LUKS_title-300x150.jpeg 300w, https://yourdevice.ch/wp-content/uploads/2025/02/LUKS_title-768x384.jpeg 768w, https://yourdevice.ch/wp-content/uploads/2025/02/LUKS_title-500x250.jpeg 500w, https://yourdevice.ch/wp-content/uploads/2025/02/LUKS_title.jpeg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Quelle Bild: medium.com</figcaption></figure>
</div>




<h2 class="wp-block-heading"><strong>Wie funktioniert LUKS?</strong></h2>



<ul class="wp-block-list">
<li>Es verschlüsselt ganze Partitionen oder Laufwerke, anstatt nur einzelne Dateien.</li>



<li>Es verwendet starke kryptografische Algorithmen (z. B. AES-256).</li>



<li>Es ermöglicht die Speicherung mehrerer Schlüssel für den Zugriff auf die verschlüsselte Partition.</li>



<li>Es ist mit verschiedenen Authentifizierungsmethoden kompatibel, z. B. Passwörter oder Smartcards.</li>
</ul>



<h3 class="wp-block-heading"><strong>LUKS2 vs. LUKS1</strong></h3>



<ul class="wp-block-list">
<li>LUKS1 ist der ältere Standard, der weit verbreitet und mit vielen Systemen kompatibel ist.</li>



<li>LUKS2 ist die neuere Version mit Verbesserungen wie flexiblerem Header-Management und besserer Widerstandsfähigkeit gegen Angriffe auf die Metadaten.</li>
</ul>



<h2 class="wp-block-heading"><strong>Wann ist eine Verschlüsselung mit LUKS sinnvoll?</strong></h2>



<p class="wp-block-paragraph">Die Verschlüsselung eines Linux-Systems mit LUKS ist in verschiedenen Szenarien sinnvoll, vor allem in den folgenden Fällen:</p>



<h3 class="wp-block-heading"><strong>1. Schutz sensibler Daten</strong></h3>



<p class="wp-block-paragraph">Wenn ihr persönliche oder geschäftliche Daten auf eurem Laptop oder PC speichert, schützt LUKS vor unbefugtem Zugriff, falls das Gerät verloren geht oder gestohlen wird.</p>



<h3 class="wp-block-heading"><strong>2. Sicherheit bei mobilen Geräten (Laptops, USB-Sticks, externe Festplatten)</strong></h3>



<p class="wp-block-paragraph">Laptops und externe Speichergeräte sind besonders anfällig für Diebstahl oder Verlust. Eine LUKS-Verschlüsselung stellt sicher, dass niemand ohne das richtige Passwort auf die Daten zugreifen kann.</p>



<h3 class="wp-block-heading"><strong>3. Datenschutz und DSGVO-Konformität</strong></h3>



<p class="wp-block-paragraph">Unternehmen oder Selbstständige, die personenbezogene Daten speichern, müssen Maßnahmen ergreifen, um unbefugten Zugriff zu verhindern. LUKS hilft, Datenschutzrichtlinien (z. B. die EU-DSGVO) einzuhalten.</p>



<h3 class="wp-block-heading"><strong>4. Schutz gegen physische Angriffe</strong></h3>



<p class="wp-block-paragraph">Wenn ein Angreifer physischen Zugriff auf eine unverschlüsselte Festplatte hat, kann er Daten extrahieren oder ein Rootkit installieren. Mit LUKS ist das Auslesen der Festplatte ohne das richtige Passwort unmöglich.</p>



<h3 class="wp-block-heading"><strong>5. Cloud- und Server-Sicherheit</strong></h3>



<p class="wp-block-paragraph">Falls ihr einen Server betreibt und euch vor unautorisiertem Zugriff auf die Festplatte absichern möchtest (z. B. wenn euer dedizierter Server in einem Rechenzentrum steht), kann eine Verschlüsselung sinnvoll sein.</p>



<h3 class="wp-block-heading"><strong>6. Multi-User-Systeme</strong></h3>



<p class="wp-block-paragraph">Wenn mehrere Benutzer auf ein System zugreifen, bietet LUKS eine zusätzliche Sicherheitsebene, indem es die gesamte Festplatte vor unautorisiertem Zugriff schützt.</p>



<h2 class="wp-block-heading"><strong>Wann ist eine Verschlüsselung weniger sinnvoll?</strong></h2>



<p class="wp-block-paragraph">Obwohl LUKS eine starke Sicherheitsmaßnahme ist, gibt es Fälle, in denen eine Verschlüsselung nicht unbedingt notwendig ist:</p>



<ol class="wp-block-list">
<li><strong>Wenn das System nur lokal und ohne sensible Daten genutzt wird</strong><br>– Beispielsweise ein Heimserver, der ohnehin nur in einem sicheren Netzwerk läuft.</li>



<li><strong>Leistungseinbußen bei älteren Systemen</strong><br>– Verschlüsselung benötigt Rechenleistung, insbesondere auf älteren Geräten ohne AES-NI-Unterstützung (Hardware-Beschleunigung für Verschlüsselung).</li>



<li><strong>Wenn ein System rund um die Uhr ohne manuelle Eingabe startet</strong><br>– Bei Headless-Servern kann eine Verschlüsselung unpraktisch sein, wenn beim Booten ein Passwort eingegeben werden muss.</li>



<li><strong>Wenn bereits andere Sicherheitsmaßnahmen ausreichen</strong><br>– Beispielsweise, wenn das System bereits in einem sicheren, abgeschotteten Netzwerk betrieben wird.</li>
</ol>



<h2 class="wp-block-heading">Home Ordner oder ganze Platte verschlüsseln</h2>



<p class="wp-block-paragraph">Bei vielen Linux-Distributionen könnt ihr während der Installation entscheiden, ob ihr <strong>die gesamte Platte</strong> oder nur den <strong>Home-Ordner</strong> verschlüsseln möchtet. Beide Optionen haben Vor- und Nachteile, je nach euren Anforderungen. Hier sind die wesentlichen Unterschiede:</p>



<h2 class="wp-block-heading"><strong>Ganze Festplatte verschlüsseln (Full Disk Encryption, FDE mit LUKS)</strong></h2>



<p class="wp-block-paragraph"><strong>Wie funktioniert es?</strong></p>



<ul class="wp-block-list">
<li>Der Bootloader (z. B. GRUB) bleibt unverschlüsselt, aber alles andere auf der Platte ist geschützt. <a href="https://neon.kde.org/">KDE Neon</a> bildet hier eine Ausnahme, den Neon verschlüsselt auch die Bootloader Partition mit. </li>



<li>Die gesamte Partition (einschließlich <code>/home</code>, <code>/root</code>, <code>/var</code>, <code>/tmp</code>, <code>/swap</code>) wird mit <strong>LUKS</strong> verschlüsselt.</li>



<li>Beim Systemstart wird das Passwort abgefragt, um die Festplatte zu entschlüsseln.</li>
</ul>



<h3 class="wp-block-heading"><strong>Vorteile</strong></h3>



<p class="wp-block-paragraph">✅ <strong>Maximaler Schutz</strong></p>



<ul class="wp-block-list">
<li>Alles außer dem Bootloader ist verschlüsselt, also auch Systemdateien, Logs, Swap und temporäre Dateien.</li>



<li>Falls ein Angreifer das System stiehlt, kommt er ohne Passwort an <strong>gar keine Daten</strong> heran.</li>
</ul>



<p class="wp-block-paragraph">✅ <strong>Schutz vor Cold-Boot-Attacken</strong></p>



<ul class="wp-block-list">
<li>Bei einem erzwungenen Neustart verliert das System den entschlüsselten Speicherzustand, wodurch Angriffe erschwert werden.</li>
</ul>



<p class="wp-block-paragraph">✅ <strong>Einfache Verwaltung</strong></p>



<ul class="wp-block-list">
<li>Da die gesamte Festplatte verschlüsselt ist, muss man sich keine Gedanken über einzelne Verzeichnisse oder Swap-Partitionen machen.</li>
</ul>



<h3 class="wp-block-heading"><strong>Nachteile</strong></h3>



<p class="wp-block-paragraph">❌ <strong>Boot-Passwort erforderlich</strong></p>



<ul class="wp-block-list">
<li>Vor dem Start des Betriebssystems muss das LUKS-Passwort eingegeben werden. Das kann bei einem Remote-Server ohne KVM oder TPM unpraktisch sein.</li>
</ul>



<p class="wp-block-paragraph">❌ <strong>Komplexere Einrichtung für Multi-User-Systeme</strong></p>



<ul class="wp-block-list">
<li>Alle Nutzer teilen die gleiche Entschlüsselung, was bedeutet, dass jeder mit Zugriff auf das System grundsätzlich an alles herankommen könnte, wenn das System läuft.</li>
</ul>



<p class="wp-block-paragraph">❌ <strong>Kein Schutz bei laufendem System</strong></p>



<ul class="wp-block-list">
<li>Ist das System einmal entschlüsselt und läuft, sind die Daten für einen eingeloggten Angreifer zugänglich.</li>
</ul>



<h2 class="wp-block-heading"><strong>Nur den Home-Ordner verschlüsseln (z. B. mit eCryptfs)</strong></h2>



<p class="wp-block-paragraph"><strong>Wie funktioniert es?</strong></p>



<ul class="wp-block-list">
<li>Statt der ganzen Festplatte wird nur <code>/home</code> verschlüsselt.</li>



<li>Die Entschlüsselung erfolgt automatisch, sobald sich der Benutzer anmeldet.</li>



<li>eCryptfs ist oft das Standardverfahren für Home-Verschlüsselung, aber neuere Distributionen wie Ubuntu setzen inzwischen auf <strong>fscrypt</strong>.</li>
</ul>



<h3 class="wp-block-heading"><strong>Vorteile</strong></h3>



<p class="wp-block-paragraph">✅ <strong>Einfach zu benutzen</strong></p>



<ul class="wp-block-list">
<li>Kein Passwort beim Booten nötig, da die Entschlüsselung mit der Benutzeranmeldung geschieht.</li>
</ul>



<p class="wp-block-paragraph">✅ <strong>Feingranulare Kontrolle</strong></p>



<ul class="wp-block-list">
<li>Jeder Benutzer hat seinen eigenen verschlüsselten Bereich. Andere User auf dem gleichen System haben <strong>keinen Zugriff auf fremde Home-Verzeichnisse</strong>.</li>
</ul>



<p class="wp-block-paragraph">✅ <strong>Kein Performance-Verlust für Systemdateien</strong></p>



<ul class="wp-block-list">
<li>Nur der Home-Ordner wird verschlüsselt, was weniger CPU-Overhead bedeutet als eine komplette Festplattenverschlüsselung.</li>
</ul>



<h3 class="wp-block-heading"><strong>Nachteile</strong></h3>



<p class="wp-block-paragraph">❌ <strong>System bleibt unverschlüsselt</strong></p>



<ul class="wp-block-list">
<li>Alles außerhalb des Home-Verzeichnisses bleibt unverschlüsselt, z. B. <code>/tmp</code>, Logs in <code>/var/log</code>, Swap-Partition (falls nicht speziell konfiguriert).</li>



<li>Sensible Daten, die von Programmen außerhalb von <code>/home</code> gespeichert werden (z. B. Browser-Caches), könnten ungeschützt sein.</li>
</ul>



<p class="wp-block-paragraph">❌ <strong>Angreifbar bei physischem Zugriff</strong></p>



<ul class="wp-block-list">
<li>Falls ein Angreifer vollen Zugriff auf das System hat, kann er Spuren in unverschlüsselten Bereichen (z. B. Swap oder Logs) nutzen, um Rückschlüsse auf die verschlüsselten Daten zu ziehen.</li>
</ul>



<p class="wp-block-paragraph">❌ <strong>Multi-User-Komplexität</strong></p>



<ul class="wp-block-list">
<li>Falls mehrere Benutzer mit verschiedenen Passwörtern arbeiten, muss jeder Benutzer sein eigenes Verschlüsselungssetup haben.</li>
</ul>



<h2 class="wp-block-heading"><strong>Welche Methode sollte man wählen</strong></h2>



<p class="wp-block-paragraph">🔹 <strong>Ganze Platte verschlüsseln (LUKS):</strong></p>



<ul class="wp-block-list">
<li>Ideal für <strong>Laptops, Server oder Workstations mit sensiblen Daten</strong>.</li>



<li>Wenn der physische Schutz der Daten <strong>höchste Priorität</strong> hat.</li>



<li>Falls Swap, <code>/tmp</code> und andere Systemdateien nicht im Klartext sein sollen.</li>
</ul>



<p class="wp-block-paragraph">🔹 <strong>Nur Home-Verzeichnis verschlüsseln (eCryptfs, fscrypt):</strong></p>



<ul class="wp-block-list">
<li>Geeignet für <strong>Multi-User-Systeme</strong>, bei denen Benutzer ihre Daten isoliert speichern sollen.</li>



<li>Wenn man <strong>keine Passworteingabe beim Booten</strong> möchte.</li>



<li>Falls nur persönliche Dateien wichtig sind, nicht aber das ganze System.</li>
</ul>



<p class="wp-block-paragraph"><strong>💡 Empfehlung:</strong><br><br>Falls <strong>höchstmögliche Sicherheit</strong> gefragt ist, sollte die <strong>ganze Platte mit LUKS</strong> verschlüsselt werden. Wer aber einen guten Kompromiss zwischen Sicherheit und Bequemlichkeit sucht, kann nur den <strong>Home-Ordner</strong> verschlüsseln – insbesondere auf einem Multi-User-System.</p>



<p class="wp-block-paragraph">Wer seine Platte zu Beginn mit LUKS verschlüsselt, muss seinen Homeordner natürlich nicht mehr verschlüsseln. Diese Option später im Installer kann man dann also ignorieren.</p>



<div class="yd-cta" style="border:2px solid #e74c3c;border-radius:16px;padding:1.4rem 1.5rem;margin:2.2rem 0;background:#ffffff;display:flex;flex-wrap:wrap;gap:1rem 1.5rem;align-items:center;justify-content:space-between;color:#1f2933"><div style="flex:1 1 320px"><p style="margin:0 0 .3rem;font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:#e74c3c;font-weight:700">Neuer Laptop mit Linux?</p><p style="margin:0 0 .45rem;font-size:1.25rem;font-weight:800;line-height:1.3;color:#1f2933">Laptops mit vorinstalliertem Linux</p><p style="margin:0;color:#52606d;font-size:.95rem">Wir liefern Laptops mit eingerichtetem Linux, auf Wunsch mit Windows im Dualboot. Ob die Festplatte verschlüsselt wird, wählt ihr direkt bei der Bestellung. Hilfe bei der Einrichtung gibt es über unseren <a href="https://yourdevice.ch/open-source-services-fuer-euer-zuhause-oder-euer-unternehmen/" style="color:#c0392b">Linux-Support</a> für CHF 135 pro Stunde.</p></div><a href="https://yourdevice.ch/produkt-kategorie/linux-laptops/" style="display:inline-block;padding:.8rem 1.35rem;border-radius:10px;background:#e74c3c;color:#ffffff;font-weight:700;text-decoration:none;white-space:nowrap">Linux-Laptops ansehen</a></div>



<h2 class="wp-block-heading"><strong>Fazit</strong></h2>



<p class="wp-block-paragraph">LUKS ist ein leistungsstarkes Tool zur Verschlüsselung von Festplatten und besonders sinnvoll für mobile Geräte, sensible Daten und sicherheitskritische Anwendungen. Wer ein Linux-System mit persönlichen oder geschäftlichen Daten nutzt, sollte ernsthaft in Erwägung ziehen, die gesamte Festplatte oder zumindest sensible Partitionen mit LUKS zu verschlüsseln.</p>



<p class="wp-block-paragraph">Hier ein Beitrag wie ihr euren <a href="https://yourdevice.ch/linux-home-ordner-mit-luks-verschluesseln/">Homeordner im Nachhinein verschlüsseln könnt</a>, falls dies bei der Linux Installation nicht ausgewählt worden ist:</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-yourdevice-ch-deine-anlaufstelle-f-r-linux-opensource-software-und-co wp-block-embed-yourdevice-ch-deine-anlaufstelle-f-r-linux-opensource-software-und-co"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="EUA3L10qHq"><a href="https://yourdevice.ch/linux-home-ordner-mit-luks-verschluesseln/">Linux Home Ordner nachträglich mit LUKS verschlüsseln</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8222;Linux Home Ordner nachträglich mit LUKS verschlüsseln&#8220; &#8212; yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co" src="https://yourdevice.ch/linux-home-ordner-mit-luks-verschluesseln/embed/#?secret=QgWeQujhwU#?secret=EUA3L10qHq" data-secret="EUA3L10qHq" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>
<p>The post <a href="https://yourdevice.ch/was-ist-luks-und-wann-sollte-ich-meine-festplatte-verschluesseln/">Was ist LUKS und wann sollte ich meine Festplatte verschlüsseln</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://yourdevice.ch/was-ist-luks-und-wann-sollte-ich-meine-festplatte-verschluesseln/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Linux Home Ordner nachträglich mit LUKS verschlüsseln</title>
		<link>https://yourdevice.ch/linux-home-ordner-mit-luks-verschluesseln/</link>
					<comments>https://yourdevice.ch/linux-home-ordner-mit-luks-verschluesseln/#comments</comments>
		
		<dc:creator><![CDATA[Mario]]></dc:creator>
		<pubDate>Tue, 02 Jul 2024 07:00:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Privatsphäre]]></category>
		<category><![CDATA[Verschlüsselung]]></category>
		<guid isPermaLink="false">https://yourdevice.ch/?p=6867</guid>

					<description><![CDATA[<p>In diesem Artikel erfahrt ihr, wie ihr euren Linux Home Ordner nachträglich mit LUKS verschlüsseln könnt. Das Verschlüsseln eines bereits bestehenden Home-Ordners unter Linux mit LUKS kann eine komplexe Aufgabe...</p>
<p>The post <a href="https://yourdevice.ch/linux-home-ordner-mit-luks-verschluesseln/">Linux Home Ordner nachträglich mit LUKS verschlüsseln</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In diesem Artikel erfahrt ihr, wie ihr euren Linux Home Ordner nachträglich mit LUKS verschlüsseln könnt. Das Verschlüsseln eines bereits bestehenden Home-Ordners unter <a href="https://yourdevice.ch/warum-linux/">Linux</a> mit <a href="https://wiki.ubuntuusers.de/LUKS/">LUKS</a> kann eine komplexe Aufgabe sein, die sorgfältig durchgeführt werden muss, um Datenverlust zu vermeiden. Wir erstellen zusammen eine neue verschlüsselte Partition und kopieren unsere Daten in das neue Verzeichnis. Danach binden wir die neue Partition automatisch beim Systemstart ein damit dies sofort verfügbar ist. Dies ist sinnvoll, wenn der Homeordner bei der Installation von Linux nicht verschlüsselt worden ist. Das Tutorial eignet sich auf für mehrere Benutzer auf dem System, die dann ihr eigenen verschlüsselten Home Ordner haben. Falls ihr nur einzelne geheime Ordner erstellen wollt, dann schaut mal <a href="https://yourdevice.ch/mit-luks-verschluesselten-ordner-erstellen/">hier</a> vorbei.</p>



<p class="wp-block-paragraph">Das Tutorial kommt ohne Live-Sticks und ohne neu Partitionierungen der Systemplatten aus, und ist somit eine anfängergfreundliche und denoch sichere Variante. </p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="585" src="https://yourdevice.ch/wp-content/uploads/2024/07/homeordnerluks_title-1024x585.webp" alt="" class="wp-image-14517" style="width:750px" srcset="https://yourdevice.ch/wp-content/uploads/2024/07/homeordnerluks_title-1024x585.webp 1024w, https://yourdevice.ch/wp-content/uploads/2024/07/homeordnerluks_title-300x171.webp 300w, https://yourdevice.ch/wp-content/uploads/2024/07/homeordnerluks_title-768x439.webp 768w, https://yourdevice.ch/wp-content/uploads/2024/07/homeordnerluks_title-1536x878.webp 1536w, https://yourdevice.ch/wp-content/uploads/2024/07/homeordnerluks_title-500x286.webp 500w, https://yourdevice.ch/wp-content/uploads/2024/07/homeordnerluks_title.webp 1792w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>




<h2 class="wp-block-heading">Vorbereitungen um den Linux Home Ordner mit LUKS verschlüsseln zu können</h2>



<p class="wp-block-paragraph">Wir spielen das aufsetzen des neuen Home Ordners anhand 2 Benutzern durch: Benutzer <strong>Wario</strong> und Benutzer <strong>Dario</strong>. Habt ihr nur einen Benutzer, dann lasst die Befehle für Dario einfach weg. Habt ihr mehrere Benutzer, dann fügt die Befehle hinzu mit einem weiteren Benutzer.</p>



<p class="wp-block-paragraph"><strong>Backup erstellen</strong>: Vor allem anderen, erstellen wir zuerst ein Backup aller wichtigen Daten eures Home-Ordner. Das Risiko von Datenverlust ist real. Ihr könnt zum Beispiel Linux Timeshift verwenden, oder tut das von Hand mit einem USB Stick oder einem externen Laufwerk.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://yourdevice.ch/wp-content/uploads/2024/07/homebackupaufstick.png"><img loading="lazy" decoding="async" width="1024" height="713" src="https://yourdevice.ch/wp-content/uploads/2024/07/homebackupaufstick-1024x713.png" alt="" class="wp-image-14518" style="width:750px" srcset="https://yourdevice.ch/wp-content/uploads/2024/07/homebackupaufstick-1024x713.png 1024w, https://yourdevice.ch/wp-content/uploads/2024/07/homebackupaufstick-300x209.png 300w, https://yourdevice.ch/wp-content/uploads/2024/07/homebackupaufstick-768x535.png 768w, https://yourdevice.ch/wp-content/uploads/2024/07/homebackupaufstick-1536x1070.png 1536w, https://yourdevice.ch/wp-content/uploads/2024/07/homebackupaufstick-2048x1426.png 2048w, https://yourdevice.ch/wp-content/uploads/2024/07/homebackupaufstick-500x348.png 500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Einstellungen eines externen Laufwerks für das Backup</figcaption></figure>
</div>


<p class="wp-block-paragraph">Da ihr keinen Zugriff auf den Homeordner anderer Benutzer habt, erstellt ihr ein Backup über die Befehlszeile auf einen Stick oder ein externes Laufwerk. Am besten verwendet ihr ein Laufwerk das mit <strong>ext4</strong> vorher formatiert worden ist. Damit bleiben alle Berechtigungen und Gruppeneinstellungen eurer Ordner erhalten. kopiert euch den Inhalt des Homesordners mit dem Befehl:</p>



<pre class="wp-block-code"><code>sudo rsync -aAXv /home/wario /media/<strong>mario</strong>/home_backup
sudo rsync -aAXv /home/dario /media/<strong>mario</strong>/home_backup</code></pre>



<p class="wp-block-paragraph">Ersetzt <strong>mario</strong> mit eurem aktuellen Benutzer auf dem ihr arbeitet.</p>



<p class="wp-block-paragraph"><strong>Cryptsetup</strong> und <strong>Authentifizerungsmodul installieren</strong>: installiert euch das pam_mount Authentifzierungsmodul mit:</p>



<pre class="wp-block-code"><code>sudo apt-get install cryptsetup
sudo apt update
sudo apt install libpam-mount</code></pre>



<p class="wp-block-paragraph">Temporären Benutzer erstellen: Erstellt euch einen temporären Benutzer damit wir mit diesem Arbeiten können, während wir die Home Ordner der Systembenutzer verschieben:</p>



<pre class="wp-block-code"><code>sudo adduser tempuser<br>sudo usermod -aG sudo tempuser</code></pre>



<h2 class="wp-block-heading">Verschlüsselten Home Ordner erstellen</h2>



<p class="wp-block-paragraph">Wechselt auf der Befehlszeile in den temporären Ordner mit:</p>



<pre class="wp-block-code"><code>su - tempuser</code></pre>



<p class="wp-block-paragraph">Erstellt ein neues Backup auf dem System mit welchem wir direkt arbeiten können:</p>



<pre class="wp-block-code"><code>sudo mkdir /home/wario_backup
sudo mkdir /home/dario_backup</code></pre>



<p class="wp-block-paragraph">und kopiert die Benutzerdaten erneut mit:</p>



<pre class="wp-block-code"><code>sudo rsync -aAXv /home/wario /home/wario_backup<br>sudo rsync -aAXv /home/dario /home/dario_backup</code></pre>



<p class="wp-block-paragraph">Erstellt eine LUKS-verschlüsselte Datei für Wario:</p>



<pre class="wp-block-preformatted"><code>sudo dd if=/dev/zero of=/home/wario.luks bs=1M count=<strong>10240</strong><br></code><br>** Bestätigt das löschen des Laufwerks mit <strong>YES</strong>**<br><br><code>sudo cryptsetup luksFormat /home/wario.luks</code><br><br>**Wählt das selbe Passwort wie das Passwort des Benutzers für das automatische Einbinden während des Starts!**<br><code><br>sudo cryptsetup open /home/wario.luks crypt_home_wario<br>sudo mkfs.ext4 /dev/mapper/crypt_home_wario</code></pre>



<p class="wp-block-paragraph">Ändert die Grösse der <strong>fett markierten Zahl</strong> mit einem Wert eurer Wahl. <strong>10240</strong> entsprechen ca. 10GB Speicher!</p>



<p class="wp-block-paragraph">Das erstellen des verschlüsselten Verzeichnisses kann eine Weile dauern, wartet ab bis ihr wieder auf der Befehlszeile seid:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://yourdevice.ch/wp-content/uploads/2024/07/verschluesseltesverzeichnisserstellen.png"><img loading="lazy" decoding="async" width="1024" height="618" src="https://yourdevice.ch/wp-content/uploads/2024/07/verschluesseltesverzeichnisserstellen-1024x618.png" alt="" class="wp-image-14520" style="width:750px" srcset="https://yourdevice.ch/wp-content/uploads/2024/07/verschluesseltesverzeichnisserstellen-1024x618.png 1024w, https://yourdevice.ch/wp-content/uploads/2024/07/verschluesseltesverzeichnisserstellen-300x181.png 300w, https://yourdevice.ch/wp-content/uploads/2024/07/verschluesseltesverzeichnisserstellen-768x464.png 768w, https://yourdevice.ch/wp-content/uploads/2024/07/verschluesseltesverzeichnisserstellen-1536x928.png 1536w, https://yourdevice.ch/wp-content/uploads/2024/07/verschluesseltesverzeichnisserstellen-2048x1237.png 2048w, https://yourdevice.ch/wp-content/uploads/2024/07/verschluesseltesverzeichnisserstellen-500x302.png 500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</div>


<p class="wp-block-paragraph">Mountet das neue Dateisystem in ein temporäres Verzeichnis:</p>



<pre class="wp-block-preformatted"><code>sudo mkdir /mnt/wario<br>sudo mount /dev/mapper/crypt_home_wario /mnt/wario</code></pre>



<p class="wp-block-paragraph">Kopiert die Daten aus dem temporären Backup in das gemountete Verzeichnis mit:</p>



<pre class="wp-block-code"><code><code>sudo rsync -aAXv /home/wario_backup/ /mnt/wario</code></code></pre>



<p class="wp-block-paragraph">Ändert die Berechtigungen nochmals sicherheitshalber korrekt mit:</p>



<pre class="wp-block-code"><code>sudo chown -R wario:wario /mnt/wario</code></pre>



<p class="wp-block-paragraph">Umount das verschlüsselte Volume:</p>



<pre class="wp-block-code"><code>sudo umount /mnt/wario
sudo cryptsetup close crypt_home_wario</code></pre>



<p class="wp-block-paragraph">Wiederhollt die Schritte für Dario:</p>



<pre class="wp-block-code"><code>sudo dd if=/dev/zero of=/home/dario.luks bs=1M count=10240
sudo cryptsetup luksFormat /home/dario.luks
sudo cryptsetup open /home/dario.luks crypt_home_dario
sudo mkfs.ext4 /dev/mapper/crypt_home_dario
sudo mkdir /mnt/dario
sudo mount /dev/mapper/crypt_home_dario /mnt/dario
sudo rsync -aAXv /home/dario_backup/ /mnt/dario/
sudo chown -R dario:dario /mnt/dario
sudo umount /mnt/dario
sudo cryptsetup close crypt_home_dario</code></pre>



<h2 class="wp-block-heading">Alte Home-Ordner entfernen und Mountpoints vorbereiten</h2>



<p class="wp-block-paragraph">Bevor ihr die verschlüsselten Container automatisch einbinden könnt, müsst ihr die alten Home-Ordner entfernen. Andernfalls würden die verschlüsselten Daten beim Login über die bestehenden Ordner gemountet werden, was zu Problemen führt.</p>



<p class="wp-block-paragraph">Entfernt die alten Home-Ordner mit:</p>



<pre class="wp-block-code"><code>sudo rm -rf /home/wario
sudo rm -rf /home/dario</code></pre>



<p class="wp-block-paragraph">Die Daten sind bereits in <code>/home/wario_backup</code> und <code>/home/dario_backup</code> sowie auf eurem externen Backup gesichert.</p>



<p class="wp-block-paragraph">Erstellt nun neue, leere Verzeichnisse als Mountpoints für die verschlüsselten Container:</p>



<pre class="wp-block-code"><code>sudo mkdir /home/wario
sudo mkdir /home/dario</code></pre>



<p class="wp-block-paragraph">Setzt die korrekten Berechtigungen:</p>



<pre class="wp-block-code"><code>sudo chown wario:wario /home/wario
sudo chown dario:dario /home/dario</code></pre>



<p class="wp-block-paragraph">Jetzt sind die Mountpoints bereit und <code>pam_mount</code> kann die verschlüsselten Container beim Login korrekt einbinden.</p>



<h2 class="wp-block-heading">Neue Home Partition automatisch einbinden</h2>



<p class="wp-block-paragraph">Eine gängige Praxis, um die Bequemlichkeit zu erhöhen und dennoch ein gewisses Sicherheitsniveau zu behalten, ist die Verwendung von PAM (Pluggable Authentication Modules). Es gibt ein PAM-Modul namens <code>pam_mount</code>, das automatisch Home-Verzeichnisse beim Benutzerlogin mounten kann, sofern das Login-Passwort und das LUKS-Passwort identisch sind. Dies ermöglicht eine nahtlose Benutzererfahrung, da die Benutzer nicht zweimal ein Passwort eingeben müssen.</p>



<p class="wp-block-paragraph">Es ist jedoch zu beachten, dass die Verwendung desselben Passworts für mehrere Dienste oder Zwecke (z. B. Anmeldung und Disk-Verschlüsselung) potenzielle Sicherheitsrisiken birgt. Wenn dieses Passwort in irgendeiner Weise kompromittiert wird, ist sowohl der Zugriff auf den Computer als auch der Zugriff auf die verschlüsselten Daten gefährdet. Es ist immer ein Balanceakt zwischen Sicherheit und Bequemlichkeit.</p>



<h3 class="wp-block-heading"><strong>Konfigurieren von pam_mount</strong></h3>



<p class="wp-block-paragraph">Bearbeitet die Datei <code>/etc/security/pam_mount.conf.xml</code> mit einem Texteditor eurer Wahl, z.B.:</p>



<pre class="wp-block-code"><code>sudo nano /etc/security/pam_mount.conf.xml</code></pre>



<p class="wp-block-paragraph">Fügt direkt nach <strong>&lt;pam_mount&gt;</strong> die Konfigurationszeilen für eure LUKS-verschlüsseltes Laufwerke hinzu:</p>



<pre class="wp-block-code"><code>&lt;volume user="wario" path="/home/wario.luks" mountpoint="/home/wario" options="defaults" /&gt;
&lt;volume user="dario" path="/home/dario.luks" mountpoint="/home/dario" options="defaults" /&gt;</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://yourdevice.ch/wp-content/uploads/2024/07/pam_mount_konfigurieren-1.png"><img loading="lazy" decoding="async" width="1024" height="504" src="https://yourdevice.ch/wp-content/uploads/2024/07/pam_mount_konfigurieren-1-1024x504.png" alt="" class="wp-image-14523" style="width:750px" srcset="https://yourdevice.ch/wp-content/uploads/2024/07/pam_mount_konfigurieren-1-1024x504.png 1024w, https://yourdevice.ch/wp-content/uploads/2024/07/pam_mount_konfigurieren-1-300x148.png 300w, https://yourdevice.ch/wp-content/uploads/2024/07/pam_mount_konfigurieren-1-768x378.png 768w, https://yourdevice.ch/wp-content/uploads/2024/07/pam_mount_konfigurieren-1-1536x757.png 1536w, https://yourdevice.ch/wp-content/uploads/2024/07/pam_mount_konfigurieren-1-2048x1009.png 2048w, https://yourdevice.ch/wp-content/uploads/2024/07/pam_mount_konfigurieren-1-500x246.png 500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</div>


<p class="wp-block-paragraph">Jetzt sind wir soweit fertig und loggen uns aus dem temporären Benutzer aus mit <code>exit</code> und entfernen den Benutzer mit:</p>



<pre class="wp-block-code"><code>sudo deluser tempuser
sudo rm -rf /home/tempuser</code></pre>



<h3 class="wp-block-heading">Neustart und Überprüfung</h3>



<p class="wp-block-paragraph">Starte das System neu:</p>



<pre class="wp-block-preformatted">sudo reboot</pre>



<p class="wp-block-paragraph">Meldet euch mit den Benutzern an, und überprüft, ob die Home-Ordner korrekt gemountet wurden sind und der Inhalt eurer Daten vorhanden ist.</p>



<p class="wp-block-paragraph">Falls alles in Ordnung ist, könnt ihr die backup Ordner löschen:</p>



<pre class="wp-block-code"><code>sudo rm -rf /home/wario_backup 
sudo rm -rf /home/dario_backup</code></pre>



<h3 class="wp-block-heading">Hinweis für Mehrbenutzersysteme</h3>



<p class="wp-block-paragraph">Für ein Mehrbenutzersystem müsst ihr sicherstellen, dass jeder Benutzer seine eigene verschlüsselte LUKS-Datei hat und diese in der <code>pam_mount.conf.xml</code> korrekt konfiguriert ist. Die Schritte müssen für jeden Benutzer wiederholt werden.</p>



<h2 class="wp-block-heading">Container bzw. Home Ordner nachträglich vergrössern</h2>



<p class="wp-block-paragraph">Solltet ihr feststellen, dass die grösse des Homeordners nicht mehr ausreicht, könnt ihr diesen mit folgenden Schritten vergrössern.</p>



<h3 class="wp-block-heading">Tempuser erneut erstellen</h3>



<p class="wp-block-paragraph">Da wir hier direkt am Homeordner arbeiten, kann der User <strong>wario</strong> nicht daran rumspielen, wenn er eingeloggt ist. Deshalb benötigen wir wieder einen tempuser mit sudo rechten:</p>



<pre class="wp-block-code"><code>sudo adduser tempuser
sudo usermod -aG sudo tempuser
sudo su - tempuser</code></pre>



<h3 class="wp-block-heading">Container Datei aushängen$</h3>



<p class="wp-block-paragraph">Überprüft ob das Verzeichnis aktiv und gemountet ist.</p>



<pre class="wp-block-code"><code>lsblk | grep crypt_home_wario</code></pre>



<p class="wp-block-paragraph">Falls es gemountet ist, vorher aushängen:</p>



<pre class="wp-block-preformatted"><code>sudo umount /mnt/wario<br>sudo cryptsetup close crypt_home_wario</code></pre>



<h3 class="wp-block-heading"><strong>Container-Datei vergrößern</strong></h3>



<p class="wp-block-paragraph">Da der Container eine normale Datei ist, kann man ihn mit <code>truncate</code> oder <code>dd</code> erweitern.</p>



<p class="wp-block-paragraph"><strong>Beispiel: Container um 5 GB vergrößern</strong></p>



<pre class="wp-block-code"><code>sudo truncate -s +5G /home/wario.luks</code></pre>



<p class="wp-block-paragraph">Falls <code>truncate</code> nicht verfügbar ist oder nicht funktioniert, kann man stattdessen <code>dd</code> verwenden:</p>



<pre class="wp-block-code"><code>sudo dd if=/dev/zero bs=1M count=5000 &gt;&gt; /home/wario.luks</code></pre>



<p class="wp-block-paragraph">Das fügt 5 GB an Daten zur Datei hinzu.</p>



<h3 class="wp-block-heading"><strong>LUKS-Partition vergrößern</strong></h3>



<p class="wp-block-paragraph">Damit LUKS die zusätzliche Größe erkennt, muss das verschlüsselte Volume neu eingehängt und vergrößert werden.</p>



<ol class="wp-block-list">
<li><strong>Container öffnen:</strong> <code>sudo cryptsetup open /home/wario.luks crypt_home_wario</code></li>



<li><strong>LUKS-Header aktualisieren, damit das Volume die neue Größe erkennt:</strong> <code>sudo cryptsetup resize crypt_home_wario</code></li>
</ol>



<h3 class="wp-block-heading"><strong>Dateisystem anpassen</strong></h3>



<p class="wp-block-paragraph">Da das Dateisystem innerhalb von LUKS liegt, muss es ebenfalls erweitert werden.</p>



<p class="wp-block-paragraph">Falls der Container mit <strong>ext4</strong> formatiert ist:</p>



<pre class="wp-block-code"><code>sudo resize2fs /dev/mapper/crypt_home_wario</code></pre>



<p class="wp-block-paragraph">Das vergrößert das ext4-Dateisystem, damit es den neuen Platz nutzt.</p>



<h3 class="wp-block-heading"><strong>Überprüfen und abschließen</strong></h3>



<ol class="wp-block-list">
<li>Prüfen, ob die neue Größe übernommen wurde: <code>df -h /dev/mapper/crypt_home_wario</code></li>



<li>Falls alles korrekt ist, kann das Volume sicher geschlossen werden: <code>sudo umount /mnt/wario sudo cryptsetup close crypt_home_wario</code></li>
</ol>



<p class="wp-block-paragraph">Danach kann sich der Benutzer Wario wieder wie gewohnt anmelden, und der Container hat mehr Platz.</p>



<p class="wp-block-paragraph">Der tempuser kann wieder mit</p>



<pre class="wp-block-code"><code>sudo deluser tempuser 
sudo rm -rf /home/tempuser</code></pre>



<p class="wp-block-paragraph">gelöscht werden</p>



<h3 class="wp-block-heading"><strong>Hinweise</strong></h3>



<ul class="wp-block-list">
<li><strong>Backup vorher erstellen</strong>: Falls etwas schiefgeht, können Daten verloren gehen.</li>



<li><strong>Genügend freien Speicherplatz sicherstellen</strong>: Der Container kann nur wachsen, wenn genügend Platz auf der Hauptpartition vorhanden ist.</li>



<li><strong>Nur in sinnvollen Schritten vergrößern</strong>: Es ist effizienter, ihn einmal um 10 GB zu erweitern, statt immer wieder in kleinen Schritten.</li>



<li><strong>Container darf nicht aktiv genutzt werden</strong>: Der Benutzer sollte ausgeloggt sein, und das Volume darf nicht gemountet sein, bevor die Änderungen vorgenommen werden.</li>
</ul>



<p class="wp-block-paragraph">Mit diesen Schritten kann der LUKS-Container problemlos nachträglich vergrößert werden.</p>



<h2 class="wp-block-heading">Fazit</h2>



<p class="wp-block-paragraph">Mit dieser Anleitung könnt ihr die Home-Ordner von mehreren Benutzern auf eurem System mit LUKS verschlüsseln und <code>pam_mount</code> verwenden, um die Volumes automatisch beim Login zu mounten. Diese Methode erhöht die Sicherheit, da der Schlüssel für die Entschlüsselung aus dem Benutzerpasswort abgeleitet wird. </p>



<p class="yd-hinweis wp-block-paragraph"><strong>Verschlüsselt ab der ersten Minute</strong> Nachträglich verschlüsseln geht, ist aber Fummelei. Bei unseren <a href="https://yourdevice.ch/produkt-kategorie/linux-laptops/">Linux Laptops</a> ist die Festplattenverschlüsselung schon bei der Bestellung zubuchbar, dann steht sie vom ersten Start an.</p>
<p>The post <a href="https://yourdevice.ch/linux-home-ordner-mit-luks-verschluesseln/">Linux Home Ordner nachträglich mit LUKS verschlüsseln</a> appeared first on <a href="https://yourdevice.ch">yourdevice.ch - Deine Anlaufstelle für Linux, OpenSource Software und Co</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://yourdevice.ch/linux-home-ordner-mit-luks-verschluesseln/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
