<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Netz - Rettung - Recht (Artikel mit Tag jessie)</title>
    <link>https://netz-rettung-recht.de/</link>
    <description>Netzleben, Rettungs- und Rechtswesen</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 2.5.0 - http://www.s9y.org/</generator>
    <pubDate>Mon, 14 Aug 2017 05:09:12 GMT</pubDate>

    <image>
    <url>https://netz-rettung-recht.de/templates/2k11/img/s9y_banner_small.png</url>
    <title>RSS: Netz - Rettung - Recht - Netzleben, Rettungs- und Rechtswesen</title>
    <link>https://netz-rettung-recht.de/</link>
    <width>100</width>
    <height>21</height>
</image>

<item>
    <title>Verzögerungen beim SSH-Login</title>
    <link>https://netz-rettung-recht.de/archives/2004-Verzoegerungen-beim-SSH-Login.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2004-Verzoegerungen-beim-SSH-Login.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2004</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2004</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Manchmal dauert der SSH-Login auf einem meiner Server etwas länger. Dann ist entweder dort die Load zu hoch oder es gibt Probleme mit der DNS-Auflösung meiner IP-Adresse oder das Netz ist dicht - meistens das heimische WLAN. Dieser Tage aber dauerte es nicht nur &amp;#8220;etwas&amp;#8221; länger - vielmehr hatte ich regelmäßige Verzögerungen im Bereich von etlichen Sekunden beim Login, immer auf denselben Maschinen (eine davon in meinem heimischen Netz!) und nach (!) dem Anzeigen des Login-Banners. Die Load war in Ordnung, die DNS-Auflösung sollte jedenfalls im lokalen Netz funktionieren, und ständig überlastet kann die Netzanbindung eigentlich auch nicht sein, jedenfalls nicht immer zu denselben beiden Maschinen.&lt;/p&gt;

&lt;p&gt;Eigenartig.&lt;/p&gt;

&lt;p&gt;Nachdem ich mich - wie üblich - zunächst einmal einfach nur geärgert und darauf gehofft hatte, dass das Problem sich von selbst lösen möge, sah ich mich dann doch gezwungen, zum Äußersten zu greifen und ins Logfile zu schauen. Dort fanden sich dann Einträge dieser Art:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Jul  3 21:11:02 myhost dbus[23288]: [system] Activating via systemd: service name=&#039;org.freedesktop.login1&#039; unit=&#039;dbus-org.freedesktop.login1.service&#039;
Jul  3 21:11:02 myhost systemd[1]: Started Login Service.
Jul  3 21:11:27 myhost dbus[23288]: [system] Failed to activate service &#039;org.freedesktop.login1&#039;: timed out
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ein Timeout - das würde ja passen! &amp;#8212; Aber warum?&lt;/p&gt;

&lt;p&gt;Die einfachste Lösung ist in solchen Fällen oft - und gerade bei absoluter Ahnungslosigkeit - ein gezielte Suche bei Google oder einer anderen Suchmaschine des jeweiligen Vertrauens. Mich brachte das in diesem Fall zu einem &lt;a href=&quot;https://unix.stackexchange.com/questions/239489/dbus-system-failed-to-activate-service-org-freedesktop-login1-timed-out&quot; title=&quot;Forbidden - Stack Exchange&quot;&gt;Stackexchange&lt;/a&gt;-Eintrag, der genau auf mein Problem passte: Dieser &amp;#8220;Hänger&amp;#8221; geschieht, wenn &lt;em&gt;dbus&lt;/em&gt; neu gestartet wurde - und genau das hatte ich nach dem Einspielen von Updates getan!&lt;/p&gt;

&lt;p&gt;Die Lösung soll sein, danach auch &lt;em&gt;logind&lt;/em&gt; wieder zu starten. Und tatsächlich: &lt;code&gt;service systemd-logind restart&lt;/code&gt;, und schon war wieder alles paletti.&lt;/p&gt;

&lt;p&gt;(Vielleicht hilft das dem einen oder anderen, der - namentlich unter &lt;em&gt;Debian Jessie&lt;/em&gt; - vor demselben Problem steht.)&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/15597e98d0594ec89fe4de13bfa807fb&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Wed, 05 Jul 2017 06:05:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2004-guid.html</guid>
    <category>debian</category>
<category>jessie</category>
<category>systemd</category>

</item>
<item>
    <title>letsencrypt jenseits des Webservers</title>
    <link>https://netz-rettung-recht.de/archives/1943-letsencrypt-jenseits-des-Webservers.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1943-letsencrypt-jenseits-des-Webservers.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1943</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1943</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Vor einigen Monaten hatte ich über &lt;em&gt;letsencrypt&lt;/em&gt;, die neue Zertifizierungsstelle für TLS-Zertifikate, &lt;a href=&quot;https://netz-rettung-recht.de/archives/1903-SSLTLS-mit-Lets-Encrypt.html&quot; title=&quot;&quot;&gt;berichtet&lt;/a&gt; und demletzt meine guten Erfahrungen damit &lt;a href=&quot;https://netz-rettung-recht.de/archives/1916-Lets-Encrypt-Updates.html&quot; title=&quot;&quot;&gt;dargestellt&lt;/a&gt;. Doch &lt;em&gt;HTTP&lt;/em&gt; ist ja nicht das einzige Protokoll, das einer Absicherung bedarf. Wie sieht es mit TLS-Zertifikaten für Mail (&lt;em&gt;SMTP&lt;/em&gt; und &lt;em&gt;POP3&lt;/em&gt; oder &lt;em&gt;IMAP&lt;/em&gt;) und News (&lt;em&gt;NNTP&lt;/em&gt;) oder noch andere Dienste aus?&lt;/p&gt;

&lt;p&gt;Grundsätzlich ist das kein Problem: vorhandene Zertifikate mit dem (oder den) passenden Hostnamen müssen nur eingebunden werden.&lt;/p&gt;

&lt;p&gt;In der Folge stelle ich die Vorgehensweise ausgehend von einem &lt;em&gt;Debian&lt;/em&gt;-&lt;em&gt;Jessie&lt;/em&gt;-System aus vor.&lt;/p&gt;

&lt;h3 id=&quot;erhalt-des-zertifikats&quot;&gt;Erhalt des Zertifikats&lt;/h3&gt;

&lt;p&gt;Am einfachsten ist das, wenn unter jedem Hostnamen auch ein Webserver erreichbar ist; dann kann nämlich einfach das &lt;code&gt;webroot&lt;/code&gt;-&lt;a href=&quot;https://certbot.eff.org/docs/using.html#webroot&quot; title=&quot;&quot;&gt;Plugin&lt;/a&gt; verwendet werden. Ist das nicht der Fall, kommen bspw. das &lt;code&gt;manual&lt;/code&gt;-&lt;a href=&quot;https://certbot.eff.org/docs/using.html#manual&quot; title=&quot;&quot;&gt;Plugin&lt;/a&gt; oder das &lt;code&gt;external&lt;/code&gt;-&lt;a href=&quot;https://github.com/marcan/certbot-external&quot; title=&quot;GitHub - marcan/certbot-external: Certbot plugin that uses an external shell script for domain validation · GitHub&quot;&gt;Plugin&lt;/a&gt; in Betracht.&lt;/p&gt;

&lt;h3 id=&quot;installation-des-zertifikats&quot;&gt;Installation des Zertifikats&lt;/h3&gt;

&lt;p&gt;Das bereits - für den Webserver - vorhandene oder neu erhaltene Zertifikat und der zugehörige Schlüssel (
&lt;em&gt;Key&lt;/em&gt;), die üblicherweise im Verzeichnis &lt;code&gt;/etc/letsencrypt/live/domain.example/&lt;/code&gt; liegen, können nun eingebunden werden - entweder das Zertifikat und die ganze Zertifikatskette mit allen Zwischenzertifikaten zusammen in einer Datei (&lt;code&gt;fullchain.pem&lt;/code&gt;), oder das Zertifikat (&lt;code&gt;cert.pem&lt;/code&gt;) und die Zwischenzertifikate (&lt;code&gt;chain.pem&lt;/code&gt;) getrennt, je nachdem, was die Applikation unterstützt.&lt;/p&gt;

&lt;p&gt;Nicht immer ist es aber ohne weiteres möglich, unmittelbar auf die Dateien in &lt;code&gt;/etc/letsencrypt/live/domain.example/&lt;/code&gt; zuzugreifen, die &lt;code&gt;root:root&lt;/code&gt; gehören und aufgrund der Verzeichnisrechte auch nur für &lt;code&gt;root&lt;/code&gt; lesbar sind. Manche Programme (bspw. der Mailserver &lt;em&gt;Exim&lt;/em&gt;) greifen nämlich auf die Zertifikate zu einem Zeitpunkt zu, zu dem sie bereits keine Root-Rechte mehr haben; und es erscheint wenig tunlich, sie in die Gruppe &lt;code&gt;root&lt;/code&gt; aufzunehmen oder gar Zertifikat und Key weltweit lesbar zu machen. Andere Programme wiederum haben ausgesprochen strikte Vorstellungen darüber, welchem Benutzer und/oder welcher Gruppe die Dateien &amp;#8220;gehören&amp;#8221; müssen und wie die Zugriffsrechte auszusehen haben (so z.B. der Newsserver &lt;em&gt;INN&lt;/em&gt;, der erwartet, dass der Key ausschließlich für den User &lt;code&gt;news&lt;/code&gt; lesbar ist). In diesen Fällen wird es m.E. unausweichlich sein, Kopien der Zertifikate und des Keys mit den passenden Rechten anzulegen.&lt;/p&gt;

&lt;h4 id=&quot;-dovecot-&quot;&gt;&lt;em&gt;Dovecot&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Der &lt;em&gt;POP3&lt;/em&gt;- und &lt;em&gt;IMAP&lt;/em&gt;-Server &lt;em&gt;Dovecot&lt;/em&gt; greift als &lt;code&gt;root&lt;/code&gt; auf die Zertifikate zu und kann - jedenfalls in seiner in &lt;em&gt;Debian Jessie&lt;/em&gt; enthaltenen Version &lt;em&gt;2.2.13&lt;/em&gt; - die Zertifikatskette (&lt;code&gt;fullchain.pem&lt;/code&gt;) verarbeiten. Es genügt also, Zertifikat und Key einzubinden und die Serverkonfiguration neu einzulesen (&lt;code&gt;service dovecot reload&lt;/code&gt;).&lt;/p&gt;

&lt;h4 id=&quot;-exim-&quot;&gt;&lt;em&gt;Exim&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Anders sieht es mit dem &lt;em&gt;SMTP&lt;/em&gt;-Server &lt;em&gt;Exim&lt;/em&gt; aus. Dieser gibt seine Root-Rechte auf, bevor er auf die TLS-Zertifikate zugreift. Immerhin kommt auch er mit &lt;code&gt;fullchain.pem&lt;/code&gt; klar.&lt;/p&gt;

&lt;p&gt;Eine Möglichkeit ist es, Zertifikat und Key in ein passendes Verzeichnis zu kopieren und dann Eigentümer und Rechte (&lt;code&gt;644&lt;/code&gt;!) anzupassen, bspw. so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /etc/exim4
mkdir certs 
cp /etc/letsencrypt/live/domain.example/fullchain.pem /etc/exim4/certs/
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/exim4/certs/
service exim4 restart
chown Debian-exim:Debian-exim /etc/exim4/certs/
chown Debian-exim:Debian-exim /etc/exim4/certs/*
chmod 644 /etc/exim4/certs/*
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ein solches Vorgehen wird dann auch bei jeder Erneuerung der Zertifikate erforderlich (s.u.)!&lt;/p&gt;

&lt;p&gt;Danach genügt es, die Serverkonfiguration neu zu laden (&lt;code&gt;service exim4 reload&lt;/code&gt;) und sich dann zu Testzwecken auf Port 25 zu verbinden und nach dem &lt;code&gt;EHLO&lt;/code&gt; ein &lt;code&gt;STARTTLS&lt;/code&gt; abzusetzen.&lt;/p&gt;

&lt;h4 id=&quot;-inn-&quot;&gt;&lt;em&gt;INN&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;INN&lt;/em&gt; stellt - jedenfalls in der in &lt;em&gt;Debian Jessie&lt;/em&gt; enthaltenen Version &lt;em&gt;2.5.4&lt;/em&gt; - ganz besondere Ansprüche: jedenfalls der Key muss für den Benutzer &lt;code&gt;news&lt;/code&gt; lesbar sein, und er benötigt &lt;code&gt;cert.pem&lt;/code&gt; und &lt;code&gt;chain.pem&lt;/code&gt; getrennt.&lt;/p&gt;

&lt;p&gt;Umsetzen könnte man das bspw. so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /etc/news
mkdir certs 
cp /etc/letsencrypt/live/domain.example/cert.pem /etc/news/certs/
cp /etc/letsencrypt/live/domain.example/chain.pem /etc/news/certs/
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/news/certs/
chown news:news /etc/news/certs/*
chmod 600 /etc/news/certs/*
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Auch hier muss man dieses Vorgehen für eine Erneuerung der Zertifikate im Blick behalten (s.u.).&lt;/p&gt;

&lt;p&gt;Ein Einlesen der &lt;code&gt;inn.conf&lt;/code&gt; später (&lt;code&gt;service inn2 restart&lt;/code&gt;) sollte dann alles funktionieren wie geplant.&lt;/p&gt;

&lt;h3 id=&quot;zertifikat-updates&quot;&gt;Zertifikat-Updates&lt;/h3&gt;

&lt;p&gt;Die nunmehr im Dateisystem verstreuten Zertifikatskopien müssen nach jeder Erneuerung des Zertifikats gleichfalls erneuert werden, damit nicht ein ungültiges Zertifikat ausgeliefert wird. Sinnvollerweise geschieht das ebenso automatisiert wie die Erneuerung des Zertifikats; hilfreich dabei die Möglichkeit, &lt;code&gt;letsencrypt&lt;/code&gt; (bzw. &lt;code&gt;certbot&lt;/code&gt;) mittels &lt;code&gt;--post-hook&lt;/code&gt; nach einem Zertifikatsaustausch ein Script ablaufen zu lassen.&lt;/p&gt;

&lt;h4 id=&quot;-exim-&quot;&gt;&lt;em&gt;Exim&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Man könnte sich daher bspw. eine Datei &lt;code&gt;/usr/local/bin/certbot-exim4-renew.sh&lt;/code&gt; mit folgendem Inhalt anlegen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/dash
cp /etc/letsencrypt/live/domain.example/fullchain.pem /etc/exim4/certs/
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/exim4/certs/
service exim4 reload
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Dazu passt dann ein &lt;em&gt;Cron&lt;/em&gt;-Eintrag der folgenden Art:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;certbot certonly --quiet -n --webroot -w /var/www/domain.example -d domain.example --keep-until-expiring --post-hook /usr/local/bin/certbot-exim4-renew.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Damit wird versucht, das Zertifikat für diesen Hostnamen (&lt;code&gt;domain.example&lt;/code&gt;) zu erneuern, jedoch nur, wenn es der Erneuerung bedürftig ist.&lt;/p&gt;

&lt;p&gt;Der Aufruf sollte in der &lt;em&gt;Crontab&lt;/em&gt; zeitlich &lt;em&gt;vor&lt;/em&gt; dem allgemeinen Aufruf &lt;code&gt;certbot renew --quiet&lt;/code&gt; erfolgen, damit erst das spezielle Zertifikat aktualisiert (und ggf. umkopiert) wird und danach die übrigen.&lt;/p&gt;

&lt;h4 id=&quot;-inn-&quot;&gt;&lt;em&gt;INN&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Für den &lt;em&gt;INN&lt;/em&gt; sähe diese Lösung analog mit einer Datei &lt;code&gt;/usr/local/bin/certbot-inn2-renew.sh&lt;/code&gt; so aus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/dash
cp /etc/letsencrypt/live/domain.example/cert.pem /etc/news/certs
cp /etc/letsencrypt/live/domain.example/chain.pem /etc/news/certs
cp /etc/letsencrypt/live/domain.example/privkey.pem /etc/news/certs
cd /etc/news/certs
chown news:news *.pem
chmod 600 *.pem
service inn2 reload
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Der &lt;em&gt;Cron&lt;/em&gt;-Eintrag wäre dann entsprechend:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;certbot certonly --quiet -n --webroot -w /var/www/domain.example -d domain.example --keep-until-expiring --post-hook /usr/local/bin/certbot-inn2-renew.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Auch dieser Eintrag muss zeitlich &lt;em&gt;vor&lt;/em&gt; dem allgemeinen Aufruf &lt;code&gt;certbot renew --quiet&lt;/code&gt; liegen.&lt;/p&gt;

&lt;h3 id=&quot;und-ihr-&quot;&gt;Und ihr?&lt;/h3&gt;

&lt;p&gt;So richtig optimal erscheinen mir diese Lösungen noch nicht. Gibt es bessere Ideen? Andere Erfahrungen?&lt;/p&gt;

&lt;p&gt;Nutzt ihr &lt;em&gt;letsencrypt&lt;/em&gt; noch für andere Dienste als die oben genannten?&lt;/p&gt;

&lt;p&gt;An Euren Erfahrungen und Lösungen wäre ich interessiert und freue mich daher über Kommentare, Hinweise und Ergänzungen.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/ab58b7fdf4c749689ad4f6dde41d970a&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Tue, 30 Aug 2016 14:30:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1943-guid.html</guid>
    <category>anleitung</category>
<category>debian</category>
<category>dovecot</category>
<category>exim</category>
<category>followerpower</category>
<category>inn</category>
<category>jessie</category>
<category>ssl</category>

</item>
<item>
    <title>Von Wheezy zu Jessie</title>
    <link>https://netz-rettung-recht.de/archives/1931-Von-Wheezy-zu-Jessie.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1931-Von-Wheezy-zu-Jessie.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1931</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1931</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Heute bin ich - fast 16 Monate nach dem Release - endlich dazu gekommen, den heimischen Server von &lt;em&gt;Debian Wheezy&lt;/em&gt; nach &lt;em&gt;Jessie&lt;/em&gt; (&lt;em&gt;Debian 8.0&lt;/em&gt;) zu aktualisieren. Wie üblich nahm das Distributions-Upgrade - schon durch den Download der aktualisierten Pakete und dann durch deren Installation - einige Zeit in Anspruch, verlief aber weitgehend problemlos.
Erfreulich vor allem, dass der Wechsel auf &lt;em&gt;systemd&lt;/em&gt; keine erkennbaren Schwierigkeiten mit sich brachte. Endlich ist jetzt auch zuhause &lt;code&gt;service [whatever] status&lt;/code&gt; gesprächiger.&lt;/p&gt;

&lt;p&gt;Größere Schwierigkeiten ergaben sich nicht; teilweise waren durch den Wechsel von &lt;em&gt;Apache 2.2&lt;/em&gt; auf &lt;em&gt;Apache 2.4&lt;/em&gt; Änderungen an der &lt;em&gt;Apache&lt;/em&gt;-Konfiguration erforderlich, aber da ich kaum Webpräsenzen konfiguriert habe, hielt sich das im Rahmen. Dem Account &lt;em&gt;uucp&lt;/em&gt; musste ich statt &lt;code&gt;/usr/sbin/nologin&lt;/code&gt; wieder eine Shell verpassen, damit die Cronjobs laufen - darauf wurde aber eigentlich in den Release-Notes hingewiesen -, und die &lt;em&gt;Dovecot&lt;/em&gt;-Konfiguration brauchte mehrfache Eingriffe, bis wieder alles lief; ich meine, dass dort ohne Rückfrage einfach aktualisierte Konfigurationsdateien eingespielt wurden, so dass Änderungen teilweise überschrieben wurden, möglicherweise weil die Konfigurationsdateien nicht korrekt als &lt;code&gt;conffiles&lt;/code&gt; markiert waren. Das ließ sich aber schnell wieder beheben.&lt;/p&gt;

&lt;p&gt;Glücklicherweise hielten sich diesmal auch die nachzuführenden Änderungen in &lt;code&gt;conffiles&lt;/code&gt;, die sich in der Distribution geändert haben, aber auch von mir editiert worden waren, in Grenzen; das ist sonst erfahrungsgemäß der bei weitem größte Aufwand bei einem Upgrade.&lt;/p&gt;

&lt;p&gt;Nun bin ich zuversichtlich, dass zumindest alle wesentlichen Dienste wieder laufen - jetzt in der jeweils aktuellsten (Debian-)Version. Also steht kein Zeitdruck zu befürchten, wenn der LTS-Support für &lt;em&gt;Wheezy&lt;/em&gt; ausläuft oder &lt;em&gt;Stretch&lt;/em&gt; released wird.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/296ab7a08e6a4f52b2dc642f083710a1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 15 Aug 2016 18:30:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1931-guid.html</guid>
    <category>debian</category>
<category>jessie</category>

</item>
<item>
    <title>PHP-FPM - jetzt mit mod_proxy_fcgi</title>
    <link>https://netz-rettung-recht.de/archives/1909-PHP-FPM-jetzt-mit-mod_proxy_fcgi.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1909-PHP-FPM-jetzt-mit-mod_proxy_fcgi.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1909</wfw:comment>

    <slash:comments>7</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1909</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Vergangene Woche hatte ich darüber &lt;a href=&quot;https://netz-rettung-recht.de/archives/1905-PHP-FPM-mit-Debian-Jessie.html&quot; title=&quot;&quot;&gt;berichtet&lt;/a&gt;, wie man - unter &lt;em&gt;Debian Jessie&lt;/em&gt; - &lt;em&gt;PHP-FPM&lt;/em&gt; mit &lt;code&gt;mod_fastcgi&lt;/code&gt; installieren kann. In den &lt;a href=&quot;https://netz-rettung-recht.de/archives/1905-PHP-FPM-mit-Debian-Jessie.html#c4081&quot; title=&quot;&quot;&gt;Kommentaren&lt;/a&gt; hatte &lt;a href=&quot;https://www.svenhartge.de/&quot; title=&quot;&quot;&gt;Sven&lt;/a&gt; mir dann nachfolgend erläutert, wie sich die Einbindung einfacher und besser über &lt;code&gt;mod_proxy_fcgi&lt;/code&gt; lösen lässt, vorausgesetzt, man hat (wie in &lt;em&gt;Debian Jessie&lt;/em&gt;) einen &lt;em&gt;Apache 2.4&lt;/em&gt; vor sich.&lt;/p&gt;

&lt;p&gt;Da mir das ebenfalls vorzugswürdig erscheint, beschreiben ich in der Folge nunmehr diese Variante.&lt;/p&gt;

&lt;h3 id=&quot;-php-fpm-und-mod-proxy-fcgi-installieren&quot;&gt;&lt;em&gt;PHP-FPM&lt;/em&gt; und &lt;code&gt;mod_proxy_fcgi&lt;/code&gt; installieren&lt;/h3&gt;

&lt;p&gt;Unter &lt;em&gt;Debian Jessie&lt;/em&gt; ist die Installation der Pakete hinreichend einfach:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apt-get install php5-fpm php5
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;Debian&lt;/em&gt; hinterlegt dabei die &lt;code&gt;php.ini&lt;/code&gt; für die &lt;em&gt;FastCGI&lt;/em&gt;-Prozesse unter &lt;code&gt;/etc/php5/fpm/php.ini&lt;/code&gt; und die Konfiguration für &lt;em&gt;FPM&lt;/em&gt; unter &lt;code&gt;/etc/php5/fpm/php-fpm.conf&lt;/code&gt;, ergänzt u.a. um die Konfiguration installierter Module in &lt;code&gt;/etc/php5/fpm/conf.d/&lt;/code&gt;, wie man das so kennt.&lt;/p&gt;

&lt;p&gt;Im Verzeichnis &lt;code&gt;/etc/php5/fpm/pool.d/&lt;/code&gt; sind dann die einzelnen Pools definiert, die ebenfalls in die &lt;code&gt;/etc/php5/fpm/php-fpm.conf&lt;/code&gt; inkludiert werden, standardmäßig nur der Pool des Benutzers &lt;code&gt;www-data&lt;/code&gt;, unter dem der Webserver läuft.&lt;/p&gt;

&lt;h3 id=&quot;-mod-proxy-fcgi-f-r-php-fpm-konfigurieren&quot;&gt;&lt;code&gt;mod_proxy_fcgi&lt;/code&gt; für &lt;em&gt;PHP-FPM&lt;/em&gt; konfigurieren&lt;/h3&gt;

&lt;p&gt;Serverweit lässt sich &lt;em&gt;PHP-FPM&lt;/em&gt; dann wie folgt in einer neuen Datei &lt;code&gt;/etc/apache2/conf-available/php5-fpm.conf&lt;/code&gt; konfigurieren:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_proxy_fcgi.c&amp;gt;
    &amp;lt;Proxy &quot;unix:/var/run/php5-fpm.sock|fcgi://php-fpm&quot;&amp;gt;
        # we must declare a (any) parameter in here 
        # or it won&#039;t register the proxy ahead of time
        ProxySet disablereuse=off
    &amp;lt;/Proxy&amp;gt;
    &amp;lt;FilesMatch &quot;.+\.php$&quot;&amp;gt;
        SetHandler proxy:fcgi://php-fpm
    &amp;lt;/FilesMatch&amp;gt;
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Auf diese Weise werden auf &lt;code&gt;.php&lt;/code&gt; endende Dateien an den darüber definierten Prxoy durchgereicht. Wer will, kann stattdessen bspw. auch &lt;code&gt;&amp;lt;FilesMatch &quot;.+\.ph(p[345]?|t|tml)$&quot;&amp;gt;&lt;/code&gt; verwenden, wie Sven das empfohlen hat; das deckt auch alle anderen gebräuchlichen Endungen für &lt;em&gt;PHP&lt;/em&gt;-Scripts ab.&lt;/p&gt;

&lt;p&gt;Standardmäßig sorgt Debian übrigens dafür, dass das - mitinstallierte - Modul &lt;code&gt;mod_proxy&lt;/code&gt; &lt;em&gt;nicht&lt;/em&gt; als &lt;em&gt;forward proxy&lt;/em&gt; arbeitet; das ist in der Datei &lt;code&gt;/etc/apache2/mods-available/proxy.conf&lt;/code&gt; konfiguriert und stellt also kein Problem dar.&lt;/p&gt;

&lt;p&gt;Nach Aktivieren des Moduls und der Konfiguration vermittels &lt;code&gt;a2enmod proxy_fcgi&lt;/code&gt; und &lt;code&gt;a2enconf php5-fpm&lt;/code&gt; sowie einem Restart des Webservers (&lt;code&gt;service apache2 restart&lt;/code&gt;) sollte PHP nun zur Verfügung stehen.&lt;/p&gt;

&lt;h3 id=&quot;pools-f-r-einzelne-benutzer-einrichten&quot;&gt;Pools für einzelne Benutzer einrichten&lt;/h3&gt;

&lt;p&gt;Um nun verschiedene Pools für verschiedene Benutzer einzurichten, bedarf es neben einer passenden Konfiguration des jeweiligen Pools in &lt;code&gt;/etc/php5/fpm/pool.d/&lt;/code&gt; und eines geänderten Aufrufs in jedem &lt;em&gt;virtual host&lt;/em&gt;, der diesem Benutzer zugeordnet ist.&lt;/p&gt;

&lt;p&gt;Am einfachsten kopiert man sich die bestehende Konfiguration für den Pool &lt;code&gt;www&lt;/code&gt; und wandelt sie ab:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /etc/php5/fpm/pool.d
cp www.conf user1.conf
vim user1.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Folgende Teile der Konfiguration müssen ersetzt werden: der Name des Pools, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;group&lt;/code&gt; und &lt;code&gt;listen&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;; Start a new pool named &#039;user1&#039;.
; the variable $pool can we used in any directive and will be replaced by the
; pool name (&#039;user1&#039; here)
[user1]

[...]

user = user1
group = users

[...]

listen = /var/run/php5-fpm-user1.sock
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Selbstverständlich können auch andere, für diesen Pool spezifische Änderungen vorgenommen werden&lt;/p&gt;

&lt;p&gt;Und danach bekommt der bspw. in &lt;code&gt;/etc/apache2/sites-available/user1-domain.example&lt;/code&gt; konfigurierte &lt;em&gt;virtual host&lt;/em&gt; noch folgende Ergänzung (zwischen &lt;code&gt;&amp;lt;VirtualHost ...&amp;gt;&lt;/code&gt; und &lt;code&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_proxy_fcgi.c&amp;gt;
    &amp;lt;Proxy &quot;unix:/var/run/php5-fpm-user1.sock|fcgi://php-fpm-user1&quot;&amp;gt;
        # we must declare a (any) parameter in here 
        # or it won&#039;t register the proxy ahead of time
        ProxySet disablereuse=off
    &amp;lt;/Proxy&amp;gt;
    &amp;lt;FilesMatch &quot;.+\.php$&quot;&amp;gt;
        SetHandler proxy:fcgi://php-fpm-user1
    &amp;lt;/FilesMatch&amp;gt;
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In diesem &lt;em&gt;virtual host&lt;/em&gt; kommuniziert der &lt;em&gt;Apache&lt;/em&gt; also nicht mit dem &lt;em&gt;FastCGI&lt;/em&gt;-Server über &lt;code&gt;/var/run/php5-fpm.sock&lt;/code&gt;, sondern über &lt;code&gt;/var/run/php5-fpm-user1.sock&lt;/code&gt;, und den haben wir ja anders konfiguriert. Ein &lt;code&gt;service apache2 restart&lt;/code&gt; bzw. &lt;code&gt;service php5-fpm restart&lt;/code&gt; später sollte die geänderte Konfiguration zur Verfügung stehen.&lt;/p&gt;

&lt;p&gt;Soll PHP in mehreren &lt;em&gt;virtual hosts&lt;/em&gt; unter derselben Benutzerkennung laufen, empfiehlt es sich, die o.g. Konfiguration in eine eigene Datei (bspw. &lt;code&gt;/etc/apache2/sites-available/user1.fcgi&lt;/code&gt;) auszulagern und diese Datei dann in die &lt;em&gt;virtual host&lt;/em&gt;-Konfiguration einzubinden:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Include /etc/apache2/sites-available/user1.fcg
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das spart nicht nur Tipparbeit, sondern erleichtert auch spätere Änderungen sehr.&lt;/p&gt;

&lt;h3 id=&quot;die-installation-testen&quot;&gt;Die Installation testen&lt;/h3&gt;

&lt;p&gt;Am einfachsten gestaltet sich der Test, wenn man im Webroot des Servers (&lt;em&gt;Debian Jessie&lt;/em&gt;: &lt;code&gt;/var/www/html/&lt;/code&gt;)
und der einzelnen &lt;em&gt;virtual hosts&lt;/em&gt; jeweils eine Datei &lt;code&gt;test.php&lt;/code&gt; speichert, die nur &lt;code&gt;phpinfo()&lt;/code&gt; aufruft:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In der Ausgabe von &lt;code&gt;phpinfo()&lt;/code&gt; wird angezeigt, unter welchem Benutzer das Script ausgeführt wird.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Vielen Dank an Sven für den hilfreichen Tip!&lt;/em&gt;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/486e1796375b4333b55dd718167e842b&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Tue, 26 Apr 2016 05:50:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1909-guid.html</guid>
    <category>anleitung</category>
<category>debian</category>
<category>jessie</category>
<category>php</category>

</item>
<item>
    <title>PHP-FPM mit Debian Jessie</title>
    <link>https://netz-rettung-recht.de/archives/1905-PHP-FPM-mit-Debian-Jessie.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1905-PHP-FPM-mit-Debian-Jessie.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1905</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1905</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Statische Webseiten sind nett (und durchaus wieder &lt;a href=&quot;https://netz-rettung-recht.de/archives/1755-Generatoren-fuer-statische-Websites.html&quot; title=&quot;&quot;&gt;im Kommen&lt;/a&gt;), aber zumindest für manche Zwecke sind dynamisch generierte Seiten und die auf diese Weise ermöglichte Interaktivität doch dann besser oder gar notwendig. Facebook, bspw., würde sich als statische Seite dann doch eher schwierig gestalten.&lt;/p&gt;

&lt;h3 id=&quot;die-welt-dynamischer-webseiten&quot;&gt;Die Welt dynamischer Webseiten&lt;/h3&gt;

&lt;h4 id=&quot;scriptsprachen&quot;&gt;Scriptsprachen&lt;/h4&gt;

&lt;p&gt;Dynamisch generierte Seiten bedingen, dass beim Aufruf einer Webseite nicht nur eine auf dem Server abgelegte Datei angezeigt wird, sondern dass ein Programm dort läuft, das die Ausgabe mehr oder weniger live generiert. Das hat ganz andere Implikationen für die Sicherheit des Servers, denn nunmehr läuft dort von außen erreichbarer Code, der schlimmstenfalls noch durch die Nutzer selbst aufgespielt werden kann. Nicht jeder, der seine ersten Gehversuche mit Scripts macht, hat dabei auch Fragen der IT-Sicherheit ausreichend im Blick - um das Problem einmal stark verharmlosend zu beschreiben. Gerade PHP hat nicht den Ruf, zumindest in den ersten Jahren seiner Entwicklung großes Gewicht auf das Fördern oder gar Erzwingen sicherer Praktiken gelegt zu haben, und viele lern(t)en es vor allem als eine Art Templating-Sprache kennen, die man irgendwie in seine HTML-Seiten einbettet, um ihnen damit eine erweiterte Funktionalität zu verleihen, ohne dabei groß an Konsequenzen zu denken (schuldig, euer Ehren!).&lt;/p&gt;

&lt;h4 id=&quot;rechteprobleme&quot;&gt;Rechteprobleme&lt;/h4&gt;

&lt;p&gt;Besondere Schwierigkeiten kommen hinzu, wenn mehr als ein Benutzer auf dem Server Scripts nutzen will. Denn wenn der Webserver bzw. der von diesem gestartete Interpreter das Script ausführen will, muss er es lesen können. Dann muss er aber - logischerweise - auch die Scripts aller anderen nutzer lesen können, was bedeutet, dass Nutzer A ein Sript schreiben kann, mit dem er sich die Scripts von Benutzer B anzeigen lassen kann, samt aller dort gespeicherten Informationen (Datenbankpassworte usw.), ebenso wie Dateien, die Benutzer B anlegt. Und wenn das Script irgendwelche Dateien anlegt (man denke an hochgeladene Bilder), dann werden diese Dateien unter der Nutzerkennung des Webservers angelegt, so dass der Benutzer dann keinen vollen Zugriff darauf hat. Das ist alles etwas unschön, weshalb man schon bald die Möglichkeit geschaffen hat, Scripts (sei es Perl, sei es Python, sei es PHP) unter der Benutzerkennung des jeweiligen Nutzers laufen zu lassen, dem das Script &amp;#8220;gehört&amp;#8221;.&lt;/p&gt;

&lt;h4 id=&quot;-suexec-und-suphp-&quot;&gt;&lt;em&gt;suexec&lt;/em&gt; und &lt;em&gt;suphp&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Das schafft zwar andere Probleme, insbesondere im Bereich der Performance, denn nun kann ein Webserverprozess nicht mehr beliebig viele Scripts in parallelen Threads abarbeiten, weil diese ja vielleicht verschiedenen Nutzern gehören, so dass für jedes Script ein neuer Interpreter-Prozess gestartet werden muss, aber es ist doch in der Regel vorzugswürdig.&lt;/p&gt;

&lt;p&gt;Für Scripts, die über die &lt;em&gt;CGI&lt;/em&gt;-Schnittstelle (ja, ich weiß, das &amp;#8220;I&amp;#8221; steht schon für &amp;#8220;Interface&amp;#8221;) gestartet werden, stellt &lt;em&gt;suexec&lt;/em&gt; die entsprechende Funktionalität bereit. Für PHP tat das traditionell &lt;em&gt;suphp&lt;/em&gt;. &lt;em&gt;suphp&lt;/em&gt; gibt es aber in &lt;em&gt;Debian Jessie&lt;/em&gt; nicht mehr. Was also tun?&lt;/p&gt;

&lt;p&gt;Als Lösung bietet sich &lt;strong&gt;&lt;a href=&quot;http://php-fpm.org/&quot; title=&quot;&quot;&gt;PHP-FPM&lt;/a&gt;&lt;/strong&gt; an.&lt;/p&gt;

&lt;h3 id=&quot;-php-fpm-&quot;&gt;&lt;em&gt;PHP-FPM&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;FPM&lt;/em&gt; steht dabei für &lt;em&gt;FastCGI Process Manager&lt;/em&gt; und ist eine sehr angenehme Lösung, um PHP als &lt;em&gt;FastCGI&lt;/em&gt; einzubinden. &lt;em&gt;FastCGI&lt;/em&gt; ist ein Mittelding zwischen der Einbindung per &lt;em&gt;mod_php&lt;/em&gt;, also als Modul im Webserver, und als &lt;em&gt;CGI&lt;/em&gt;, so dass für jeden Aufruf eines PHP-Scripts ein eigener Prozess gestartet werden muss: es werden einige &lt;em&gt;FastCGI&lt;/em&gt;-Prozesse gestartet, die in einem Pool vorgehalten werden, und wenn ein PHP-Script aufgerufen wird, wird der Aufruf vom Webserver an den schon laufenden Prozess weitergereicht. Das erspart den sonst für jeden Aufruf notwendigen Start des Interpreters - und es bietet die Möglichkeit, pro Pool festzulegen, unter welcher Benutzerkennung die Prozesse dieses Pools laufen sollen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hinweis&lt;/strong&gt;: Der folgende Vorschlag ist nicht der einzige Weg, &lt;em&gt;PHP-FPM&lt;/em&gt; zu installieren. Eine &lt;strong&gt;bessere Lösung&lt;/strong&gt; unter Verwendung von &lt;em&gt;mod&amp;#95;proxy&amp;#95;fcgi&lt;/em&gt;, auf die ich in den Kommentaren hingewiesen wurde, habe ich mittlerweile &lt;a href=&quot;https://netz-rettung-recht.de/archives/1909-PHP-FPM-jetzt-mit-mod_proxy_fcgi.html&quot; title=&quot;&quot;&gt;auch beschrieben&lt;/a&gt;. Dieser andere Weg setzt &lt;em&gt;Apache 2.4.x&lt;/em&gt; voraus, benötigt aber kein Paket aus dem nicht-freien &lt;em&gt;Debian&lt;/em&gt;-Repository. &lt;strong&gt;Insgesamt erscheint mir dieser andere Weg vorzugswürdig.&lt;/strong&gt;&lt;/p&gt;

&lt;h4 id=&quot;-php-fpm-installieren&quot;&gt;&lt;em&gt;PHP-FPM&lt;/em&gt; installieren&lt;/h4&gt;

&lt;p&gt;Unter &lt;em&gt;Debian Jessie&lt;/em&gt; ist die Installation der Pakete hinreichend einfach:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apt-get install libapache2-mod-fastcgi php5-fpm php5
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;libapache2-mod-fastcgi&lt;/code&gt; kommt hier aus dem &lt;code&gt;non-free&lt;/code&gt;-Repository, das dementsprechend eingebunden sein muss.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Debian&lt;/em&gt; hinterlegt dabei die &lt;code&gt;php.ini&lt;/code&gt; für die &lt;em&gt;FastCGI&lt;/em&gt;-Prozesse unter &lt;code&gt;/etc/php5/fpm/php.ini&lt;/code&gt; und die Konfiguration für &lt;em&gt;FPM&lt;/em&gt; unter &lt;code&gt;/etc/php5/fpm/php-fpm.conf&lt;/code&gt;, ergänzt u.a. um die Konfiguration installierter Module in &lt;code&gt;/etc/php5/fpm/conf.d/&lt;/code&gt;, wie man das so kennt.&lt;/p&gt;

&lt;p&gt;Im Verzeichnis &lt;code&gt;/etc/php5/fpm/pool.d/&lt;/code&gt; sind dann die einzelnen Pools definiert, die ebenfalls in die &lt;code&gt;/etc/php5/fpm/php-fpm.conf&lt;/code&gt; inkludiert werden, standardmäßig nur der Pool des Benutzers &lt;code&gt;www-data&lt;/code&gt;, unter dem der Webserver läuft.&lt;/p&gt;

&lt;h4 id=&quot;-fastcgi-f-r-php-fpm-konfigurieren&quot;&gt;&lt;em&gt;FastCGI&lt;/em&gt; für &lt;em&gt;PHP-FPM&lt;/em&gt; konfigurieren&lt;/h4&gt;

&lt;p&gt;Wenn man möchte, kann man die bestehende Konfigurationsdatei sichern:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cp /etc/apache2/mods-available/fastcgi.conf /etc/apache2/mods-available/fastcgi.conf.backup
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;und danach sie danach mittels &lt;code&gt;vim /etc/apache2/mods-available/fastcgi.conf&lt;/code&gt; neu befüllen wie folgt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_fastcgi.c&amp;gt;
    AddType application/x-httpd-fastphp5 .php
    Action application/x-httpd-fastphp5 /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
    &amp;lt;Directory /usr/lib/cgi-bin&amp;gt;
        Require all granted
    &amp;lt;/Directory&amp;gt;
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Auf diese Weise bekommen auf &lt;code&gt;.php&lt;/code&gt; endende Dateien den Typ &lt;code&gt;x-httpd-fastphp5&lt;/code&gt; zugewiesen, der über den Handler /&lt;code&gt;php5-fcgi&lt;/code&gt; aufgerufen wird, der wiederum auf &lt;code&gt;/usr/lib/cgi-bin/php5-fcgi&lt;/code&gt; zeigt, was aber ebenfalls nicht existiert, so dass &lt;em&gt;Apache&lt;/em&gt; stattdessen alles dem externen &lt;em&gt;FastCGI&lt;/em&gt;-Server zuwirft, der über den Socket &lt;code&gt;/var/run/php5-fpm.sock&lt;/code&gt; kommuniziert.&lt;/p&gt;

&lt;p&gt;Nach Aktivieren der notwendigen Module mittels &lt;code&gt;a2enmod fastcgi actions alias&lt;/code&gt; und einem Restart des Webservers (&lt;code&gt;service apache2 restart&lt;/code&gt;) sollte PHP zur Verfügung stehen.&lt;/p&gt;

&lt;h4 id=&quot;pools-f-r-einzelne-benutzer-einrichten&quot;&gt;Pools für einzelne Benutzer einrichten&lt;/h4&gt;

&lt;p&gt;Um nun verschiedene Pools für verschiedene Benutzer einzurichten, bedarf es neben einer passenden Konfiguration des jeweiligen Pools in &lt;code&gt;/etc/php5/fpm/pool.d/&lt;/code&gt; und eines geänderten Aufrufs in jedem &lt;em&gt;virtual host&lt;/em&gt;, der diesem Benutzer zugeordnet ist.&lt;/p&gt;

&lt;p&gt;Am einfachsten kopiert man sich die bestehende Konfiguration für den Pool &lt;code&gt;www&lt;/code&gt; und wandelt sie ab:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /etc/php5/fpm/pool.d
cp www.conf user1.conf
vim user1.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Folgende Teile der Konfiguration müssen ersetzt werden: der Name des Pools, &lt;code&gt;user&lt;/code&gt;, &lt;code&gt;group&lt;/code&gt; und &lt;code&gt;listen&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;; Start a new pool named &#039;user1&#039;.
; the variable $pool can we used in any directive and will be replaced by the
; pool name (&#039;user1&#039; here)
[user1]

[...]

user = user1
group = users

[...]

listen = /var/run/php5-fpm-user1.sock
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Selbstverständlich können auch andere, für diesen Pool spezifische Änderungen vorgenommen werden&lt;/p&gt;

&lt;p&gt;Und danach bekommt der bspw. in &lt;code&gt;/etc/apache2/sites-available/user1-domain.example&lt;/code&gt; konfigurierte &lt;em&gt;virtual host&lt;/em&gt; noch folgende Ergänzung (zwischen &lt;code&gt;&amp;lt;VirtualHost ...&amp;gt;&lt;/code&gt; und &lt;code&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/code&gt;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_fastcgi.c&amp;gt;
    AddType application/x-httpd-fastphp5 .php
    Action application/x-httpd-fastphp5 /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi-user1
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi-user1 -socket /var/run/php5-fpm-user1.sock -pass-header Authorization
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In diesem &lt;em&gt;virtual host&lt;/em&gt; kommuniziert der &lt;em&gt;Apache&lt;/em&gt; also nicht mit dem &lt;em&gt;FastCGI&lt;/em&gt;-Server über &lt;code&gt;/var/run/php5-fpm.sock&lt;/code&gt;, sondern über &lt;code&gt;/var/run/php5-fpm-user1.sock&lt;/code&gt;, und den haben wir ja anders konfiguriert. Ein &lt;code&gt;service apache2 restart&lt;/code&gt; bzw. &lt;code&gt;service php5-fpm restart&lt;/code&gt; später sollte die geänderte Konfiguration zur Verfügung stehen.&lt;/p&gt;

&lt;p&gt;Soll PHP in mehreren &lt;em&gt;virtual hosts&lt;/em&gt; unter derselben Benutzerkennung laufen, empfiehlt es sich, die o.g. Konfiguration in eine eigene Datei (bspw. &lt;code&gt;/etc/apache2/sites-available/user1.fcgi&lt;/code&gt;) auszulagern und diese Datei dann in die &lt;em&gt;virtual host&lt;/em&gt;-Konfiguration einzubinden:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Include /etc/apache2/sites-available/user1.fcg
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das spart nicht nur Tipparbeit, sondern erleichtert auch spätere Änderungen sehr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wichtig&lt;/strong&gt;: Der Eintrag &lt;code&gt;FastCgiExternalServer&lt;/code&gt; darf dabei nur einmal erfolgen, also nicht pro &lt;em&gt;vhost&lt;/em&gt; wiederholt werden.&lt;/p&gt;

&lt;h4 id=&quot;die-installation-testen&quot;&gt;Die Installation testen&lt;/h4&gt;

&lt;p&gt;Am einfachsten gestaltet sich der Test, wenn man im Webroot des Servers (&lt;em&gt;Debian Jessie&lt;/em&gt;: &lt;code&gt;/var/www/html/&lt;/code&gt;)
und der einzelnen &lt;em&gt;virtual hosts&lt;/em&gt; jeweils eine Datei &lt;code&gt;test.php&lt;/code&gt; speichert, die nur &lt;code&gt;phpinfo()&lt;/code&gt; aufruft:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In der Ausgabe von &lt;code&gt;phpinfo()&lt;/code&gt; wird angezeigt, unter welchem Benutzer das Script ausgeführt wird.&lt;/p&gt;

&lt;h3 id=&quot;weiterer-lesestoff&quot;&gt;Weiterer Lesestoff&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Alex Fornuto&lt;/em&gt; bei &lt;em&gt;linode&lt;/em&gt;: &lt;a href=&quot;https://www.linode.com/docs/websites/apache/install-php-fpm-and-apache-on-debian-8&quot; title=&quot;403 Forbidden&quot;&gt;Install PHP-FPM and Apache on Debian 8 (Jessie)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Apache httpd&lt;/em&gt; Wiki: &lt;a href=&quot;http://wiki.apache.org/httpd/PHP-FPM&quot; title=&quot;301 Moved Permanently&quot;&gt;High-performance PHP on apache httpd 2.4.x using mod&amp;#95;proxy&amp;#95;fcgi and php-fpm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/9bcac885cb2d41e483ab77fc7acff8b2&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 18 Apr 2016 06:45:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1905-guid.html</guid>
    <category>debian</category>
<category>jessie</category>
<category>php</category>

</item>
<item>
    <title>SSL/TLS mit Let's Encrypt</title>
    <link>https://netz-rettung-recht.de/archives/1903-SSLTLS-mit-Lets-Encrypt.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1903-SSLTLS-mit-Lets-Encrypt.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1903</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1903</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Bereits &lt;a href=&quot;https://netz-rettung-recht.de/archives/1901-Der-eigene-Webserver-mit-SSLTLS.html&quot; title=&quot;&quot;&gt;vergangene Woche&lt;/a&gt; berichtete ich von meinen Irrungen und Wirrungen des letzten Jahrzehnts mit SSL/TLS im Web. Erst Ende 2015 hatte ich mich aufgerafft, über &lt;a href=&quot;https://www.startssl.com/&quot; title=&quot;Notice to all StartCom subscribers&quot;&gt;StartCom&lt;/a&gt; für einige Domains Zertifikate erstellen zu lassen, und parallel die Berichterstattung über &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; verfolgt.&lt;/p&gt;

&lt;p&gt;Der Workflow für die Erstellung und Pflege von HTTPS-Zertifikaten kann schnell komplex werden:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Am Anfang steht die Erzeugung eines Schlüsselpaares, denn das spätere Zertifikat wird nur derjenige verwenden können, der auch den passenden privaten Schlüssel hat.&lt;/li&gt;
&lt;li&gt;Dann ist für jedes Zertifikat ein &lt;em&gt;Certificate Signing Request&lt;/em&gt; (&lt;em&gt;CSR&lt;/em&gt;) zu erstellen; das ist quasi die Roh-Form des späteren Zertifikats mit den notwendigen Informationen, die darin enthalten sein sollen.&lt;/li&gt;
&lt;li&gt;Dieser &lt;em&gt;CSR&lt;/em&gt; muss dann von der Zertifierungsstelle (Certificate Authority, &lt;em&gt;CA&lt;/em&gt;) digital signiert werden.&lt;/li&gt;
&lt;li&gt;Das so entstandene Zertifikat muss gespeichert und in die Webserver-Konfiguration eingebunden werden.&lt;/li&gt;
&lt;li&gt;Der ganze Ablauf ist nur zielführend, wenn die &lt;em&gt;CA&lt;/em&gt; von den verbreiteten Browsern anerkannt ist, den von ihr signierten Zertifikaten also vertraut wird. Dafür wollen die meisten &lt;em&gt;CAs&lt;/em&gt; Geld. Zudem müssen sie sich über einen mehr oder weniger aufwendigen Weg zumindest vergewissern, dass derjenige, der ein Zertifikat für einen bestimmten Hostnamen ausgestellt haben möchte, über diesen auch verfügen kann.&lt;/li&gt;
&lt;li&gt;Zertifikate werden in der Regel nur für einen begrenzten Zeitraum - meistens ein Jahr - ausgestellt. Danach müssen sie (rechtzeitig!) verlängert werden.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://letsencrypt.org/&quot; title=&quot; Let&amp;#39;s Encrypt&quot;&gt;Let&amp;#8217;s Encrypt&lt;/a&gt;&lt;/em&gt; ist angetreten, diese Abläufe weitestmöglich zu vereinfachen.&lt;/p&gt;

&lt;h3 id=&quot;-let-s-encrypt-die-prinzipien&quot;&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; - die Prinzipien&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; arbeitet kostenlos und veröffentlicht die verwendeten Schnittstellen. Es stellt eine &lt;em&gt;CA&lt;/em&gt; zur Verfügung, die automatisch Zertifikate ausstellt, nachdem sie überprüft hat, dass der Anfragende die administrative Kontrolle über den entsprechenden Hostnamen hat - beispielsweise, indem &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; verlangt, dass eine bestehende Datei auf dem Webserver unter diesem Hostnamen hinterlegt wird. Die erstellten Zertifikate werden öffentlich gemacht; es kann also jeder jederzeit nachvollziehen, wann &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; welche Zertifikate erstellt hat.&lt;/p&gt;

&lt;p&gt;Mittlerweile ist das Zwischenzertifikat von &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; nicht nur durch &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; selbst, sondern auch durch eine andere &lt;em&gt;CA&lt;/em&gt; (&lt;em&gt;IdenTrust&lt;/em&gt;) signiert und wird daher regelmäßig von den Browsern als vertrauenswürdig anerkannt. Von &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; ausgestellte Zertifikate werden also akzeptiert und führen nicht zu irgendwelchen Warnmeldungen. Sie gelten allerdings nur rund 90 Tage und müssen dann erneut werden.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; stellt Client-Software zur Verfügung, die den gesamten, einleitend dargestellten Workflow automatisiert, ermöglicht es aber auch, die notwendigen Schritte in beliebigem Umfang manuell nachzuvollziehen oder auch eigene Lösungen zu programmieren. Im vollautomatischen Modus erstellt &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; das notwendige Schlüsselpaar und den &lt;em&gt;CSR&lt;/em&gt;, überprüft, dass der Antragsteller den Hostnamen kontrolliert, stellt das Zertifikat aus und speichert es, passt die Webserver-Konfiguration an und bindet das Zertifikat ein und kann auf Wunsch rechtzeitig vor Ablauf ein neues Zertifikat erstellen.&lt;/p&gt;

&lt;h3 id=&quot;-let-s-encrypt-und-der-apache-webserver-unter-debian-jessie-&quot;&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; und der &lt;em&gt;Apache&lt;/em&gt;-Webserver unter &lt;em&gt;Debian Jessie&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Im Anschluss möchte ich einen weitgehend, aber nicht völlig automatisierten Ablauf zum Erstellen von SSL-Zertifikaten und deren Einbindung in einen &lt;em&gt;Apache&lt;/em&gt; unter &lt;em&gt;Debian Jessie&lt;/em&gt; darstellen. Es ist durchaus möglich, weit weniger auf Automatismen zu setzen; dann muss der Client auch nicht zwingend mit Root-Rechten laufen. &lt;em&gt;Matthias Gutjahr&lt;/em&gt; schildert in seinem Blog eine Möglichkeit dafür; &lt;em&gt;Dirk Deimeke&lt;/em&gt; hat eine weitere Alternative dargestellt. Beide Beiträge sind am Ende dieses Blogbeitrags verlinkt.&lt;/p&gt;

&lt;h4 id=&quot;installation&quot;&gt;Installation&lt;/h4&gt;

&lt;p&gt;Ab &lt;em&gt;Jessie&lt;/em&gt;, der derzeit stabilen &lt;em&gt;Debian&lt;/em&gt;-Version, steht &lt;code&gt;letsencrypt&lt;/code&gt; als Paket zur Verfügung, allerdings nur in den Backports. Wenn sich in der &lt;code&gt;/etc/apt/sources.list&lt;/code&gt; also die Zeile &lt;code&gt;deb http://ftp.debian.org/debian jessie-backports main&lt;/code&gt; findet, ist die Installation daher denkbar einfach:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;apt-get -t jessie-backports install letsencrypt
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Die umfangreichen Abhängigkeiten werden mitinstalliert.&lt;/p&gt;

&lt;p&gt;Wer noch unter &lt;em&gt;Wheezy&lt;/em&gt; arbeitet, benötigt etwas mehr Vertrauen in die Macher von &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; - und Platz für ein umfangreicheres Software-Paket (&lt;code&gt;letsencrypt-auto&lt;/code&gt;), das u.a. eine komplette virtuelle &lt;em&gt;Python&lt;/em&gt;-Umgebung mit sich schleppt:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /usr/local
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;letsencrypt-auto&lt;/code&gt; akzeptiert dann denselben Input wie &lt;code&gt;letsencrypt&lt;/code&gt;.&lt;/p&gt;

&lt;h4 id=&quot;zertifikat-erstellen-lassen&quot;&gt;Zertifikat erstellen lassen&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;letsencrypt&lt;/code&gt; bietet eine &lt;code&gt;ncurses&lt;/code&gt;-Oberfläche, die es ermöglicht, auf einige Kommandozeilen-Parameter zu verzichten und ggf. notwendige Abfragen im Dialog zu beantworten. Dazu gehört beim ersten Start u.a. die Angabe einer E-Mail-Adresse für eine mögliche Kontaktaufnahme und die Bestätigung der AGB, die erforderlich ist. Danach erstellt &lt;code&gt;letsencrypt&lt;/code&gt; automatisch einen Account samt Schlüsselpaar, so dass weitere Aufrufe in der Regel ohne Interaktion ablaufen können.&lt;/p&gt;

&lt;p&gt;Alle Daten werden standardmäßig unter &lt;code&gt;/etc/letsencrypt/&lt;/code&gt; abgelegt.&lt;/p&gt;

&lt;p&gt;Der folgende Aufruf fordert ein Zertifikat für die Hostnamen &lt;code&gt;domain.example&lt;/code&gt; und &lt;code&gt;www.domain.example&lt;/code&gt; an, deren Dateien auf der Platte im Verzeichnis &lt;code&gt;/var/www/domain.example&lt;/code&gt; (&lt;em&gt;Webroot&lt;/em&gt;) liegen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;letsencrypt certonly --webroot -w /var/www/domain.example/ -d domain.example -d www.domain.example
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Falls notwendig, werden Mailadresse und Zustimmung zu den AGB (&amp;#8220;Terms of Service&amp;#8221;, &amp;#8220;TOS&amp;#8221;) abgefragt und ein privater Schlüssel (bzw. das Schlüsselpaar) erstellt. Dann wird der &lt;em&gt;CSR&lt;/em&gt; an &lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt; geschickt, temporär eine unter &lt;code&gt;http://domain.example/&lt;/code&gt; abrufbare Datei im &lt;em&gt;Webroot&lt;/em&gt; erstellt und so geprüft, dass man wirklich die Kontrolle über diesen Hostnamen hat, das Zertifikat erstellt, unter &lt;code&gt;/etc/letsencrypt/archive/domain.example/&lt;/code&gt; gespeichert und ein Symlink von &lt;code&gt;/etc/letsencrypt/live/domain.example/&lt;/code&gt; nach dort erstellt.&lt;/p&gt;

&lt;p&gt;Soll das Zertifikat für weitere Hostnamen gelten, können beliebig viele Folgen von &lt;code&gt;-w webroot -d hostname&lt;/code&gt; angeschlossen werden. Es folgt jeweils auf das &lt;code&gt;-w webroot&lt;/code&gt; die Angabe der Hostnames, die zu diesem Webroot gehören.&lt;/p&gt;

&lt;h4 id=&quot;zertifikat-beim-apache-einbinden&quot;&gt;Zertifikat beim &lt;em&gt;Apache&lt;/em&gt; einbinden&lt;/h4&gt;

&lt;p&gt;Eine minimale Konfiguration für den &lt;em&gt;virtual host&lt;/em&gt; könnte im &lt;em&gt;Apache 2.4&lt;/em&gt; (&lt;em&gt;Debian Jessie&lt;/em&gt;) so aussehen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;VirtualHost *:443&amp;gt;
    ServerName domain.example
    ServerAlias www.domain.example

    DocumentRoot /var/www/domain.example

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/domain.example/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain.example/privkey.pem
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Der &lt;em&gt;Apache 2.2&lt;/em&gt;, der mit &lt;em&gt;Debian Wheezy&lt;/em&gt; ausgeliefert wird, muss Zertifikat und Zwischenzertifikat der &lt;em&gt;CA&lt;/em&gt; getrennt ausliefern:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;VirtualHost *:443&amp;gt;
    [...]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/domain.example/cert.pem
    SSLCertificateChainFile /etc/letsencrypt/live/domain.example/chain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain.example/privkey.pem
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&quot;zertifikate-erneuern&quot;&gt;Zertifikate erneuern&lt;/h4&gt;

&lt;p&gt;Folgender &lt;em&gt;Cronjob&lt;/em&gt; prüft täglich um 4 Uhr morgens, ob ein Zertifikat erneuert werden muss, und nimmt diese Erneuerung automatisch vor, wenn sich der Ablaufzeitpunkt nähert:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;00 4 * * * letsencrypt renew --keep-until-expiring
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;weiterer-lesestoff&quot;&gt;Weiterer Lesestoff&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt;: &lt;a href=&quot;https://letsencrypt.org/getting-started/&quot; title=&quot;Getting Started -  Let&amp;#39;s Encrypt&quot;&gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Wouter Verhelst im &lt;em&gt;WEBlog — Wouter’s Eclectic Blog&lt;/em&gt;: &lt;a href=&quot;http://grep.be/blog//en/computer/play/Playing_with_Letsencrypt/&quot; title=&quot;301 Moved Permanently&quot;&gt;Playing with Letsencrypt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Matthias Gutjahr im &lt;em&gt;Sperrobjekt Weblog&lt;/em&gt;: &lt;a href=&quot;http://blog.sperrobjekt.de/content/1000480-Lets-Encrypt-Zertifikate-manuell-erzeugen.html&quot; title=&quot;&quot;&gt;&lt;em&gt;Let&amp;#8217;s Encrypt&lt;/em&gt;-Zertifikate manuell erzeugen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dirk Deimeke in &lt;em&gt;Dirks Logbuch&lt;/em&gt;: &lt;a href=&quot;http://www.deimeke.net/dirk/blog/index.php?/archives/3681-Lets-Encrypt-....html&quot; title=&quot;302 Found&quot;&gt;Let&amp;#8217;s Encrypt &amp;#8230;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/051a5cf219b94e51bbfd314bc7089125&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 11 Apr 2016 07:00:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1903-guid.html</guid>
    <category>anleitung</category>
<category>apache</category>
<category>debian</category>
<category>jessie</category>
<category>ssl</category>

</item>
<item>
    <title>Debian 8.0 &quot;Jessie&quot; released</title>
    <link>https://netz-rettung-recht.de/archives/1849-Debian-8.0-Jessie-released.html</link>
            <category>Netzleben</category>
    
    <comments>https://netz-rettung-recht.de/archives/1849-Debian-8.0-Jessie-released.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1849</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1849</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Am Wochenende wurde, wie &lt;a href=&quot;https://netz-rettung-recht.de/archives/1836-Debian-Jessie-Release-Ende-April-2015-geplant.html&quot; title=&quot;&quot;&gt;angekündigt&lt;/a&gt;, nach knapp zwei Jahren Entwicklungszeit die aktuelle stabile Version 8.0 der GNU/Linux-Distribution &lt;em&gt;Debian&lt;/em&gt; mit dem Codenamen &lt;em&gt;Jessie&lt;/em&gt; &lt;a href=&quot;https://www.debian.org/News/2015/20150426.en.html&quot; title=&quot;302 Found&quot;&gt;veröffentlicht&lt;/a&gt;. Voraussichtlich wird die bisherigen Version &lt;em&gt;Wheezy&lt;/em&gt; wiederum im Rahmen des &lt;em&gt;LTS&lt;/em&gt;-Projekts noch weitere drei Jahre mit Sicherheitsupdates versorgt werden.&lt;/p&gt;

&lt;p&gt;Mehr dazu bei:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.hommel-net.de/archives/338-Debian-8-erschienen.html&quot; title=&quot;301 Moved Permanently&quot;&gt;Mario&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.deimeke.net/dirk/blog/index.php?/archives/3549-Willkommen-Debian-Jessie-....html&quot; title=&quot;302 Found&quot;&gt;Dirk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
 
    </content:encoded>

    <pubDate>Mon, 27 Apr 2015 20:15:41 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1849-guid.html</guid>
    <category>debian</category>
<category>jessie</category>

</item>

</channel>
</rss>
