Server Installation/Let's Encrypt: Unterschied zwischen den Versionen

Aus Opennet
Wechseln zu: Navigation, Suche
(Apache2-Konfiguration: proxy_http aktivieren (für acme-Challenge))
(Zertifikat-Erstellung und -Erneuerung: dehydrated --cron)
 
(12 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt)
Zeile 5: Zeile 5:
 
[https://github.com/lukas2511/letsencrypt.sh letsencrypt.sh] ermöglicht die Erzeugung und Aktualisierung von letsencrypt-Zertifikaten mit einem überschaubaren bash-Skript.
 
[https://github.com/lukas2511/letsencrypt.sh letsencrypt.sh] ermöglicht die Erzeugung und Aktualisierung von letsencrypt-Zertifikaten mit einem überschaubaren bash-Skript.
  
Der folgende Ablauf erzeugt einen Nutzer für die Ausführung von letsencrypt.sh und bereitet das Datenverzeichnis für die Auflistung der Domains und die Ablage der Zertifikate vor.
+
In Debian Jessie ist leider noch kein letsencrypt-Client verfügbar. Hier hilft das [https://backports.debian.org Backports-Repository]:
 +
# Source-Eintrag in der Datei <tt>/etc/apt/sources.list</tt> eintragen: <tt>https://backports.debian.org</tt>
 +
# Quellen aktualisieren: <tt>apt-get update</tt>
 +
# Paket installieren: <tt>apt-get install letsencrypt.sh</tt>
  
git clone https://github.com/lukas2511/letsencrypt.sh.git /usr/local/lib/letsencrypt.sh
+
Anschließend erfolgt die Konfiguration für unsere Bedürfnisse:
adduser --system --shell /bin/bash --disabled-password letsencrypt-sh
+
 
  BASE_DIR=~letsencrypt-sh/data
+
  printf "HOOK_CHAIN='yes'\nHOOK='/etc/letsencrypt.sh/hook.sh'" > /etc/letsencrypt.sh/conf.d/opennet.sh
mkdir -p "$BASE_DIR/.acme-challenges"
+
  printf '#!/bin/sh\n[ "$1" != "deploy_cert" ] || /usr/sbin/service apache2 restart' > /etc/letsencrypt.sh/hook.sh
touch "$BASE_DIR/domains.txt"
+
  chmod +x /etc/letsencrypt.sh/hook.sh
echo "BASEDIR='$BASE_DIR'" > "$BASE_DIR/config.sh"
+
 
echo "HOOK_CHAIN='yes'" >> "$BASE_DIR/config.sh"
+
Falls auf dem aktuellen Host ein anderer Webserver als Apache2 zum Einsatz kommen sollte, muss der obige Hook korrigiert werden.
echo "HOOK='$BASE_DIR/hook.sh'" >> "$BASE_DIR/config.sh"
+
  printf '#!/bin/sh\n[ "$1" != "deploy_cert" ] || service apache2 restart' > "$BASE_DIR/hook.sh"
+
  chmod +x "$BASE_DIR/hook.sh"
+
chown -R letsencrypt-sh. "$BASE_DIR"
+
  
 
== Domains/Zertifikate festlegen ==
 
== Domains/Zertifikate festlegen ==
Trage in die Datei <i>~letsencrypt-sh/data/domains.txt</i> die Domains ein, für die Zertifikate erzeugt werden sollen. Falls ein Zertifikat mehrere Namen enthalten soll, dann sind die Namen durch Leerzeichen oder Tabulatoren getrennt in eine Zeile zu schreiben. Jede Zeile entspricht einem Zertifikat.
+
Trage in die (neu zu erzeugende) Datei <i>/var/lib/letsencrypt.sh/domains.txt</i> die Domains ein, für die Zertifikate erzeugt werden sollen. Falls ein Zertifikat mehrere Namen enthalten soll, dann sind die Namen durch Leerzeichen oder Tabulatoren getrennt in eine Zeile zu schreiben. Jede Zeile entspricht einem Zertifikat.
  
 
== Zertifikat-Erstellung und -Erneuerung ==
 
== Zertifikat-Erstellung und -Erneuerung ==
 +
{{hinweis|Vor der Erstellung von Zertifikaten muss die untenstehende ''Integration in Dienste'' ausgeführt werden. Andernfalls kann letsencrypt nicht die Challenge-Prüfung durchführen.}}
 +
 
Einmalige manuelle Ausführung:
 
Einmalige manuelle Ausführung:
  su -c "/usr/local/lib/letsencrypt.sh/letsencrypt.sh --config ~/data/config.sh --cron" letsencrypt-sh
+
  dehydrated --cron
 
Dabei werden für alle in der Datei <i>domains.txt</i> aufgelisteten Domains Zertifikate erzeugt.
 
Dabei werden für alle in der Datei <i>domains.txt</i> aufgelisteten Domains Zertifikate erzeugt.
  
Für die regelmäßige Ausführung sollte ein Cron-Job angelegt werden (mit angepasster Uhrzeit):
+
Für die regelmäßige Ausführung sollte ein Cron-Job angelegt werden (via <tt>crontab -e</tt>):
echo "34 3 * * 0 /usr/local/lib/letsencrypt.sh/letsencrypt.sh --config ~/data/config.sh --cron >/dev/null" >>/var/spool/cron/crontabs/letsencrypt-sh
+
  34 3 * * 0 letsencrypt.sh --cron >/dev/null
  
 
== Integration in Dienste ==
 
== Integration in Dienste ==
Zeile 35: Zeile 36:
 
  cat >/etc/apache2/conf-available/letsencrypt-sh.conf <<EOF
 
  cat >/etc/apache2/conf-available/letsencrypt-sh.conf <<EOF
 
  <Location /.well-known/>
 
  <Location /.well-known/>
   ProxyPass !
+
   <IfModule mod_proxy.c>
 +
    ProxyPass !
 +
  </IfModule>
 
   Require all granted
 
   Require all granted
 
  </Location>
 
  </Location>
  Alias /.well-known/acme-challenge/ $BASE_DIR/.acme-challenges/
+
  Alias /.well-known/acme-challenge/ /var/lib/letsencrypt.sh/acme-challenges/
 
  EOF
 
  EOF
 
  a2enconf letsencrypt-sh.conf
 
  a2enconf letsencrypt-sh.conf
a2enmod proxy_http
+
  service apache2 restart
  service apache2 reload
+
  
 
SSL-Zertifikate in einem VirtualHost (typischerweise auf Port 443) konfigurieren:
 
SSL-Zertifikate in einem VirtualHost (typischerweise auf Port 443) konfigurieren:
 
  SSLEngine on
 
  SSLEngine on
  SSLCertificateFile      /home/letsencrypt-sh/data/certs/DOMAIN_NAME/cert.pem
+
  SSLCertificateFile      /var/lib/letsencrypt.sh/certs/DOMAIN_NAME/cert.pem
  SSLCertificateKeyFile  /home/letsencrypt-sh/data/certs/DOMAIN_NAME/privkey.pem
+
  SSLCertificateKeyFile  /var/lib/letsencrypt.sh/certs/DOMAIN_NAME/privkey.pem
  SSLCertificateChainFile /home/letsencrypt-sh/data/certs/DOMAIN_NAME/chain.pem
+
  SSLCertificateChainFile /var/lib/letsencrypt.sh/certs/DOMAIN_NAME/chain.pem
 +
 
 +
=== nginx ===
 +
Konfigurationsdatei (ür alle Domains) erzeugen:
 +
cat >/etc/nginx/snippets/letsencrypt.conf <<EOF
 +
location /.well-known/acme-challenge {
 +
  default_type "text/plain";
 +
  alias /var/lib/letsencrypt.sh/acme-challenges/;
 +
}
 +
EOF
 +
 
 +
Anschließend in jeder http-site-Konfiguration folgende Zeile einfügen:
 +
  include /etc/nginx/snippets/letsencrypt.conf;
 +
 
 +
Jede https-site-Konfiguration sollte folgende Zeilen enthalten:
 +
  ssl_certificate /var/lib/letsencrypt.sh/certs/ZERTIFIKAT_DOMAIN/fullchain.pem;
 +
  ssl_certificate_key /var/lib/letsencrypt.sh/certs/ZERTIFIKAT_DOMAIN/privkey.pem;
 +
 
  
 
[[Kategorie:Server]]
 
[[Kategorie:Server]]
 
[[Kategorie:Anleitungen]]
 
[[Kategorie:Anleitungen]]
 
[[Kategorie:Konfiguration]]
 
[[Kategorie:Konfiguration]]

Aktuelle Version vom 21. Januar 2019, 21:52 Uhr

Inhaltsverzeichnis

[Bearbeiten] Überblick

Die unstehenden Hinweise erleichtern die Einrichtung von Let's Encrypt auf einem Opennet-Server. Somit ist es möglich, SSL-Zertifikate automatisiert zu erstellen und zu erneuern.

[Bearbeiten] Einrichtung des Shell-Clients (letsencrypt-sh)

letsencrypt.sh ermöglicht die Erzeugung und Aktualisierung von letsencrypt-Zertifikaten mit einem überschaubaren bash-Skript.

In Debian Jessie ist leider noch kein letsencrypt-Client verfügbar. Hier hilft das Backports-Repository:

  1. Source-Eintrag in der Datei /etc/apt/sources.list eintragen: https://backports.debian.org
  2. Quellen aktualisieren: apt-get update
  3. Paket installieren: apt-get install letsencrypt.sh

Anschließend erfolgt die Konfiguration für unsere Bedürfnisse:

printf "HOOK_CHAIN='yes'\nHOOK='/etc/letsencrypt.sh/hook.sh'" > /etc/letsencrypt.sh/conf.d/opennet.sh
printf '#!/bin/sh\n[ "$1" != "deploy_cert" ] || /usr/sbin/service apache2 restart' > /etc/letsencrypt.sh/hook.sh
chmod +x /etc/letsencrypt.sh/hook.sh

Falls auf dem aktuellen Host ein anderer Webserver als Apache2 zum Einsatz kommen sollte, muss der obige Hook korrigiert werden.

[Bearbeiten] Domains/Zertifikate festlegen

Trage in die (neu zu erzeugende) Datei /var/lib/letsencrypt.sh/domains.txt die Domains ein, für die Zertifikate erzeugt werden sollen. Falls ein Zertifikat mehrere Namen enthalten soll, dann sind die Namen durch Leerzeichen oder Tabulatoren getrennt in eine Zeile zu schreiben. Jede Zeile entspricht einem Zertifikat.

[Bearbeiten] Zertifikat-Erstellung und -Erneuerung


Einmalige manuelle Ausführung:

dehydrated --cron

Dabei werden für alle in der Datei domains.txt aufgelisteten Domains Zertifikate erzeugt.

Für die regelmäßige Ausführung sollte ein Cron-Job angelegt werden (via crontab -e):

 34 3 * * 0 letsencrypt.sh --cron >/dev/null

[Bearbeiten] Integration in Dienste

[Bearbeiten] Apache2

Konfigurationsdatei (für alle Domains) erzeugen:

cat >/etc/apache2/conf-available/letsencrypt-sh.conf <<EOF
<Location /.well-known/>
  <IfModule mod_proxy.c>
    ProxyPass !
  </IfModule>
  Require all granted
</Location>
Alias /.well-known/acme-challenge/ /var/lib/letsencrypt.sh/acme-challenges/
EOF
a2enconf letsencrypt-sh.conf
service apache2 restart

SSL-Zertifikate in einem VirtualHost (typischerweise auf Port 443) konfigurieren:

SSLEngine on
SSLCertificateFile      /var/lib/letsencrypt.sh/certs/DOMAIN_NAME/cert.pem
SSLCertificateKeyFile   /var/lib/letsencrypt.sh/certs/DOMAIN_NAME/privkey.pem
SSLCertificateChainFile /var/lib/letsencrypt.sh/certs/DOMAIN_NAME/chain.pem

[Bearbeiten] nginx

Konfigurationsdatei (ür alle Domains) erzeugen:

cat >/etc/nginx/snippets/letsencrypt.conf <<EOF
location /.well-known/acme-challenge {
  default_type "text/plain";
  alias /var/lib/letsencrypt.sh/acme-challenges/;
}
EOF

Anschließend in jeder http-site-Konfiguration folgende Zeile einfügen:

 include /etc/nginx/snippets/letsencrypt.conf;

Jede https-site-Konfiguration sollte folgende Zeilen enthalten:

 ssl_certificate /var/lib/letsencrypt.sh/certs/ZERTIFIKAT_DOMAIN/fullchain.pem;
 ssl_certificate_key /var/lib/letsencrypt.sh/certs/ZERTIFIKAT_DOMAIN/privkey.pem;
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge