ubuntuusers.de

Let's Encrypt Installationsprobleme Apache 2.4

Status: Gelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

VolkerRaschek

Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

sebix schrieb:

karpfensami schrieb:

DNS-Link: wunschname.ddns.net/prestashop.de

Also kein eigenes Zertifikat hier.

Es sollte trotzdem möglich sein der Domain wunschname.ddns.net ein Zertifikat erstellen zu lassen.

PS: Wie kann ich hier im Forum die Zeilenumbrüche machen?

Einen Absatz kannst du mit einer Leerzeile einfuegen. Zum Erstellen von Listen den Button im Editor klicken.

Das wusste ich auch nicht.

Nun gut, ich versuche mal alles mal wieder in einer Schritt für Schritt Anleitung fest zu halten unter Restriktion das wunschname.ddns.net deine Domain ist für alle Projekte.

Anmelden als root und wechseln ins Heimatverzeichnis

sudo -i
cd ~

getssl vorbereiten

Herunterladen von getssl

git clone https://github.com/srvrco/getssl.git

Verschieben von getssl nach /etc/getssl

mv ~/getssl /etc

Domain anlegen registrieren bei getssl um config templates erstellen zu lassen

/etc/getssl/getssl -c wunschname.ddns.net

getssl config für wunschname.ddns.net anpassen

nano ~/.getssl/wunschname.ddns.net/getssl.cfg

Beispielvorlage für wunschname.ddns.net in ~/.getssl/wunschname.ddns.net/getssl.cfg

# Uncomment and modify any variables you need
# see https://github.com/srvrco/getssl/wiki/Config-variables for details
#
# The staging server is best for testing
#CA="https://acme-staging.api.letsencrypt.org"
# This server issues full certificates, however has rate limits
CA="https://acme-v01.api.letsencrypt.org"

#AGREEMENT="https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf"

# Set an email address associated with your account - generally set at account level rather than domain.
ACCOUNT_EMAIL="webmaster@wunschname.ddns.net"
ACCOUNT_KEY_LENGTH=4096
ACCOUNT_KEY="/etc/ssl/private/ca/ca.key"
PRIVATE_KEY_ALG="rsa"

# Additional domains - this could be multiple domains / subdomains in a comma separated list
# Note: this is Additional domains - so should not include the primary domain.
# SANS=

# Acme Challenge Location. The first line for the domain, the following ones for each additional domain.
# If these start with ssh: then the next variable is assumed to be the hostname and the rest the location.
# An ssh key will be needed to provide you with access to the remote server.
# If these start with ftp: then the next variables are ftpuserid:ftppassword:servername:ACL_location
# These should be of the form "/path/to/your/website/folder/.well-known/acme-challenge"
# where "/path/to/your/website/folder/" is the path, on your web server, to the web root for your domain.
#ACL=('/var/www/cryptic.systems/web/.well-known/acme-challenge'
#     'ssh:server5:/var/www/cryptic.systems/web/.well-known/acme-challenge'
#     'ftp:ftpuserid:ftppassword:cryptic.systems:/web/.well-known/acme-challenge')
ACL=('/var/www/letsencrypt/.well-known/acme-challenge')

#Enable use of a single ACL for all checks
USE_SINGLE_ACL="true"

# Location for all your certs, these can either be on the server (so full path name) or using ssh as for the ACL
DOMAIN_CERT_LOCATION="/etc/ssl/public/wunschname.ddns.net/domain.crt"
DOMAIN_KEY_LOCATION="/etc/ssl/private/wunschname.ddns.net/domain.key"
CA_CERT_LOCATION="/etc/ssl/public/wunschname.ddns.net/chain.crt"
#DOMAIN_CHAIN_LOCATION="" # this is the domain cert and CA cert
#DOMAIN_KEY_CERT_LOCATION="" # this is the domain_key and domain cert
#DOMAIN_PEM_LOCATION="" # this is the domain_key. domain cert and CA cert

# The command needed to reload apache / nginx or whatever you use
RELOAD_CMD="service apache2 reload"
# The time period within which you want to allow renewal of a certificate
#  this prevents hitting some of the rate limits.
RENEW_ALLOW="30"

# Define the server type. This can be https, ftp, ftpi, imap, imaps, pop3, pop3s, smtp,
# smtps_deprecated, smtps, smtp_submission, xmpp, xmpps, ldaps or a port number which
# will be checked for certificate expiry and also will be checked after
# an update to confirm correct certificate is running (if CHECK_REMOTE) is set to true
#SERVER_TYPE="https"
#CHECK_REMOTE="true"

# Use the following 3 variables if you want to validate via DNS
#VALIDATE_VIA_DNS="true"
#DNS_ADD_COMMAND=
#DNS_DEL_COMMAND=
#AUTH_DNS_SERVER=""
#DNS_WAIT=10
#DNS_EXTRA_WAIT=60

Anlegen der SSL-Verzeichnisstruktur

mkdir /etc/ssl/private/wunschname.ddns.net -p
mkdir /etc/ssl/private/ca -p
mkdir /etc/ssl/public/wunschname.ddns.net -p

.well-known Verzeichnisstruktur anlegen

mkdir /var/www/letsencrypt/.well-known/acme-challenge -p

.well-known als Alias in Apache config setzen

mkdir /etc/apache2/conf-available/ -p
touch /etc/apache2/conf-available/letsencrypt.conf
echo "Alias /.well-known /var/www/letsencrypt/.well-known" > /etc/apache2/conf-available/letsencrypt.conf

Config letsencrypt aktivieren unter Apache2

a2enconf letsencrypt

SSL und Rewrite Modul aktivieren

a2enmod ssl
a2enmod rewrite

Apache2 neustarten

service apache2 restart

SSL Zertifikate erstellen lassen

/etc/getssl/getssl -f wunschname.ddns.net

Deine Zertifikate im Überblick nach registrierung

ca.key       /etc/ssl/private/ca/ca.key

domain.key   /etc/ssl/private/wunschname.ddns.net/domain.key
domain.crt   /etc/ssl/public/wunschname.ddns.net/domain.crt
chain.crt    /etc/ssl/public/wunschname.ddns.net/chain.crt

Zertifikate regelmäßig automatisch updaten durch cronjob.

crontab -e -u root

Diese Zeile am ende einfügen

# Zertifikate updaten
        0       0       *       *       *       /etc/getssl/getssl -a -q

Apache2 vHosts vorbereiten Ich bin mir nicht genau sicher was du da genau für vHosts unter /etc/apache/sites-enabled aktiviert hast. Ich gehe einfach mal davon aus, dass alle deaktiviert sind (a2dissite *), um nun eine vHost Datei zu erstellen mit dem Direktory (/var/www/html/Projekt), diese zu aktivieren sodass du später deine Projekte unter wunschname.ddns.net/Projekt findest.

vHost-Datei mit dem namen www.conf unter /etc/apache2/sites-avaliable/www.conf

<VirtualHost *:80>
        # Server Details
        ServerName      wunschname.ddns.net
        ServerAlias     wunschname.ddns.net
        ServerAdmin     webmaster@wunschname.ddns.net

        # Wurzelverzeichnis und deren Einstellungen
        DocumentRoot /var/www/html
        <Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                #Deny from all
                Allow from all
        </Directory>

        # Logs
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # Umleiten auf HTTPS
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
	# Server Details
        ServerName      wunschname.ddns.net
        ServerAlias     wunschname.ddns.net
        ServerAdmin     webmaster@wunschname.ddns.net


	# SSLEngine aktivieren (Dafür muss das Modul ssl aktiviert sein, a2enmod ssl)
	#  Um Generelle SSL Optionen einstellen zu können. Diese SSL Optionen sind gültig für die Verbindung zwischen Client und Server.
	SSLEngine		on
	
	# SSLCertificateFile
	#  Pfadangabe der Zertifikatsdatei. Das Zertifikat beinhaltet die Signatur der Certificate Authority (CA) als Gültigkeitsnachweis.
        SSLCertificateFile      /etc/ssl/public/wunschname.ddns.net/domain.crt

        # SSLCertificateKeyFile
	#  Pfadangabe des Privatekeys.
        SSLCertificateKeyFile   /etc/ssl/private/wunschname.ddns.net/domain.key

        # SSLCertificateKeyFile
	#  Pfadangabe des Root-Bundles. Das Root-Bundle ist das Zertifikat der (CA). Es muss angegeben werden, damit der Client unter Angabe
	#  des Signierten Zertifkates seine eigene Prüfsumme bilden kann um der Seite das vertrauen aus zu sprechen.
        SSLCertificateChainFile /etc/ssl/public/wunschname.ddns.net/chain.crt

	# SSLProtocol
	#  Legt fest, welcher SSL-Version genutzt werden soll zwischen Client und Server.
	SSLProtocol             all -SSLv2 -SSLv3

	# SSLCipherSuite
        #  Gibt die CiperSuite an, den Algorythmus, mit dem eine SSL-Verbindung zwischen Client und Server aufgebaut werden soll.
        SSLCipherSuite     	ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS

	# SSLHonorCipherOrder 
	#  Wenn SSLHonorCipherOrder aktiviert ist (on), kann der Client keine CiperSuite vorgeben, die beim Aufbau der SSL Verbindung genutzt werden soll.
	#  Der Server gibt indemfall die CiperSuite vor.
	SSLHonorCipherOrder 	on 

	
	# HTTP Strict-Transport-Security
	#  Den Client anweisen, in Zukunft direkt per SSL eine Verbindung auf zu bauen, sodass die RewriteRule nicht gebraucht wird.
	Header always set Strict-Transport-Security "max-age=31536000;"


	# Wurzelverzeichnis und deren Einstellungen
        DocumentRoot /var/www/html
        <Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                #Deny from all
                Allow from all
        </Directory>
	

	# Logs
        ErrorLog ${APACHE_LOG_DIR}/ssl_error.log
        CustomLog ${APACHE_LOG_DIR}/ssl_access.log 	combined

</VirtualHost>

www.conf in Apache2 aktivieren

a2ensite nextcloud

Änderungen neu einlesen lassen von Apache

service apache2 reload

karpfensami

(Themenstarter)

Anmeldungsdatum:
13. Mai 2016

Beiträge: 47

Hallo Volker, vielen DANK für deine Mühe wieder eine Schritt für Schritt Anleitung.

Leider hänge ich bereits wieder bei:

mv ~/getssl /etc:

mv: das Verschieben von '/root/getssl' nach '/etc/getssl' ist nicht möglich: Das Verzeichnis ist nicht leer

Gruß Christoph

PS: Was ist eigentlich der Unterschie sudo -s und sudo -i?

VolkerRaschek

Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Hallo Christoph, dann versuch es mal mit der -R (Rekursiv) option

mv ~/getssl /etc -R

karpfensami

(Themenstarter)

Anmeldungsdatum:
13. Mai 2016

Beiträge: 47

Danke Volker! Wir sind fast am Ziel!

Nun habe ich das Problem, dass sich die /etc/apache2/sites-avaliable/www.conf nicht beschreiben lässt.

Gruß Christoph

karpfensami

(Themenstarter)

Anmeldungsdatum:
13. Mai 2016

Beiträge: 47

Hallo Volker, habe die Datei jetzt manuell erstellt und bis zum Schluss deine Anleitung verfolgt.

Wie weiß ich jetzt eigentlich, ob das SSL Zertifikat funktioniert? Ist das wenn das Schloß grün ist und nicht mehr gelb/organge?

Gruß Christoph

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

karpfensami schrieb:

Wie weiß ich jetzt eigentlich, ob das SSL Zertifikat funktioniert? Ist das wenn das Schloß grün ist und nicht mehr gelb/organge?

Mache einfach einen SSL-Test. Einfach deine Domain angeben und fertig.

karpfensami

(Themenstarter)

Anmeldungsdatum:
13. Mai 2016

Beiträge: 47

Danke für den Link!

SSL - Funktioniert leider nicht. Warum weiß ich nicht.

Hier ein paar Bilder vom Test.

Gruß Christoph

Bilder

VolkerRaschek

Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Dein Screenshot Bild_0002 zeigt, dass du den CommonName ubuntu.home im Zertifikat verwendest. Ich glaube nicht das dieser mit deinem DynDNS Namen oder deine Domain übereinstimmt.

Du musst bei dem Zertifikat exakt den gleichen Namen wie deine Domain bzw. deiner DynDNS Adresse angeben. Das Zertifikat wird als unvertraut gekennzeichnet wenn du versuchst mittels localhost oder ubuntu.home darauf zu verbinden, der Server wird dir aber eins anbietet mit wunschname.ddns.net und das passt eben nicht mit localhost der ubuntu.home überein.

Damit das richtig funktioniert musst du auch deine Seite unter der richtigen Domainname im Browser aufrufen für das auch das Zertifikat ausgestellt wurde.

Wenn alles richtig eingestellt ist sollte der Firefox Browser in der Adresszeile ein grünes Schloss anzeigen, siehe Screenshot von forum.ubuntuusers.de.

Volker

EDIT: Irgendwie zeigt der Beitrag nicht meine Anhänge an.

Bilder

karpfensami

(Themenstarter)

Anmeldungsdatum:
13. Mai 2016

Beiträge: 47

Hallo Volker, ich rufe die Seite unter https://wunschname.ddns.net/nextcloud auf. Wenn ich http:// eingebe merkert gleich die Cloud, das ich nicht über https:// mich einlogge bzw. der Server von http auf https weiterleitet. Gut mit dem kann ich leben.

Jetzt habe ich gar keinen Durchblick mehr. Wäre es besser ich setze das komplette System neu auf?

Gruß Christoph

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

karpfensami schrieb:

ich rufe die Seite unter https://wunschname.ddns.net/nextcloud auf.

Das ist egal. Es wird das falsche Zertifikat ausgeliefert. Das hast du also nicht angepasst, oder du hast noch einen Fehler gemacht. Wie sieht jetzt deine konkrete VHost-Konfiguration aus?

VolkerRaschek

Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

misterunknown schrieb:

Das ist egal. Es wird das falsche Zertifikat ausgeliefert. Das hast du also nicht angepasst, oder du hast noch einen Fehler gemacht. Wie sieht jetzt deine konkrete VHost-Konfiguration aus?

Die würde mich auch interessieren. Hast du die Anleitung befolgt, dann müssten die Zertifikate unter /etc/ssl liegen. Bitte führe mal diese Befehle aus und poste mal die Ausgabe.

ls -la /etc/ssl/private/ca
ls -la /etc/ssl/private/wunschname.ddns.net
ls -la /etc/ssl/public/wunschname.ddns.net

Volker

karpfensami

(Themenstarter)

Anmeldungsdatum:
13. Mai 2016

Beiträge: 47

Hallo Volker, vorerst, vielen DANK für deine Gedult. Ja, die Anleitung hätte ich genauso verfolgt.

Hier die Auslesungen.

ls -la /etc/ssl/private/ca:

insgesamt 12
drwxr-xr-x 2 root root     4096 Okt 16 16:37 .
drwx--x--- 5 root ssl-cert 4096 Okt 16 16:35 ..
-rw-r--r-- 1 root root     3243 Okt 16 16:37 ca.key

Okay, anscheinend doch nicht. ls -la /etc/ssl/private/wunschname.ddns.net und ls -la /etc/ssl/public/wunschname.ddns.net ist nicht vorhanden.

Schäm!

Werde ich morgen ergänzen.

Gruß Christoph

karpfensami

(Themenstarter)

Anmeldungsdatum:
13. Mai 2016

Beiträge: 47

Hallo Volker, habe Ubuntu neu aufgesetzt, weil ich mir System zerschossen habe.

Bin jetzt alles nochmals Schritt für Schritt durchgegangen und habe beim Abschluss jetzt ein Problem mit Apache.

Änderungen neu einlesen lassen von Apache

service apache2 reload

Hier bekomme ich jetzt folgende Fehlermeldung:

Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details.

systemctl status apache2.service:

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) (Result: exit-code) since Mit 2016-10-19 08:32:46 CE
     Docs: man:systemd-sysv-generator(8)
  Process: 3207 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS
  Process: 3659 ExecReload=/etc/init.d/apache2 reload (code=exited, status=1/FAI
  Process: 3231 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCE
   CGroup: /system.slice/apache2.service
           ├─3248 /usr/sbin/apache2 -k start
           ├─3251 /usr/sbin/apache2 -k start
           ├─3253 /usr/sbin/apache2 -k start
           ├─3254 /usr/sbin/apache2 -k start
           ├─3255 /usr/sbin/apache2 -k start
           ├─3259 /usr/sbin/apache2 -k start
           ├─3266 /usr/sbin/apache2 -k start
           ├─3267 /usr/sbin/apache2 -k start
           ├─3268 /usr/sbin/apache2 -k start
           ├─3371 /usr/sbin/apache2 -k start
           └─3677 /usr/sbin/apache2 -k start

Okt 19 08:43:16 Nextcloud apache2[3659]:  * Reloading Apache httpd web server 
Okt 19 08:43:16 Nextcloud apache2[3659]:  *
Okt 19 08:43:16 Nextcloud apache2[3659]:  * The apache2 configtest failed. Not
Okt 19 08:43:16 Nextcloud apache2[3659]: Output of config test was:
Okt 19 08:43:16 Nextcloud apache2[3659]: AH00526: Syntax error on line 40 of /
Okt 19 08:43:16 Nextcloud apache2[3659]: SSLCertificateFile: file '/etc/ssl/pu
Okt 19 08:43:16 Nextcloud apache2[3659]: Action 'configtest' failed.
Okt 19 08:43:16 Nextcloud apache2[3659]: The Apache error log may have more in
Okt 19 08:43:16 Nextcloud systemd[1]: apache2.service: Control process exited,
Okt 19 08:43:16 Nextcloud systemd[1]: Reload failed for LSB: Apache2 web serve
lines 10-32/32 (END)

Vielleicht kannst Du mir hier dabei weiterhelfen.

Vielen Dank im Voraus!

Gruß Christoph

VolkerRaschek

Avatar von VolkerRaschek

Anmeldungsdatum:
19. August 2014

Beiträge: 358

Wohnort: Eifel

Hallo Christoph, die vHost Datei beinhaltet einen SSL Block. Diesen hast du durch meine Anleitung aktiviert. Es hat nichts damit zu tun ob nextcloud oder dein shop per SSL läuft, dein ganzer Server verwendet nach Anleitung alles per SSL bzw. alle Seiten unter /var/www/html ist dazu fähig, per SSL aufgerufen zu werden.

Okt 19 08:43:16 Nextcloud apache2[3659]: SSLCertificateFile: file '/etc/ssl/pu

Man kann auch einfach den ganzen log ausgeben lassen. Entweder das syslog oder die eigenen Logfiles von Apache.

tailf /var/log/syslog -n 100
tailf /var/log/apache2/error.log

Deine Fehlermeldung allerdings sagt, dass der die Zertifikate nicht findet oder ein anderes Problem besteht mit der die SSL Verbindung aufgebaut werden soll. Du musst let's encrypt neu konfigurieren nach Anleitung, wenn du das gemacht hast sollten diese Befehle dir folgende Dateien anzeigen, ca.key, domain.key, domain.crt und chain.crt

ls -la /etc/ssl/private/ca
ls -la /etc/ssl/private/wunschname.ddns.net
ls -la /etc/ssl/public/wunschname.ddns.net

Solange du diese Dateien nicht hast, kannst du keine SSL Verbindung aufbauen.

karpfensami

(Themenstarter)

Anmeldungsdatum:
13. Mai 2016

Beiträge: 47

Hallo Volker, vielen Dank für die Info.

Da hast Du Recht, die 3 Dateien die angelegt werden sollten werden nicht erstellt. Warum weiß ich nicht.

Liegt dies vielleicht an Berechtigung?

Gruß Christoph