<?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>TLS Archive - dahlen.org</title>
	<atom:link href="https://www.dahlen.org/tag/tls/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dahlen.org/tag/tls/</link>
	<description>Private Webseite der Familie Dahlen</description>
	<lastBuildDate>Thu, 17 Mar 2022 09:23:28 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>Kostenlose TLS/SSL-Zertifikate durch eigene CA erstellen (Teil 3: Verwendung)</title>
		<link>https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-3/</link>
					<comments>https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-3/#comments</comments>
		
		<dc:creator><![CDATA[christoph]]></dc:creator>
		<pubDate>Thu, 12 Feb 2015 23:45:12 +0000</pubDate>
				<category><![CDATA[Hobby]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Netzwerke]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[TLS]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Zertifikate]]></category>
		<guid isPermaLink="false">https://www.dahlen.org/?p=1465</guid>

					<description><![CDATA[<p>Im ersten Teil dieser Artikelserie bin ich zunächst auf die Grundlagen von Verschlüsselung und Authentifizierung via Transport Layer Security (TLS) eingegangen, bevor im zweiten Teil Certificate Signing Requests (CSR) erstellt und durch die eigene Certificate Authority (CA) in Zertifikate überführt wurden. Im diesem, letzten Teil geht es um die Installation des Stammzertifikats der CA in [&#8230;]</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-3/">Kostenlose TLS/SSL-Zertifikate durch eigene CA erstellen (Teil 3: Verwendung)</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="excerpt">
<p>
Im <a href="https://www.dahlen.org/?p=1363">ersten</a> Teil dieser Artikelserie bin ich zunächst auf die Grundlagen von Verschlüsselung und Authentifizierung via <em>Transport Layer Security</em> (<abbr>TLS</abbr>) eingegangen, bevor im <a href="https://www.dahlen.org/?p=1447">zweiten</a> Teil <em>Certificate Signing Requests</em> (<abbr>CSR</abbr>) erstellt und durch die eigene <em>Certificate Authority</em> (<abbr>CA</abbr>) in Zertifikate überführt wurden.</p>
<p>Im diesem, letzten Teil geht es um die Installation des Stammzertifikats der CA in diversen Clients, sowie die Verwendung der Server-Zertifikate unter Apache HTTPd, lighttpd und nginx.</p>
</div>
<p><span id="more-1465"></span></p>
<h2>Verwendung der Zertifikate</h2>
<p>Die Absicherung eines Dienstes bedingt im Allgemeinen die Bereitstellung des Server- bzw. Dienst-Zertifikates, des zugehörigen privaten Schlüssels und des CA-Stammzertifikats. Kommt keine eigene CA zum Einsatz, sondern wurden die Dienste eines kommerziellen Anbieters genutzt, so müssen bei Bedarf deren Zertifikate bereitgestellt werden, sofern sie nicht Teil der Standard-Installation moderner Browser sind. </p>
<p>Ziel ist in jedem Fall, daß ein Client (der Browser) die Kette vom Server-Zertifikat bis zu einem <q>vertrauenswürdigen</q> Zertifikat einer Certificate Authority schliessen kann.</p>
<h3>Installation eines Server-Zertifikats</h3>
<p>In <a href="https://www.dahlen.org/?p=1447">zweiten</a> Teil wurden für einen fiktiven Beispiel-Server example.dahlen.org die folgenden Dateien erzeugt, welche jetzt zum Einsatz kommen:</p>
<ul>
<li><span class="code">ca.crt</span>: das Stammzertifikat der eigenen CA</li>
<li><span class="code">server.crt</span>: das Zertifikat des Servers</li>
<li><span class="code">server.key</span>: der private Schlüssel zum Zertifikat des Servers</li>
</ul>
<p>Die tatsächliche Einbindung ist spezifisch für die jeweilige Server-Software. Dabei können einige Dienste (z.B. Apache HTTPd) die Dateien einzeln ansprechen, während andere (z.B. nginx) zusammengefasste Dateien (bundle) erwarten. Dabei ist teilweise sogar die Reihenfolge der Zertifikate im bundle von Bedeutung.</p>
<p>Ein Hinweis an dieser Stelle: Die beschriebenen Konfigurationen beschränken sich auf das Einbinden der Dateien, so daß die jeweilige Server-Software startet und verschlüsselte Kommunikation erlaubt. <b>Für die optimale Absicherung sind weitere Aktionen notwendig, wie das Aktivieren empfohlener und das De-Aktivieren veralteter Protokolle</b>.</p>
<p>Eine gute Anlaufstelle hierfür ist &#8211; neben der Dokumentation zur Software &#8211; die Webseite <a href="https://bettercrypto.org/" title="Webseite bettercrypto.org besuchen" target="_blank" rel="noopener">bettercrypto.org</a> bzw. die dort angebotene Dokumentation <a href="https://bettercrypto.org/" target="_blank" rel="noopener">Applied Crypto Hardening</a>.</p>
<h4>Apache</h4>
<p>Der <a href="https://httpd.apache.org/" title="The Apache HTTP Server Project" target="_blank" rel="noopener">Apache HTTP Server</a> kann obige Dateien getrennt ansprechen. Ihre Pfade werden in der Konfiguration des virtuellen Hosts eingetragen, der später über https ansprechbar sein soll. Vorher müssen die Dateien noch an die passende Stelle kopiert werden, z.B. <span class="code">/etc/apache2</span>:</p>
<p><code><br />
&lt;VirtualHost *:443><br />
&#160;ServerName <b>example.dahlen.org</b><br />
&#160;DocumentRoot /var/www/html/<br />
&#160;SSLEngine on<br />
&#160;SSLCertificateFile    /etc/apache2/server.crt<br />
&#160;SSLCertificateKeyFile /etc/apache2/server.key<br />
&#160;SSLCACertificateFile /etc/apache2/ca.crt<br />
&lt;/VirtualHost><br />
</code></p>
<p>Eine tiefergehende Einführung mit allen Optionen findet sich in der <a href="https://httpd.apache.org/docs/2.2/ssl/index.html" title="Apache SSL/TLS Encryption" target="_blank" rel="noopener">Dokumentation</a> zum Apache HTTP Server. Nochmal der Hinweis: Der <em>Common Name</em> (<abbr>CN</abbr>) im Zertifikat muß der Domäne entsprechen, unter welcher die Website angeboten wird.</p>
<h4>nginx</h4>
<p><a href="http://nginx.org" title="Homepage des nginx-Webservers" target="_blank" rel="noopener">nginx</a> benötigt das Server-Zertifikat und das Stammzertifikat der CA in einer Datei. Diese wird zunächst als <span class="code">bundle.crt</span> angelegt:</p>
<p><code>cat server.crt ca.crt > bundle.crt</code></p>
<p>Anschließend werden das bundle und der private Schlüssel des Server-Zertifikats in der Konfiguration von nginx (z.B. als virtueller Host) angesprochen:<br />
<code><br />
server {<br />
&#160;listen 443;<br />
&#160;server_name <b>example.dahlen.org</b>;<br />
&#160;ssl on;<br />
&#160;ssl_certificate bundle.crt;<br />
&#160;ssl_certificate_key server.key;<br />
}<br />
</code></p>
<p>Weitere Details, inbesondere zu den Einstellungen unterstützer Protokolle finden sich in der <a href="http://nginx.org/en/docs/http/configuring_https_servers.html" title="Configuring HTTPS servers" target="_blank" rel="noopener">Dokumentation</a> von nginx.</p>
<h4>lighttpd</h4>
<p>Eine Anleitung für lighttpd habe ich bereits im 1. Teil des oben erwähnten <a title="Die eigene Cloud auf dem Raspberry PI (Teil 1: lighttpd und SSL)" href="https://www.dahlen.org/2013/02/die-eigene-cloud-1#lighttpd-ssl">Posts</a> gegeben. Achtung: Für die Beispiele dort wurden ein anderer Hostname (owncloud.dahlen.org) und andere Dateien (in der Regel mit Dateiendung .pem statt .crt)  verwendet.</p>
<h3>Installation des CA-Zertifikats</h3>
<p>Damit auch der Browser die neu geschaffene Certificate Authority bzw. die von ihr beglaubigten Zertifikate als <q>vertrauenswürdig</q> akzeptiert, ist noch die Installation des CA-Zertifikats im jeweiligen Zertifikat-Speicher notwendig. Dieser Schritt entfällt, wenn auf die Zertifizierung durch eine akkreditierte CA zurückgegriffen wurde.</p>
<h4>Windows 7 &amp; 8</h4>
<p>Unter Windows 7 und 8(.1) reicht ein Doppelklick auf das CA-Zertifikat <span class="code">ca.crt</span>. Im anschließenden Dialog wählt man <q>Zertifikat installieren</q>, um den entsprechenden Assistenten zu starten. </p>
<figure id="attachment_1482" aria-describedby="caption-attachment-1482" style="width: 560px" class="wp-caption aligncenter"><a href="https://www.dahlen.org/wp-content/uploads/2015/02/ca-installation-win8.png"><img fetchpriority="high" decoding="async" width="961" height="936" src="https://www.dahlen.org/wp-content/uploads/2015/02/ca-installation-win8.png" alt="Zertifikat-Installation Windows" class="size-full wp-image-1482" srcset="https://www.dahlen.org/wp-content/uploads/2015/02/ca-installation-win8.png 961w, https://www.dahlen.org/wp-content/uploads/2015/02/ca-installation-win8-300x292.png 300w, https://www.dahlen.org/wp-content/uploads/2015/02/ca-installation-win8-768x748.png 768w" sizes="(max-width: 961px) 100vw, 961px" /></a><figcaption id="caption-attachment-1482" class="wp-caption-text">Zertifikat-Installation Windows</figcaption></figure>
<p>Wichtig ist der 2. Schritt des Assistenten, im welchem der Zertifikat-Speicher ausgewählt wird. Statt der Vorgabe der automatischen Auswahl ist der Speicher selbst auszuwählen. Er wird bei einem deutschen Windows als <q>Vertrauenswürdige Stamm&shy;zertifizierungs&shy;stellen</q> genannt (siehe Screenshot).</p>
<h4>Mozilla Firefox / Thunderbird</h4>
<p>Beide Programme verwalten ihre Zertifikate selbst. Die Installation des <span class="code">ca.crt</span> geschieht über den Menüpfad <em>Einstellungen</em> > <em>Erweitert</em> > <em>Zertifikate</em>. Dort ist <q>Zertifikate anzeigen</q> auszuwählen und im daraus resultierenden Fenster der Reiter <q>Zertifizierungsstellen</q>. Der Button <q>Importieren &#8230;</q> schließlich öffnet einen Dialog, in welchem <span class="code">ca.crt</span> ausgewählt werden kann.</p>
<figure id="attachment_1486" aria-describedby="caption-attachment-1486" style="width: 560px" class="wp-caption aligncenter"><a href="https://www.dahlen.org/wp-content/uploads/2015/02/ca-installation-ff.png"><img decoding="async" width="1225" height="738" src="https://www.dahlen.org/wp-content/uploads/2015/02/ca-installation-ff.png" alt="Zertifikat Installation Firefox / Thunderbird" class="size-full wp-image-1486" srcset="https://www.dahlen.org/wp-content/uploads/2015/02/ca-installation-ff.png 1225w, https://www.dahlen.org/wp-content/uploads/2015/02/ca-installation-ff-300x181.png 300w, https://www.dahlen.org/wp-content/uploads/2015/02/ca-installation-ff-1024x617.png 1024w, https://www.dahlen.org/wp-content/uploads/2015/02/ca-installation-ff-768x463.png 768w" sizes="(max-width: 1225px) 100vw, 1225px" /></a><figcaption id="caption-attachment-1486" class="wp-caption-text">Zertifikat Installation Firefox / Thunderbird</figcaption></figure>
<h4>iPhone / iOS</h4>
<p>Die Installation auf einem iOS-Gerät (hier getestet iPhone 5 mit iOS 8.1.3) ist erstaunlich unkompliziert. Einfach die Datei <span class="code">ca.crt</span> als E-Mail-Anhang versenden, auf dem Mobiltelefon auswählen und installieren.</p>
<h4>Android</h4>
<p>Android ist der Grund, warum ich noch auf die Dienste von Anbietern wie StartSSL zurückgreifen muß. Offenbar ist es auf einem Android-Gerät ohne root-Zugang (hier: Nexus 7 2012, Stock Android 5.0.2) nicht möglich ein CA-Zertifikat systemweit zu installieren. </p>
<p>Insofern liefern die Browser, aber auch diverse Apps, welche auf meine Server-Dienste zugreifen eine entsprechende Warnung. Schlimmer noch: Unmittelbar nach der (unwirksamen) Installation als Benutzer-Zertifikat erscheint in der Mitteilungszentrale <q>Das Netzwerk wird möglicherweise überwacht</q>.</p>
<p>Wer für dieses Problem eine Lösung anbieten kann, dem sei die <a href="https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-3/#response" title="Kommentar hinterlassen">Kommentarfunktion</a> unterhalb dieses Artikels empfohlen.</p>
<h2>Fazit</h2>
<p>Am Ende dieser Artikelserie ergibt sich für mich ein zwiespältiges Bild: Die Einrichtung verschlüsselter Verbindungen für eigene Dienste ist in wenigen Minuten durchführbar. Eine eigene Certificate Authority reduziert Aufwand und Kosten und steht technisch gesehen einer externen, oftmals kommerziellen CA in nichts nach.</p>
<p>Dennoch hat der Einsatz nur in kontrollierten Umgebungen Sinn. Das Problem liegt weniger auf der Server-Seite, sondern an der Notwendigkeit die eigene CA allen Clients bekannt zu machen. Unbedarfte Besucher dürften bei einer oftmals plakativen Warnung des Browsers (<q>Dieser Verbindung wird nicht vertraut</q>) entweder kehrt machen oder die Warnung ignorieren. Beides ist sicherlich nicht im Sinne des Erfinders. </p>
<p>Am Einsatz einer kommerziellen CA führt aktuell daher kaum ein Weg vorbei. Die wenigen kostenlosen oder <q>günstigen</q> Angebote (lt; 200 EUR) bestätigen dabei nicht mehr als die Verwendung einer gültigen E-Mail-Adresse und einen korrekten DNS-Eintrag. Sie sind allerdings für Privatpersonen oder kleinere Unternehmen ausreichend. Mit der <a href="https://letsencrypt.org/" title="Let's Encrypt">Let&#8217;s Encrypt</a>-Initiative der Internet Security Research Group (Mozilla und andere) soll Mitte 2015 eine interessante Alternative zu etablierten CAs den Markt betreteten. </p>
<p>Organisationen, welche auf hohe Glaubwürdigkeit angewiesen sind (z.B. beim Online-Banking) haben hingegen keine Wahl. Für <a href="https://de.wikipedia.org/wiki/Extended-Validation-Zertifikat"><abbr title="Extended Validation">EV</abbr></a>-Zertifkate mit grüner Namenserwähnung in der Browser-Zeile sind üblicherweise über 1.000 EUR zu bezahlen &#8211; pro Jahr.</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-3/">Kostenlose TLS/SSL-Zertifikate durch eigene CA erstellen (Teil 3: Verwendung)</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-3/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Kostenlose TLS/SSL-Zertifikate durch eigene CA erstellen (Teil 2: Erzeugung)</title>
		<link>https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-2/</link>
					<comments>https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-2/#comments</comments>
		
		<dc:creator><![CDATA[christoph]]></dc:creator>
		<pubDate>Thu, 12 Feb 2015 23:40:53 +0000</pubDate>
				<category><![CDATA[Hobby]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Netzwerke]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[TLS]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Zertifikate]]></category>
		<guid isPermaLink="false">https://www.dahlen.org/?p=1447</guid>

					<description><![CDATA[<p>Im ersten Teil dieser Artikelserie habe ich Grundsätzliches zu Verschlüsselung und Authentifizierung, besonders im Umfeld der für https gebräuchlichen Transport Layer Security (TLS, vormals SSL) beschrieben. In diesem zweiten, technischen Teil beschreibe ich den Weg von der Erstellung eines privaten Schlüssels zum Server-Zertifikat für Apache, lighttpd und andere Server-Dienste. Dazu kommen die unter vielen Plattformen [&#8230;]</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-2/">Kostenlose TLS/SSL-Zertifikate durch eigene CA erstellen (Teil 2: Erzeugung)</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Im <a href="https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-2/?p=1363">ersten</a> Teil dieser Artikelserie habe ich Grundsätzliches zu Verschlüsselung und Authentifizierung, besonders im Umfeld der für https gebräuchlichen <em>Transport Layer Security</em> (<abbr>TLS</abbr>, vormals <abbr title="Secure Socket Layer">SSL</abbr>) beschrieben.</p>
<p>In diesem zweiten, technischen Teil beschreibe ich den Weg von der Erstellung eines privaten Schlüssels zum Server-Zertifikat für Apache, lighttpd und andere Server-Dienste. Dazu kommen die unter vielen Plattformen verfügbaren OpenSSL-Werkzeuge in Verbindung mit einer (eigenen) <em>Certificate Authority</em> (<abbr>CA</abbr>) zum Einsatz.<br />
<span id="more-1447"></span></p>
<h2>Erstellung und Installation</h2>
<p>Für die Durchführung der folgenden Anleitung wird eine aktuelle Installation des OpenSSL-Paketes für das eigene Betriebssystem benötigt, die Version sollte dabei mindestens 1.0.1g (siehe <a title="Wikipedia-Artikel zum Heartbleed Bug" href="https://de.wikipedia.org/wiki/Heartbleed" target="_blank" rel="noopener">Heartbleed</a> Bug) sein. Für dieses Protokoll wurde Version 1.0.1k unter <a title="Website des Cygwin-Projektes" href="http://cygwin.org" target="_blank" rel="noopener">Cygwin64</a> für Windows verwendet.</p>
<p>Unter Debian-basierten Linux-Systemen sind die Pakete openssl und ca-certificates zu installieren:<br />
<code>sudo apt-get install openssl ca-certificates</code></p>
<h3>Vorbereiten des Server-Zertifikats</h3>
<p>Der Weg zum Server-Zertifikat für den Betrieb einer mit TLS/SSL abgesicherten Website beginnt stets mit der Erstellung eines privaten Schlüssels. Aus diesem wird später der öffentliche Schlüssel abgeleitet und mit weiteren Informationen, besonders dem Domänennamen (im Feld <em>Common Name</em> <abbr>CN</abbr>) in einem sog. <em>Certificate Signing Request</em> (<abbr>CSR</abbr>) gespeichert. Anschließend bestätigt eine <em>Certificate Authority</em> (<abbr>CA</abbr>) mit ihrer Signatur die <q>Echtheit</q> des öffentlichen Schlüssels und stellt darüber ein Zertifikat aus.</p>
<h4>Privater Schlüssel</h4>
<p>Der folgende Befehl erstellt einen privaten Schlüssel von 4096 Bytes Länge:</p>
<p><code>openssl genrsa -out server.key 4096</code></p>
<p>Zu den Parametern:</p>
<dl>
<dt>genrsa</dt>
<dd>Erstellung eines privaten Schlüssels nach RSA-Verfahren</dd>
<dt>-out server.key</dt>
<dd>Speichern des privaten Schlüssels in der Datei <span class="code">server.key</span></dd>
<dt>4096</dt>
<dd>die Schlüssellänge in Bytes. Werte unter 2048 sollten nicht mehr verwendet werden, 4096 ist auf absehbare Zeit nicht mit vertretbarem Aufwand zu <q>knacken</q></dd>
</dl>
<p>Damit die später eingesetzte Server-Software (z.B. Apache HTTPd) den privaten Schlüssel ohne weiteres Zutun lesen kann, ist dieser nicht über eine zusätzliche, symmetrische Verschlüsselung gesichert. Er muß an einem sicheren Ort mit genau definierten Zugriffsrechten aufbewahrt werden.</p>
<h4>Certificate Signing Request</h4>
<p>Aus dem gerade generierten privaten Schlüssel <span class="code">server.key</span> erzeugen wir nun einen CSR. Dieser wird später bei der (eigenen) CA zur Beglaubigung eingereicht:</p>
<p><code>openssl req -new -key server.key -out server.csr</code></p>
<p>Beschreibung der Parameter:</p>
<dl>
<dt>req</dt>
<dd>Erstellung eines Certificate Signing Request</dd>
<dt>-new</dt>
<dd>einen neuen CSR erstellen, daher Eigenschaften zum Schlüsselinhaber anfragen</dd>
<dt>-key server.key</dt>
<dd>Pfad zur privaten Schlüsseldatei, aus welcher der öffentliche Schlüssel für diesen CSR abgeleitet werden soll</dd>
<dt>-out server.csr</dt>
<dd>Speichern des CSRs in der Datei <span class="code">server.csr</span></dd>
</dl>
<p>Der Aufruf des Befehls stösst einen Dialog an, in welchem Angaben zum Inhaber des privaten Schlüssels angefordert werden. Wichtig dabei: Auf die Frage nach dem <em>Common Name</em> (<abbr>CN</abbr>) muß der <em>Fully Qualified Domain Name</em> (<abbr>FQDN</abbr>) des Servers bzw. des Services (z.B. des Virtual Hosts) angegeben werden. Beispielhaft sei hier example.dahlen.org verwendet. Das angefragte <em>Challenge Passwort</em> wird nicht gesetzt, die entsprechende Rückfrage also einfach per Enter bestätigt:</p>
<p><code class="console"><br />
You are about to be asked to enter information that will<br />
be incorporated into your certificate request.<br />
What you are about to enter is what is called a Distinguished<br />
Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter '.', the field will be left blank.<br />
-----<br />
Country Name (2 letter code) [AU]:DE<br />
State or Province Name (full name) [Some-State]:Nordrhein-Westfalen<br />
Locality Name (eg, city) []:<br />
Organization Name (eg, company) [Internet Widgits Pty Ltd]:dahlen.org<br />
Organizational Unit Name (eg, section) []:<br />
Common Name (e.g. server FQDN or YOUR name) []:<b>example.dahlen.org</b><br />
Email Address []:<br />
&#160;<br />
Please enter the following 'extra' attributes<br />
to be sent with your certificate request<br />
A challenge password []:<br />
An optional company name []:<br />
</code></p>
<h3>Vorbereiten der Certificate Authority</h3>
<p>Ein Certificate Signing Request für den Server oder Service liegt nun in der Datei <span class="code">server.csr</span> vor. Er enthält neben dem öffentlichen Schlüssel (welcher aus dem privaten Schlüssel <span class="code">server.key</span> abgeleitet wurde) Details zum Inhaber des Schlüsselpaares.</p>
<p>Um aus dem CSR nun ein Zertifikat zu erzeugen, ist die Beglaubigung durch eine Certificate Authority notwendig. Dies kann entweder ein kommerzieller Anbieter (wie StartSSL, optional mit kostenlosen Angeboten) oder eine eigene CA sei. Bzgl. der Verwendung von StartSSL sei erneut auf die Anleitung bei <a href="http://www.heise.de/security/artikel/SSL-fuer-lau-880221.html" title="SSL für lau - Artikel bei heise Security" target="_blank" rel="noopener">heise Security</a> hingewiesen.</p>
<p>Eine eigene CA ist ein günstige Variante um beliebig viele Server oder Dienste mit Zertifikaten zu versehen. Clients, welche das Stammzertifikate der CA installiert haben und es als <q>vertrauenswürdig</q> betrachten, akzeptieren später Zertifikate, welche durch Unterschrift der eigenen CA erstellt wurden.</p>
<h4>Privater Schlüssel</h4>
<p>Auch eine eigene Certificate Authority benötigt zunächst einen privaten Schlüssel. Aus diesem wird später das selbst-signierte Stammzertifikat (CA ROOT) erzeugt. Der Befehlsaufruf ist nahezu identisch zur obigen Variante für das Server-Zertifikat:</p>
<p><code>openssl genrsa -aes256 -out ca.key 4096</code></p>
<p>Die Parameter sind weitestgehend bekannt, daher hier nur die Abweichung:</p>
<dl>
<dt>-aes256</dt>
<dd>der private Schlüssel wird beim Speichern mit einer symmetrischen Verschlüsselung nach <abbr title="Advanced Encryption Standard">AES</abbr> versehen. </dd>
</dl>
<p>Früher gebräuchliche Verfahren wie DES oder 3DES sollten nicht mehr angewendet werden. Das für die Verschlüsselung notwendige Kennwort (oder besser &#8211; die Passphrase) wird im Rahmen des Befehlsablaufs angefragt:</p>
<p><code class="console"><br />
Generating RSA private key, 4096 bit long modulus<br />
.............++<br />
.........++<br />
e is 65537 (0x10001)<br />
Enter pass phrase for ca.key:<br />
Verifying - Enter pass phrase for ca.key:<br />
</code></p>
<p>Als Ergebnis liegt nun der private Schlüssel der CA in der Datei <span class="code">ca.key</span> vor.</p>
<h4>Stammzertifikat</h4>
<p>Als nächstes wird ein temporärer Zertifikatsantrag (<em>Certificate Signing Request</em>, <abbr>CSR</abbr>) für die eigene CA erzeugt und durch <q>Eigenbeglaubigung</q> in Form eines X.509 Zertifikates im Dateisystem abgelegt:</p>
<p><code>openssl req -x509 -new -extensions v3_ca -key ca.key -days 1461 \<br />
  -out ca.crt -sha512</code></p>
<p>Auf hier sind viele Parameter schon im Bereich des Server-CSRs aufgeführt. Daher nur die Ergänzungen bzw. Abweichungen:</p>
<dl>
<dt>-x509</dt>
<dd>bewirkt, daß der erzeugte CSR unmittelbar in ein Zertifikat überführt wird, es wird also keine .csr-Datei angelegt</dd>
<dt>-extensions v3_ca</dt>
<dd>aktiviert Erweiterungen im erzeugten Zertifikat, die für den Betrieb einer CA notwendig sind</dd>
<dt>-days 1461</dt>
<dd>bestimmt die Gültigkeit des Zertifikats, 1461 sollten 4 Jahre (inkl. Schaltjahr sein)</dd>
<dt>-sha512</dt>
<dd>bestimmt das Verfahren, mit welchem die Signatur des Zertifikates gebildet wird.
</dd>
</dl>
<p>Für die Signatur sollte mindestens SHA2 (-sha256) zum Einsatz kommen. SHA1 oder MD5 sind veraltet und gelten als unsicher. Viele Browser werden in absehbarer Zukunft vor so signierten Zertifikaten warnen (siehe Ankündigung von <a href="http://googleonlinesecurity.blogspot.co.uk/2014/09/gradually-sunsetting-sha-1.html" target="_blank" rel="noopener">Google</a>).</p>
<p>Im Rahmen der Befehlsausführung wird zunächst die oben definierte Passphrase des privaten CA-Schlüssels angefordert. Anschliessend sind einzelne Felder des Zertifikates mit Angaben zur eigenen CA zu füllen. Letztendlich kann man hier beliebige Werte eingeben, besser sind jedoch tatsächliche Angaben und eine gültige E-Mail-Adresse, damit Interessierte später mit Details zu eurer eigenen CA versorgt werden.</p>
<p><code class="console"><br />
Enter pass phrase for ca.key:<br />
You are about to be asked to enter information that will<br />
be incorporated<br />
into your certificate request.<br />
What you are about to enter is what is called a<br />
Distinguished Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter '.', the field will be left blank.<br />
-----<br />
Country Name (2 letter code) [AU]:DE<br />
State or Province Name (full name) [Some-State]:Nordrhein-Westfalen<br />
Locality Name (eg, city) []:<br />
Organization Name (eg, company) [Internet Widgits Pty Ltd]:dahlen.org<br />
Organizational Unit Name (eg, section) []:Certificate Authority<br />
Common Name (e.g. server FQDN or YOUR name) []:<br />
Email Address []: certificates@dahlen.org<br />
</code></p>
<h3>Zertifizierung durch die CA</h3>
<p>Als Ergebnis liegt das Zertifikat zum privaten CA-Schlüssel <span class="code">ca.key</span> in der Datei <span class="code">ca.crt</span> vor und die eigene Zertifizierungsstelle ist bereit. Sie wird &#8211; mit ihrer Unterschrift &#8211; den im ersten Schritt erzeugten CSR des Servers example.dahlen.org beglaubigen: </p>
<p><code>openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key  \<br />
&#160; -CAcreateserial -out server.crt -days 365 -sha512</code></p>
<p>Wieder gibt es einige neue Parameter und Argumente:</p>
<dl>
<dt>x509</dt>
<dd>hier nicht als Argument sondern als Option aktiviert sie den Bereich Zertifikatsmanagement in OpenSSL</dd>
<dt>-req</dt>
<dd>definiert, daß ein CSR (und kein Zertifikat) als Eingabe erwartet wird</dd>
<dt>-in server.csr</dt>
<dd>Pfad zum eingereichten CSR</dd>
<dt>-CA ca.crt</dt>
<dd>Pfad zum (Stamm-) Zertifikat der CA</dd>
<dt>-CAkey ca.key</dt>
<dd>Pfad zum privaten Schlüssel der CA</dd>
<dt>-CAcreateserial</dt>
<dd>erzeugt eine Zertifikats-Seriennummer bei Bedarf und legt diese als Datei <span class="code">ca.srl</span> ab</dd>
</dl>
<p>Zur Signatur werden zunächst Details aus dem CSR ausgegeben. Anschließend wird das Kennwort für die Schlüsseldatei <span class="code">ca.key</span> angefordert: </p>
<p><code class="console"><br />
Signature ok<br />
subject=/C=DE/ST=Nordrhein-Westfalen/O=dahlen.org/CN=example.dahlen.org<br />
Getting CA Private Key<br />
Enter pass phrase for ca.key:<br />
</code></p>
<p>Damit ist der Prozeß der Zertifikat-Erzeugung abgeschlossen. Bei der Unterzeichnung durch die CA wurde auch die Laufzeit (-days 365) festgelegt. Der Inhalt des Zertifikats (<span class="code">server.crt</span>) kann &#8211; in lesbarer Form &#8211; wie folgt ausgegeben werden:</p>
<p><code>openssl x509 -noout -text -in server.crt</code></p>
<p>Die Gültigkeit des Zertifikats im Hinblick auf die Zertifikatskette kann unter Angabe des öffentlichen CA-Zertifikats überprüft werden:</p>
<p><code>openssl verify -CAfile ca.crt server.crt</code></p>
<p>Im <a href="https://www.dahlen.org/?p=1465">dritten</a> Teil dieser Serie gehe ich auf die Verwendung der Server-Zertifikate und die Installation des CA Stammzertifikates für diverse Umgebungen ein.</p>
<p>Weiter zu <a href="https://www.dahlen.org/?p=1465">Teil 3: Verwendung</a>. </p>
<p>Der Beitrag <a href="https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-2/">Kostenlose TLS/SSL-Zertifikate durch eigene CA erstellen (Teil 2: Erzeugung)</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-2/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Kostenlose TLS/SSL-Zertifikate durch eigene CA erstellen (Teil 1: Grundlagen)</title>
		<link>https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-1/</link>
					<comments>https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-1/#comments</comments>
		
		<dc:creator><![CDATA[christoph]]></dc:creator>
		<pubDate>Thu, 12 Feb 2015 23:30:44 +0000</pubDate>
				<category><![CDATA[Hobby]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Netzwerke]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[TLS]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Zertifikate]]></category>
		<guid isPermaLink="false">https://www.dahlen.org/?p=1363</guid>

					<description><![CDATA[<p>Vor einiger Zeit habe ich eine Artikelserie über die Installation von ownCloud auf einem Raspberry PI veröffentlicht. Die für die Absicherung via Transport Layer Security (TLS, vormals SSL) verwendeten Schlüssel wurden damals durch die israelische Firma StartSSL zertifiziert und damit beglaubigt. Nun sind diese Zertifikate abgelaufen und es ist Zeit für eine Erneuerung. Ein willkommener [&#8230;]</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-1/">Kostenlose TLS/SSL-Zertifikate durch eigene CA erstellen (Teil 1: Grundlagen)</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="excerpt">
<p>
Vor einiger Zeit habe ich eine <a title="Die eigene Cloud auf dem Raspberry PI (Teil 1: lighttpd und SSL)" href="https://www.dahlen.org/2013/02/die-eigene-cloud-1/">Artikelserie</a> über die Installation von ownCloud auf einem Raspberry PI veröffentlicht. Die für die Absicherung via <em>Transport Layer Security</em> (<abbr>TLS</abbr>, vormals <abbr title="Secure Socket Layer">SSL</abbr>) verwendeten Schlüssel wurden damals durch die israelische Firma StartSSL zertifiziert und damit <q>beglaubigt</q>.</p>
<p>Nun sind diese Zertifikate abgelaufen und es ist Zeit für eine Erneuerung. Ein willkommener Anlaß etwas ausführlicher auf die Funktion von Schlüsseln, deren Beglaubigung durch (eigene) <em>Certificate Authorities</em> (<abbr>CA</abbr>) und die Installation auf Server und Client einzugehen.</p>
</div>
<p><span id="more-1363"></span></p>
<h2>Verschlüsselung und Authentifizierung</h2>
<p>Über Sinn und Unsinn von Verschlüsselung muß meines Erachstens nicht diskutiert werden. Das Ziel ist es, Informationen vertraulich aufzubewahren und/oder abhörsicher zu übertragen, so daß sie nur dem Sender und den Empfängern zugänglich sind. </p>
<p>Art und Inhalt der Information sind dabei ohne Belang. Was privat und damit schützenswert und was öffentlich und potentiell einsehbar ist &#8211; darüber darf und sollte jeder Bürger eines freien Landes selbst entscheiden. Und wie die jüngsten Skandale rund um <abbr>NSA</abbr>, <abbr>GCHQ</abbr>, sowie die wiederkehrenden Rufe nach einer Vorratsdatenspeicherung demonstrieren, scheint kein Detail unseres Lebens trivial genug, als daß sich nicht jemand dafür interessieren würde &mdash; selbstverständlich nur zu unserer eigenen Sicherheit.</p>
<h3>Verschlüsselung</h3>
<p>Verschlüsselung macht aus einer Information (einer Datei, einer E-Mail oder dem Inhalt einer Verbindung) ein Geheimnis. Die angewandten, kryptographischen Verfahren lassen sich grob in zwei Kategorien unterteilen:</p>
<ol>
<li><em>symmetrische</em> Verschlüsselung (<abbr>DES</abbr>, <abbr title="Advanced Encryption Standard">AES</abbr>, usw.) setzt auf einen einzelnen, dem Sender und den Empfängern bekannten Schlüssel (<cite>shared secret</cite> bzw. <cite>pre-shared-key</cite>).</li>
<li><em>asymmetrische</em> Verschlüsselung (<abbr title="Pretty Good Privacy">PGP</abbr>, <abbr title="GNU Privacy Guard">GnuPG</abbr>, etc.) verwendet Schlüsselpaare, deren privater Teil (<cite>private key</cite>) vertraulich bleibt, während der öffentliche Teil (<cite>public key</cite>) verteilt wird.</li>
</ol>
<p>Während bei <em>symmetrischer</em> Verschlüsselung der Schlüssel über ein anderes, <q>sicheres</q> Verfahren zwischen Sender und Empfänger ausgetauscht werden muß, benötigt man bei der <em>asymmetrischen</em> Verschlüsselung nur den öffentlichen Schlüsselteil des jeweils anderen Kommunikationspartners. Dieser kann im Vorfeld per E-Mail geschickt, zum Download angeboten oder über eine <em>Public Key Infrastructure</em> (<abbr>PKI</abbr>) öffentlich gemacht werden. Für die Verschlüsselung bzw. Entschlüsselung werden der öffentliche Schlüssel und der eigene private Schlüssel kombiniert. </p>
<p>Da die symmetrische Verschlüsselung einfacher und ressourcenschonend ist, kommen beide Verfahren oft in Kombination zur Anwendung:</p>
<ul>
<li>für den initialen Aufbau der Verbindung werden die öffentlichen Schlüssel von Server und Client ausgetauscht</li>
<li>über die so mögliche <em>asymmetrische</em> Verschlüsselung wird anschliessend ein gemeinsamer Schlüssel ausgehandelt und auf <em>symmetrische</em> Verschlüsselung umgestellt</li>
</ul>
<p>Diese Beschreibung ist bewußt einfach gehalten, Interessierten sei an dieser Stelle der entsprechende Eintrag bei <a href="http://de.wikipedia.org/wiki/Transport_Layer_Security" title="Wikipedia-Eintrag zu Transport Layer Security (TLS)" target="_blank" rel="noopener">Wikipedia</a> oder ein Beratungsgespräch bei meinem Arbeitgeber <a href="http://www.cassini.de/" title="Webseite der Cassini Consulting GmbH" target="_blank" rel="noopener">Cassini Consulting GmbH</a> empfohlen.</p>
<h3>Authentifizierung</h3>
<p>Die oben beschriebenen Methoden sind bereits ausreichend, um eine verschlüsselte Kommunikation zwischen zwei Endpunkten aufzubauen. Sie sagen aber nichts über die Identität der Schlüsselinhaber aus. Über eine sog. <em>Man-in-the-middle</em> Attacke kann ein Angreifer sich zum Zeitpunkt des Verbindungsaufbaus in den Kommunikationsweg einschalten, die ausgetauschten Schlüssel abfangen und durch eigene ersetzen. Er kann dann den gesamten Datenstrom entschlüsseln und mitzulesen, ohne das dies den eigentlichen Kommunikationspartnern auffällt.</p>
<h4>Certificate Authority</h4>
<p>Die Bestätigung von Schlüsseln durch Dritte ist daher wesentlicher Bestandteil der Verschlüsselungstopologie. Die Beglaubigung durch eine oder viele, als <q>vertrauenswürdig</q> geltende Instanzen soll einen öffentlichen Schlüssel validieren und seinen Inhaber identifizieren. Die <em>Zertifizierung</em> durch andere, akkreditierte Personen oder Organisationen soll somit die eigene Glaubwürdigkeit bestätigen. Auf diese Art und Weise bildet sich ein Netz aus Vertrauen, das sog. <a title="Wikipedia-Artikel zu Web of Trust" href="https://de.wikipedia.org/wiki/Web_of_Trust" target="_blank" rel="noopener">Web of Trust</a>.</p>
<p>Während im Bereich <a href="http://www.pgpi.org/" title="Internationale PGP Homepage" target="_blank" rel="noopener">PGP</a> und <a href="https://www.gnupg.org/" title="Homepage des GNU Privacy Guard" target="_blank" rel="noopener">GnuPG</a> die Authentizität des Kommunikationspartners vornehmlich durch gegenseitige Bestätigung (z.B. auf <q>Crypto-Parties</q>) erreicht wird, übernehmen diese Aufgabe im World Wide Web und bei E-Mail-Verschlüsselung via S/MIME <em>Certificate Authorities</em> (<abbr>CA</abbr>).</p>
<h5>Kommerzielle CAs</h5>
<p>Rund um Zertifikate und Signaturen hat sich darum ein großer, lukrativer Markt entwickelt. Große CAs wie <a href="http://www.verisign.de/" title="Homepage von Verisign / Symantec " target="_blank" rel="noopener">Verisign</a> oder <a href="https://www.globalsign.com/de-de/" title="dt. Homepage von GlobalSign" target="_blank" rel="noopener">Global Sign</a> versprechen Sicherheit durch gewissenhafte Prüfung und regelmässige Audits &mdash; zu entsprechenen Preisen. Günstigere oder gar kostenlose Angebote (wie das von StartSSL) bieten in der Regel lediglich eine Validierung der E-Mail-Adresse und des Domain Records. </p>
<p>Anbieter, deren Stammzertifikate Teil einer Browser- oder System-Installation sind, kommen dabei besonders gut weg, da ihre Kunden keinerlei Warnungen durch den Browser erwarten müssen. Faktisch kein Unternehmen, welches für Glaubwürdigkeit und Sicherheit steht, kann es sich erlauben ohne das Zertifikat einer solchen <q>Root-CA</q> zu arbeiten. Dabei zeigen z.B. der Fall <a title="Wikipedia Artikel zu DigiNotar" href="https://de.wikipedia.org/wiki/DigiNotar" target="_blank" rel="noopener">DigiNotar</a> oder die Gewißheit, daß eine Regierung bzw. deren Geheimdienste Unternehmen zur Preisgabe vertraulicher Informationen zwingen kann, daß absolute Sicherheit auch in diesem Bereich nicht existiert.</p>
<h5>Die eigene CA</h5>
<p>Die Hürde für die Einrichtung einer eigenen Certificate Authority ist äußerst niedrig. Technisch kann die eigene CA Schlüssel signieren und somit Zertifikate erzeugen, welche bzgl. Sicherheit in keinster Weise kommerziellen Varianten nachstehen. Im Gegenteil, sie kann sogar schneller aktuelle Entwicklungen im Bereich Verschlüsselung aufgreifen und anbieten, als es einem kommerziellen Anbieter mit definierten <abbr title="Service Level Agreements">SLA</abbr>s möglich ist. Außerdem löst die eigene CA die Abhängigkeit von (ausländischen) Unternehmen und deren Rechtsumfeld und spart natürlich Kosten. </p>
<p>Fachlich jedoch wird die eigene Certificate Authority einem akkreditierten Anbieter auf absehbare Zeit nicht das Wasser reichen können. Solange das Stammzertifikat (also der selbst-signierte öffentliche Schlüssel der CA) nicht in allen Clients, wie Computern, Mobiltelefonen, Programmen und Apps installiert ist, werden diese unweigerlich mehr oder weniger dramatische Warnungen beim Verbindungsaufbau aussprechen &#8211; oder den Aufbau ganz verweigern.</p>
<p>Aus diesem Grund richtet sich die Anleitung im <a href="https://www.dahlen.org/?p=1447">zweiten</a> Teil der Artikelserie primär an erfahrene Administratoren, welche ausgewählte Dienste in einem kontrollierten Umfeld, für ein definiertes Publikum mit einer sicheren, kostengünstigen Transport-Verschlüsselung anbieten wollen.</p>
<p>Weiter zu <a href="https://www.dahlen.org/?p=1447">Teil 2: Erstellung</a>.</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-1/">Kostenlose TLS/SSL-Zertifikate durch eigene CA erstellen (Teil 1: Grundlagen)</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dahlen.org/2015/02/13/kostenlose-ssl-zertifikate-1/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
