Im vierten Teil meiner Artikelserie wollen wir uns mit dem Webserver Apache und Let’s Encrypt beschäftigen.
Der Apache HTTP Server ist ein quelloffenes und freies Produkt der Apache Software Foundation und der meistbenutzte Webserver im Internet. Let’s Encrypt ist eine freie, automatische und offene Zertifizierungsstelle (CA) für Webseitenzertifikate, betrieben durch die Internet Security Research Group (ISRG). Mit diesen beiden Komponenten wollen wir eine Webpage aufsetzen, die ihre Inhalte verschlüsselt mit Hilfe des HyperText Transfer Protocol Secure (HTTPS) ausliefert.
Apache
Wenden wir uns zunächst dem HTTP Server Apache zu. Mit dem folgenden Kommando überprüfen wir welche Apache Version installiert ist.
1 | dpkg -l | grep apache |
Wir erhalten folgende Ausgabe:
1 2 3 4 5 6 | ii apache2 2.4.18-2ubuntu3.1 amd64 Apache HTTP Server ii apache2-bin 2.4.18-2ubuntu3.1 amd64 Apache HTTP Server (modules and other binary files) ii apache2-data 2.4.18-2ubuntu3.1 all Apache HTTP Server (common files) ii apache2-utils 2.4.18-2ubuntu3.1 amd64 Apache HTTP Server (utility programs for web servers) ii libapache2-mod-php 1:7.0+35ubuntu6 all server-side, HTML-embedded scripting language (Apache 2 module) (default) ii libapache2-mod-php7.0 7.0.8-0ubuntu0.16.04.2 amd64 server-side, HTML-embedded scripting language (Apache 2 module) |
Wie das Paketlisting zeigt, ist der Apache in der Version 2.4.7 bereits installiert. Deshalb überprüfen wir, ob der Apache auch schon läuft.
Das Kommando systemctl status apache2 zeigt uns folgende Ausgabe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Wed 2016-09-07 14:59:44 UTC; 3h 11min ago Docs: man:systemd-sysv-generator(8) CGroup: /system.slice/apache2.service ├─3240 /usr/sbin/apache2 -k start ├─3255 /usr/sbin/apache2 -k start ├─3256 /usr/sbin/apache2 -k start ├─3257 /usr/sbin/apache2 -k start ├─3258 /usr/sbin/apache2 -k start ├─3259 /usr/sbin/apache2 -k start ├─3554 /usr/sbin/apache2 -k start ├─3555 /usr/sbin/apache2 -k start └─3556 /usr/sbin/apache2 -k start Sep 07 14:59:42 public1.emrich-ebersheim.de systemd[1]: Starting LSB: Apache2 web server... Sep 07 14:59:42 public1.emrich-ebersheim.de apache2[3181]: * Starting Apache httpd web server apache2 Sep 07 14:59:44 public1.emrich-ebersheim.de apache2[3181]: * Sep 07 14:59:44 public1.emrich-ebersheim.de systemd[1]: Started LSB: Apache2 web server. |
Ja, der HTTP Server läuft bereits. Nun öffnen wir eine Webbrowser und geben unsere Domain in die Adresszeile ein. Tatsächlich der Server läuft bereits und gibt die Apache2 Ubuntu Default Page aus.
Die Seite enthält nützliche Informationen über das Konfigurationslayout und die Verwaltung des Webservers.
Danach werfen wir mit dem Kommando ls -l /etc/apache2/ einen Blick in das Konfigurationsverzeichnis:
1 2 3 4 5 6 7 8 9 10 11 | total 80 -rw-r--r-- 1 root root 7115 Mar 19 09:48 apache2.conf drwxr-xr-x 2 root root 4096 Aug 31 08:34 conf-available drwxr-xr-x 2 root root 4096 Aug 31 08:34 conf-enabled -rw-r--r-- 1 root root 1782 Mar 19 09:48 envvars -rw-r--r-- 1 root root 31063 Mar 19 09:48 magic drwxr-xr-x 2 root root 12288 Aug 31 08:34 mods-available drwxr-xr-x 2 root root 4096 Aug 31 08:34 mods-enabled -rw-r--r-- 1 root root 320 Mar 19 09:48 ports.conf drwxr-xr-x 2 root root 4096 Aug 31 08:34 sites-available drwxr-xr-x 2 root root 4096 Aug 31 08:34 sites-enabled |
Die Verzeichnisse conf-, mods- bzw. sites-available enthalten die vorhandenen Konfigurationen, Module bzw. Webseiten. Das Aktivieren und Deaktivieren von Konfigurationen, Modulen und Webseiten erfolgt mit den Kommandos a2enconf, a2disconf, a2enmod, a2dismod, a2ensite und a2dissite. Durch das Aktivieren werden logical links in den *-enabled Verzeichnissen angelegt, die auf die entsprechenden Einträge in den *-available Verzeichnissen verweisen. Beim Deaktivieren werden diese logical links wieder gelöscht.
Nun schauen wir uns das Verzeichnis sites-enabled an:
1 | ls -l /etc/apache2/sites-enabled/ |
1 2 | total 0 lrwxrwxrwx 1 root root 35 Aug 31 08:34 000-default.conf -> ../sites-available/000-default.conf |
Dies ist die Konfiguration für die Apache2 Ubuntu Default Page.
Im Verzeichnis sites-available finden wir zusätzlich eine Konfiguration für eine default HTTPS Seite:
1 | ls -l /etc/apache2/sites-available/ |
1 2 3 | total 12 -rw-r--r-- 1 root root 1332 Mar 19 09:48 000-default.conf -rw-r--r-- 1 root root 6338 Apr 5 21:15 default-ssl.conf |
Wir bearbeiten beide Dateien und ersetzen die E-Mail-Adresse des ServerAdmin in der Zeile ServerAdmin webmaster@example.com mit unserer Webmaster E-Mail-Adresse.
Anschließend müssen wir noch dafür sorgen, dass der Apache die Änderungen der Konfiguration übernimmt. Dies erreichen wir mit dem folgenden Befehl:
1 | systemctl restart apache2 |
Let’s Encrypt
Okay, nun wollen wir uns zunächst Let’s Encrypt zuwenden. Um die gewünschten Zertifikate zu erhalten und zu verwalten müssen wir einen Let’s Encrypt Client installieren. Der empfohlene Let’s Encrypt Client ist Certbot, siehe auch die Let’s Encrypt Getting Started Seite.
Für unsere Kombination HTTP-Server Apache unter Ubuntu 16.04 gibt es ein fertiges Software Paket, siehe die entsprechende Certbot Seite. Die vollständige Dokumentation für den Certbot finden wir hier.
Zunächst installieren wir das Certbot Paket und das Certbot Dokumentationspaket:
1 | apt-get install python-letsencrypt-apache python-letsencrypt-doc |
Hier die Konsolenausgabe der Installation:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 | Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: augeas-lenses dialog fonts-font-awesome fonts-lato javascript-common letsencrypt libaugeas0 libjs-jquery libjs-modernizr libjs-sphinxdoc libjs-underscore python-acme python-augeas python-cffi-backend python-chardet python-configargparse python-configobj python-cryptography python-dialog python-enum34 python-funcsigs python-idna python-ipaddress python-letsencrypt python-mock python-ndg-httpsclient python-openssl python-parsedatetime python-pbr python-pkg-resources python-psutil python-pyasn1 python-pyicu python-requests python-rfc3339 python-six python-tz python-urllib3 python-zope.component python-zope.event python-zope.hookable python-zope.interface sphinx-rtd-theme-common Suggested packages: augeas-doc augeas-tools python-configobj-doc python-cryptography-doc python-cryptography-vectors python-enum34-doc python-funcsigs-doc python-mock-doc python-openssl-doc python-openssl-dbg python-setuptools python-psutil-doc doc-base python-ntlm The following NEW packages will be installed: augeas-lenses dialog fonts-font-awesome fonts-lato javascript-common letsencrypt libaugeas0 libjs-jquery libjs-modernizr libjs-sphinxdoc libjs-underscore python-acme python-augeas python-cffi-backend python-chardet python-configargparse python-configobj python-cryptography python-dialog python-enum34 python-funcsigs python-idna python-ipaddress python-letsencrypt python-letsencrypt-apache python-letsencrypt-doc python-mock python-ndg-httpsclient python-openssl python-parsedatetime python-pbr python-pkg-resources python-psutil python-pyasn1 python-pyicu python-requests python-rfc3339 python-six python-tz python-urllib3 python-zope.component python-zope.event python-zope.hookable python-zope.interface sphinx-rtd-theme-common 0 upgraded, 45 newly installed, 0 to remove and 0 not upgraded. Need to get 6,273 kB of archives. After this operation, 30.3 MB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 fonts-lato all 2.0-1 [2,693 kB] Get:2 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 augeas-lenses all 1.4.0-0ubuntu1 [263 kB] Get:3 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 dialog amd64 1.3-20160209-1 [215 kB] Get:4 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 fonts-font-awesome all 4.5.0~dfsg-1 [506 kB] Get:5 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 javascript-common all 11 [6,066 B] Get:6 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-cffi-backend amd64 1.5.2-1ubuntu1 [58.1 kB] Get:7 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-enum34 all 1.1.2-1 [35.8 kB] Get:8 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-idna all 2.0-3 [35.1 kB] Get:9 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-ipaddress all 1.0.16-1 [18.0 kB] Get:10 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-pkg-resources all 20.7.0-1 [108 kB] Get:11 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-pyasn1 all 0.1.9-1 [45.1 kB] Get:12 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-six all 1.10.0-3 [10.9 kB] Get:13 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-cryptography amd64 1.2.3-1 [198 kB] Get:14 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-openssl all 0.15.1-2build1 [84.1 kB] Get:15 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-funcsigs all 0.4-2 [12.6 kB] Get:16 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-pbr all 1.8.0-4ubuntu1 [46.6 kB] Get:17 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-mock all 1.3.0-2.1ubuntu1 [46.5 kB] Get:18 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-ndg-httpsclient all 0.4.0-3 [25.1 kB] Get:19 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 python-urllib3 all 1.13.1-2ubuntu0.16.04.1 [57.2 kB] Get:20 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-chardet all 2.3.0-2 [96.3 kB] Get:21 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-requests all 2.9.1-3 [55.6 kB] Get:22 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-tz all 2014.10~dfsg1-0ubuntu2 [31.5 kB] Get:23 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 python-rfc3339 all 1.0-4 [6,290 B] Get:24 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 python-acme all 0.4.1-1 [57.0 kB] Get:25 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 python-configargparse all 0.10.0-2 [20.2 kB] Get:26 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-configobj all 5.0.6-2 [34.2 kB] Get:27 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 python-dialog amd64 3.3.0-2 [65.4 kB] Get:28 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-parsedatetime all 1.4-1 [37.6 kB] Get:29 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-psutil amd64 3.4.2-1 [55.2 kB] Get:30 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 python-zope.event all 4.2.0-1 [7,412 B] Get:31 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-zope.interface amd64 4.1.3-1build1 [81.0 kB] Get:32 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 python-zope.hookable amd64 4.0.4-4build2 [9,172 B] Get:33 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 python-zope.component all 4.2.2-1 [38.5 kB] Get:34 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 python-letsencrypt all 0.4.1-1 [129 kB] Get:35 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 letsencrypt all 0.4.1-1 [10.9 kB] Get:36 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libaugeas0 amd64 1.4.0-0ubuntu1 [154 kB] Get:37 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libjs-jquery all 1.11.3+dfsg-4 [161 kB] Get:38 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libjs-underscore all 1.7.0~dfsg-1ubuntu1 [46.7 kB] Get:39 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libjs-sphinxdoc all 1.3.6-2ubuntu1 [57.5 kB] Get:40 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 python-augeas all 0.5.0-1 [9,204 B] Get:41 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 python-letsencrypt-apache all 0.4.1-1 [44.9 kB] Get:42 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libjs-modernizr all 2.6.2+ds1-1ubuntu1 [46.7 kB] Get:43 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 sphinx-rtd-theme-common all 0.1.9-1 [210 kB] Get:44 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 python-letsencrypt-doc all 0.4.1-1 [165 kB] Get:45 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 python-pyicu amd64 1.9.2-2build1 [179 kB] Fetched 6,273 kB in 2s (2,649 kB/s) Extracting templates from packages: 100% Selecting previously unselected package fonts-lato. (Reading database ... 93403 files and directories currently installed.) Preparing to unpack .../fonts-lato_2.0-1_all.deb ... Unpacking fonts-lato (2.0-1) ... Selecting previously unselected package augeas-lenses. Preparing to unpack .../augeas-lenses_1.4.0-0ubuntu1_all.deb ... Unpacking augeas-lenses (1.4.0-0ubuntu1) ... Selecting previously unselected package dialog. Preparing to unpack .../dialog_1.3-20160209-1_amd64.deb ... Unpacking dialog (1.3-20160209-1) ... Selecting previously unselected package fonts-font-awesome. Preparing to unpack .../fonts-font-awesome_4.5.0~dfsg-1_all.deb ... Unpacking fonts-font-awesome (4.5.0~dfsg-1) ... Selecting previously unselected package javascript-common. Preparing to unpack .../javascript-common_11_all.deb ... Unpacking javascript-common (11) ... Selecting previously unselected package python-cffi-backend. Preparing to unpack .../python-cffi-backend_1.5.2-1ubuntu1_amd64.deb ... Unpacking python-cffi-backend (1.5.2-1ubuntu1) ... Selecting previously unselected package python-enum34. Preparing to unpack .../python-enum34_1.1.2-1_all.deb ... Unpacking python-enum34 (1.1.2-1) ... Selecting previously unselected package python-idna. Preparing to unpack .../python-idna_2.0-3_all.deb ... Unpacking python-idna (2.0-3) ... Selecting previously unselected package python-ipaddress. Preparing to unpack .../python-ipaddress_1.0.16-1_all.deb ... Unpacking python-ipaddress (1.0.16-1) ... Selecting previously unselected package python-pkg-resources. Preparing to unpack .../python-pkg-resources_20.7.0-1_all.deb ... Unpacking python-pkg-resources (20.7.0-1) ... Selecting previously unselected package python-pyasn1. Preparing to unpack .../python-pyasn1_0.1.9-1_all.deb ... Unpacking python-pyasn1 (0.1.9-1) ... Selecting previously unselected package python-six. Preparing to unpack .../python-six_1.10.0-3_all.deb ... Unpacking python-six (1.10.0-3) ... Selecting previously unselected package python-cryptography. Preparing to unpack .../python-cryptography_1.2.3-1_amd64.deb ... Unpacking python-cryptography (1.2.3-1) ... Selecting previously unselected package python-openssl. Preparing to unpack .../python-openssl_0.15.1-2build1_all.deb ... Unpacking python-openssl (0.15.1-2build1) ... Selecting previously unselected package python-funcsigs. Preparing to unpack .../python-funcsigs_0.4-2_all.deb ... Unpacking python-funcsigs (0.4-2) ... Selecting previously unselected package python-pbr. Preparing to unpack .../python-pbr_1.8.0-4ubuntu1_all.deb ... Unpacking python-pbr (1.8.0-4ubuntu1) ... Selecting previously unselected package python-mock. Preparing to unpack .../python-mock_1.3.0-2.1ubuntu1_all.deb ... Unpacking python-mock (1.3.0-2.1ubuntu1) ... Selecting previously unselected package python-ndg-httpsclient. Preparing to unpack .../python-ndg-httpsclient_0.4.0-3_all.deb ... Unpacking python-ndg-httpsclient (0.4.0-3) ... Selecting previously unselected package python-urllib3. Preparing to unpack .../python-urllib3_1.13.1-2ubuntu0.16.04.1_all.deb ... Unpacking python-urllib3 (1.13.1-2ubuntu0.16.04.1) ... Selecting previously unselected package python-chardet. Preparing to unpack .../python-chardet_2.3.0-2_all.deb ... Unpacking python-chardet (2.3.0-2) ... Selecting previously unselected package python-requests. Preparing to unpack .../python-requests_2.9.1-3_all.deb ... Unpacking python-requests (2.9.1-3) ... Selecting previously unselected package python-tz. Preparing to unpack .../python-tz_2014.10~dfsg1-0ubuntu2_all.deb ... Unpacking python-tz (2014.10~dfsg1-0ubuntu2) ... Selecting previously unselected package python-rfc3339. Preparing to unpack .../python-rfc3339_1.0-4_all.deb ... Unpacking python-rfc3339 (1.0-4) ... Selecting previously unselected package python-acme. Preparing to unpack .../python-acme_0.4.1-1_all.deb ... Unpacking python-acme (0.4.1-1) ... Selecting previously unselected package python-configargparse. Preparing to unpack .../python-configargparse_0.10.0-2_all.deb ... Unpacking python-configargparse (0.10.0-2) ... Selecting previously unselected package python-configobj. Preparing to unpack .../python-configobj_5.0.6-2_all.deb ... Unpacking python-configobj (5.0.6-2) ... Selecting previously unselected package python-dialog. Preparing to unpack .../python-dialog_3.3.0-2_amd64.deb ... Unpacking python-dialog (3.3.0-2) ... Selecting previously unselected package python-parsedatetime. Preparing to unpack .../python-parsedatetime_1.4-1_all.deb ... Unpacking python-parsedatetime (1.4-1) ... Selecting previously unselected package python-psutil. Preparing to unpack .../python-psutil_3.4.2-1_amd64.deb ... Unpacking python-psutil (3.4.2-1) ... Selecting previously unselected package python-zope.event. Preparing to unpack .../python-zope.event_4.2.0-1_all.deb ... Unpacking python-zope.event (4.2.0-1) ... Selecting previously unselected package python-zope.interface. Preparing to unpack .../python-zope.interface_4.1.3-1build1_amd64.deb ... Unpacking python-zope.interface (4.1.3-1build1) ... Selecting previously unselected package python-zope.hookable. Preparing to unpack .../python-zope.hookable_4.0.4-4build2_amd64.deb ... Unpacking python-zope.hookable (4.0.4-4build2) ... Selecting previously unselected package python-zope.component. Preparing to unpack .../python-zope.component_4.2.2-1_all.deb ... Unpacking python-zope.component (4.2.2-1) ... Selecting previously unselected package python-letsencrypt. Preparing to unpack .../python-letsencrypt_0.4.1-1_all.deb ... Unpacking python-letsencrypt (0.4.1-1) ... Selecting previously unselected package letsencrypt. Preparing to unpack .../letsencrypt_0.4.1-1_all.deb ... Unpacking letsencrypt (0.4.1-1) ... Selecting previously unselected package libaugeas0. Preparing to unpack .../libaugeas0_1.4.0-0ubuntu1_amd64.deb ... Unpacking libaugeas0 (1.4.0-0ubuntu1) ... Selecting previously unselected package libjs-jquery. Preparing to unpack .../libjs-jquery_1.11.3+dfsg-4_all.deb ... Unpacking libjs-jquery (1.11.3+dfsg-4) ... Selecting previously unselected package libjs-underscore. Preparing to unpack .../libjs-underscore_1.7.0~dfsg-1ubuntu1_all.deb ... Unpacking libjs-underscore (1.7.0~dfsg-1ubuntu1) ... Selecting previously unselected package libjs-sphinxdoc. Preparing to unpack .../libjs-sphinxdoc_1.3.6-2ubuntu1_all.deb ... Unpacking libjs-sphinxdoc (1.3.6-2ubuntu1) ... Selecting previously unselected package python-augeas. Preparing to unpack .../python-augeas_0.5.0-1_all.deb ... Unpacking python-augeas (0.5.0-1) ... Selecting previously unselected package python-letsencrypt-apache. Preparing to unpack .../python-letsencrypt-apache_0.4.1-1_all.deb ... Unpacking python-letsencrypt-apache (0.4.1-1) ... Selecting previously unselected package libjs-modernizr. Preparing to unpack .../libjs-modernizr_2.6.2+ds1-1ubuntu1_all.deb ... Unpacking libjs-modernizr (2.6.2+ds1-1ubuntu1) ... Selecting previously unselected package sphinx-rtd-theme-common. Preparing to unpack .../sphinx-rtd-theme-common_0.1.9-1_all.deb ... Unpacking sphinx-rtd-theme-common (0.1.9-1) ... Selecting previously unselected package python-letsencrypt-doc. Preparing to unpack .../python-letsencrypt-doc_0.4.1-1_all.deb ... Unpacking python-letsencrypt-doc (0.4.1-1) ... Selecting previously unselected package python-pyicu. Preparing to unpack .../python-pyicu_1.9.2-2build1_amd64.deb ... Unpacking python-pyicu (1.9.2-2build1) ... Processing triggers for libc-bin (2.23-0ubuntu3) ... Setting up fonts-lato (2.0-1) ... Setting up augeas-lenses (1.4.0-0ubuntu1) ... Setting up dialog (1.3-20160209-1) ... Setting up fonts-font-awesome (4.5.0~dfsg-1) ... Setting up javascript-common (11) ... apache2_invoke: Enable configuration javascript-common Setting up python-cffi-backend (1.5.2-1ubuntu1) ... Setting up python-enum34 (1.1.2-1) ... Setting up python-idna (2.0-3) ... Setting up python-ipaddress (1.0.16-1) ... Setting up python-pkg-resources (20.7.0-1) ... Setting up python-pyasn1 (0.1.9-1) ... Setting up python-six (1.10.0-3) ... Setting up python-cryptography (1.2.3-1) ... Setting up python-openssl (0.15.1-2build1) ... Setting up python-funcsigs (0.4-2) ... Setting up python-pbr (1.8.0-4ubuntu1) ... update-alternatives: using /usr/bin/python2-pbr to provide /usr/bin/pbr (pbr) in auto mode Setting up python-mock (1.3.0-2.1ubuntu1) ... Setting up python-ndg-httpsclient (0.4.0-3) ... Setting up python-urllib3 (1.13.1-2ubuntu0.16.04.1) ... Setting up python-chardet (2.3.0-2) ... Setting up python-requests (2.9.1-3) ... Setting up python-tz (2014.10~dfsg1-0ubuntu2) ... Setting up python-rfc3339 (1.0-4) ... Setting up python-acme (0.4.1-1) ... Setting up python-configargparse (0.10.0-2) ... Setting up python-configobj (5.0.6-2) ... Setting up python-dialog (3.3.0-2) ... Setting up python-parsedatetime (1.4-1) ... Setting up python-psutil (3.4.2-1) ... Setting up python-zope.event (4.2.0-1) ... Setting up python-zope.interface (4.1.3-1build1) ... Setting up python-zope.hookable (4.0.4-4build2) ... Setting up python-zope.component (4.2.2-1) ... Setting up python-letsencrypt (0.4.1-1) ... Setting up letsencrypt (0.4.1-1) ... Setting up libaugeas0 (1.4.0-0ubuntu1) ... Setting up libjs-jquery (1.11.3+dfsg-4) ... Setting up libjs-underscore (1.7.0~dfsg-1ubuntu1) ... Setting up libjs-sphinxdoc (1.3.6-2ubuntu1) ... Setting up python-augeas (0.5.0-1) ... Setting up python-letsencrypt-apache (0.4.1-1) ... Setting up libjs-modernizr (2.6.2+ds1-1ubuntu1) ... Setting up sphinx-rtd-theme-common (0.1.9-1) ... Setting up python-letsencrypt-doc (0.4.1-1) ... Setting up python-pyicu (1.9.2-2build1) ... Processing triggers for libc-bin (2.23-0ubuntu3) ... |
Nun können wir bereits ein Zertifikat beantragen:
1 | letsencrypt --apache --rsa-key-size 4096 --hsts --uir -d mysubdomain.mydomain.tld |
Dabei sind mysubdomain, mydomain und tld entsprechend unserer gewählten Domäne zu ersetzen. Die Kommandozeilen Option –apache wählt das Apache-plugin und –rsa-key-size setzt die Schlüsselgröße, default ist 2048. Die Option –hsts konfiguriert Strict-Transport-Security Header, die den Browser anweisen immer das HTTPS Protokoll für diese Domäne zu benutzen. Die Option –uir schliesslich erzeugt „Content-Security-Policy: upgrade-insecure-requests“ Header die den Browser anweisen für alle Inhalte der Domän das HTTPS Protokoll zu verwenden.
Das Script startet eine einfache ncurses GUI, zunächst müssen wir für die Erstellung eines Accounts bei Let’S Encrypt unsere E-Mail-Adresse eingeben:
Nachdem wir ein E-Mail-Adresse eingegeben und die Return-Taste gedrückt haben, kommen wir zur nächsten Seite.
Hier müssen wir durch drücken der Return-Taste bestätigen, dass wir mit den Bedingungen einverstanden sind. Danach sehen wir die folgende Seite:
Wir wählen hier die Einstellung Secure und drücken die Return-Taste. Damit ist die Erstellung der Zertifikate und die erste Konfiguration beendet.
Später werden wir uns noch dem Hinweis zum Testen unserer Konfiguration auf der Qualys SSL Labs Seite zuwenden.
Das letsencrypt wrapper script gibt uns zum Abschluss noch ein paar Hinweise:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | IMPORTANT NOTES: - If you lose your account credentials, you can recover through e-mails sent to me@mydomain.org. - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/myserver.mydomain.org/fullchain.pem. Your cert will expire on 2016-12-06. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - Your account credentials have been saved in your Let's Encrypt configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Let's Encrypt so making regular backups of this folder is ideal. - If you like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le |
Den Hinweis zum Backup nehmen wir ernst und nehmen das Let’s Encrypt Konfigurationsverzeichniss in unsere Backupkonfiguration mit auf und führen ein Backup durch.
1 2 | cd /opt/1UND1EU/bin ./ClientTool control.selection.modify -datasource FileSystem -include /etc/letsencrypt |
1 | ./ClientTool control.backup.start -datasource FileSystem |
Die händige Einrichtung einer permanenten Weiterleitung der HTTP Seite auf die HTTPS Seite, wie im 3. Teil der alten Artikelserie beschrieben, können wir uns sparen. Durch Auswahl der Secure Option im Certbot Client bei der Einrichtung des Let’s Encrypt Zertifikats, hat der Certbot Client dies für uns übernommen.
Funktionscheck
Nun starten wir unseren Webbrowser, ich benutze Mozilla Firefox, und geben unsere URL mit http:// prefix in die Adresszeile ein. Die folgende Abbildung zeigt uns unsere Default Seite im Browser.
In der Adresszeile sehen wir zwei Dinge. Erstens, statt http:// prefix steht dort jetzt https://, d.h. die Umleitung funktioniert. Zweitens, Vor der URL wird nun ein ein grünes Schlosssymbol abgebildet. Wenn wir auf das grüne Schlosssymbol klicken, erhalten wir die folgende Information:
Wenn wir dort auf das > Symbol klicken, wird uns der folgende Dialog angezeigt:
Unser Zertifikat ist, wie nicht anders zu erwarten, von Let’s Encrypt verifiziert. Klicken auf den Button Weitere Infomationen startet schliesslich den folgenden Dialog:
Hier können wir uns nun auch Details des Zertifikats ansehen:
Auf dem Details Tab sind noch weitere Details zu sehen, die wir uns hier jetzt nicht anschauen.
Zum Abschluss wollen wir noch das Apache Konfigurationverzeichniss in unser Backup mitaufnehmen. Wir ergänzen das Konfigurationverzeichnis in der Backup Selection List und starten ein Backup:
1 2 | cd /opt/1UND1EU/bin/ ./ClientTool control.selection.modify -datasource FileSystem -include /etc/apache2 |
1 | ./ClientTool control.backup.start -datasource FileSystem |
Im 5. Teil der Artikelserie wollen wir uns noch ein wenig mit den Sicherheitseinstellungen unseres Apache servers und der Konfiguration des Let’s Encrypt Clients beschäftigen und eine automatische Erneuerung unserer Zertifikate einrichten.
Hallo Hr Emrich.
bin in der selben Situation und verfolge ihren sehr gut beschriebenen Block, und hoffe, das ich nicht mehr allzulange auf die Fortsetzung warten muss. 🙂 nur weiter so .
mfg
Danke für die Blumen. Es hat ein wenig gedauert, man muss ja manchmal auch arbeiten ;-), aber jetzt ist der nächste relativ umfangreiche 5. Tail der Serie online.