SSL Zertifikate unter Ubuntu 16.04 erstellen

Aus Nitradopedia
Version vom 8. September 2020, 10:58 Uhr von Nitrado (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Cloud wiki.jpg
Miete dir jetzt deinen eigenen Cloud Server/VPS von nitrado.net

Um seine Webseite mit SSL zu Verschlüsseln benötigt man ein SSL Zertfikat. Da validierte Zertifikate relativ teuer sind gibt es auch eine kostenlose Variante die genauso gut funktioniert und für jeden Besucher auch funktioniert.

Installation und Einrichtung

Um Certbot zu installieren benötigt man Git und natürlich Certbot.

Zuerst solltest ihr euren Server updaten:

sudo apt-get update && sudo apt-get upgrade

Installation von Git:

sudo apt-get install git

Installation von Certbot:

sudo git clone https://github.com/certbot/certbot.git

Aktivieren des SSL Moduls von Apache 2:

sudo a2enmod ssl


Zertifikat anfordern

Um mit Cerbot zu arbeiten muss der Webserver gestoppt werden.

Webserver stoppen

Webserver (NGINX):

sudo /etc/init.d/nginx stop

Webserver (Apache 2):

sudo /etc/init.d/apache2 stop

Zertifikat für eine Sudomain anfordern:

Hinweis: Der folgende Schritt funktioniert nur wenn eine gültige Domain (example.de, example.com) auf die Server IP leitet. Zu empfehlen ist ein Wildcard A-Record auf die IP des Servers.

Wenn der Webserver gestoppt wurde, muss man in den heruntergeladenen Certbot Ordner navigieren. Um ein Zertifikat anzufordern.

cd ~/certbot

Befindet man sich nun im Certbot Verzeichnis kann man nun ein Zertifikat anfordern.

./certbot-auto certonly --standalone -d example.tld

Certbot sollte jetzt automatisch die benötigten Packete anfordern. Gegenbenenfalls muss die Installation der Packete mit "Y" bestätigt werden.

E-Mail eingabe für Benachrichtigungen von Certbot

Certbot versendet eine Benachrichtung an die angegebene E-Mail wenn ein Zertifikat abläuft. Da jedes Zertifikat nur für 3 Monate gültig ist, wird bereits 20 Tage vor ablauf eine E-Mail versendet.

Email.png

Bestätigung der Nutzungsbedingungen

Nach der Eingabe von einer gültigen E-Mail Addresse müssen nun die Nutzungsbedingungen von Certbot gelesen und akzeptiert werden.

Certbot accept terms.PNG

Zertifikat wurde erstellt

Wenn die Zertifikat Anfrage verifiziert wurde sollte eine Meldung erscheinen die mit Congratulations! beginnt.

Das Zertifikat ist nun erstellt und für 3 Monate gültig.


Implementierung des Zertifikates

Das Zertifikat muss vor der Nutzung in den vHost der Webseite eingetragen werden. Je nach Webserver variiert die Installation.

Implementierung bei einem NGINX Webserver

Zuerst in das Hauptverzeichnis der vHost Dateien navigieren. Dazu folgenden Befehl eingeben:

cd /etc/nginx/sites-enabled/

Erstellen eines SSL vHosts für NGINX

Wichtig: Für die Nachfolgenden Schritte wird PHP-CGI benötigt. Ein Tutorial zur Installation von CGI ist hier zu finden: <LINK ZU CGI TUT>

Um einen vHost zu erstellen muss man folgende Schritte beachten.

sudo nano example_tld.conf

In die Datei wird folgendes eingefügt:

server {
        listen <SERVER_IP>:443 ssl;
        server_name <domain.tld> *.<domain.tld>;
        
        # SSL
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE$
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 1h;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_certificate /etc/letsencrypt/live/<domain.tld ODER subdomain.domain.tld>/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/<domain.tld ODER subdomain.domain.tld>/privkey.pem;
        ssl_client_certificate /etc/letsencrypt/live/<domain.tld ODER subdomain.domain.tld>/chain.pem;
        
        # CONFIG
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        root <VERZEICHNIS>;
        index index.php;

        location / {
                try_files $uri $uri/ @rewrites;
        }

        location @rewrites {
                rewrite ^ /index.php last;
        }

        location ~ \.php$ {
            include /etc/nginx/fastcgi_params;
            fastcgi_pass 127.0.0.1:8888;
            fastcgi_index index.php;
            fastcgi_param HTTPS on;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
}

Wichtig: Alle Stellen mit < > müssen ohne <> durch richtige Daten ersetzt werden!

Die Datei wird dann mit STRG+X Y und Enter gespeichert und geschlossen.

Implementierung bei einem Apache 2 Webserver

Zuerst in das Hauptverzeichnis der vHost Dateien navigieren. Dazu folgenden Befehl eingeben:

cd /etc/apache2/sites-available/

Erstellen eines SSL vHosts für Apache 2

Zuerst muss eine vHost Datei angelegt werden.

sudo nano example_tld.conf


In die Datei wird folgendes eingefügt:

<VirtualHost *:443>
	SSLEngine on
	SSLCertificateFile /etc/letsencrypt/live/<domain.tld>/fullchain.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/<domain.tld>/privkey.pem

	ServerAdmin root@localhost
	ServerName localhost

	DocumentRoot /var/www/domain-name/
</VirtualHost>

Wichtig: Parameter wie ServerName, IP, DocumentRoot und <domain.tld> sowie SSLCertificateFile und SSLCertificateKeyFile müssen durch gültige Datensätze ersetzen werden.

Die Datei wird dann mit STRG+X Y und Enter gespeichert und geschlossen.

Aktivieren des erstellten vHosts

Um den vHost zu aktivieren muss folgender Befehl ausgeführt werden:

sudo ln -s /etc/apache2/sites-available/<name_vhost.conf /etc/apache2/sites-enabled/


SSL erzwingen

Oftmals wird gewünscht, dass gewisse Seiten nur über https:// erreicht werden können.

Aktivieren von HSTS bei NGINX

Öffnen der gewünschten vHost Datei:

sudo nano /etc/nginx/sites-enabled/<vhost>.conf

Folgende Zeile innerhalb des server { Blocks einfügen:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Alle Verbindungen werden nun über https:// ausgeführt.

Aktivieren von HSTS bei Apache 2

Headers Modul aktivieren

sudo a2enmod headers

Bearbeiten des vHosts

Öffnen der gewünschten vHost Datei:

sudo nano /etc/apache2/sites-available/<vhost>.conf

Folgende Zeile innerhalb des <VirtualHost *:443> Blocks einfügen:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains;"

Alle Verbindungen werden nun über https:// ausgeführt.

Starten des Webservers

Der Webserver kann nun wieder gestartet werden.

Webserver (NGINX):

sudo /etc/init.d/nginx start

Webserver (Apache 2):

sudo /etc/init.d/apache2 start

Die gewünschte Domain ist nun unter https://domain.tld/ erreichbar.