Let’s Encrypt SSL-Zertifikat mit Apache Modul mod_md

Durch SSL-Zertifikate lassen sich Webseiten verschlüsseln und sind ein Muss für jeden sicheren Webserver. Mit Let’s Encrypt lassen sich die Zertifikate kostenlos und einfach selber beschaffen. Wir stellen Ihnen hier das Apache Modul mod_md auf einem Ubuntu 20.04 vor.

Installation von mod_md

Um das Apache Modul zu installieren, geben Sie folgendes auf dem Linux Server ein.

apt install libapache2-mod-md -y

Nun müssen die passenden Apache Module aktiviert werden.

a2enmod md
a2enmod ssl
a2enmod rewrite
a2enmod headers

Starten Sie den Apache neu.

/etc/init.d/apache2 restart

Anlegen der vHost Datei für mod_md

Für den Webserver muss nun noch eine vHost Datei angelegt werden.
Bitte geben Sie anstatt server.de den Namen ihres Webservers an.

vi /etc/apache2/sites-enabled/server.de.conf

In diese Datei kommt nun folgender Inhalt.

## Apache with mod_md Let's Encrypt ##
## mod_md config for Let's Encrypt ##
ServerAdmin webmaster@server.de
MDCertificateAgreement accepted
MDomain www.server.de
MDPrivateKeys RSA 4096

## HTTP port 80 config ##
<VirtualHost *:80>
    ServerAdmin webmaster@server.de
    ServerName www.server.de
    DocumentRoot /var/www/
    ErrorLog ${APACHE_LOG_DIR}/www.server.de-error.log
    CustomLog ${APACHE_LOG_DIR}/www.server.de-access.log combined
    # Redirect all http requests to HTTPS (uncomment the following two lines when HTTPS issued)
    # RewriteEngine On
    # RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

## HTTPS Config ##
<VirtualHost *:443>
    SSLEngine on
    Include /etc/apache2/options-ssl-apache.conf
    ServerAdmin webmaster@server.de
    ServerName www.server.de
    DocumentRoot /var/www/
    ErrorLog ${APACHE_LOG_DIR}/www.server.de-ssl-error.log
    CustomLog ${APACHE_LOG_DIR}/www.server.de-ssl-access.log combined
    # Turn on HTTP/2
    Protocols h2 http/1.1
</VirtualHost>

## Turn on OCSP Stapling ##
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
## Permission for our DocumentRoot  ##
<Directory /var/www/>
    Options -Indexes
    AllowOverride ALL
    Require all granted
</Directory>
# Automatische Erneuerung des Zertifikats via watchdog_module
<Location "/md-status">
  SetHandler md-status
</Location>

Um noch die passenden SSL Optionen zu konfigurieren legen Sie noch eine Datei an.

vi /etc/apache2/options-ssl-apache.conf

Folgendes soll in die Datei geschrieben werden.

# Baseline setting to Include for SSL sites

SSLEngine on

# Intermediate configuration, tweak to your needs
SSLProtocol             -all  +TLSv1.2 +TLSv1.3
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384

SSLHonorCipherOrder     on
SSLCompression          off

SSLOptions +StrictRequire
Header always set Strict-Transport-Security: "max-age=31536000; includeSubDomains; preload"

# Add vhost name to log entries:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common

#CustomLog /var/log/apache2/access.log vhost_combined
#LogLevel warn
#ErrorLog /var/log/apache2/error.log

# Always ensure Cookies have "Secure" set (JAH 2012/1)
#Header edit Set-Cookie (?i)^(.*)(;\s*secure)??((\s*;)?(.*)) "$1; Secure$3$4"

Anschließend wird Apache wieder neu gestartet.

/etc/init.d/apache2 restart

Nach dem Neustart wird das Zertifikat erstellt.

https Weiterleitung

Zum Schluss muss noch die https Weiterleitung im vHost aktiviert werden.

vi /etc/apache2/sites-enabled/server.de.conf

Passen Sie folgenden Abschnitt an.

# Redirect all http requests to HTTPS (uncomment the following two lines when HTTPS issued)
# RewriteEngine On
# RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]

Stattdessen sollten folgendes eingefügt werden.

# Redirect all http requests to HTTPS (uncomment the following two lines when HTTPS issued)
  RewriteEngine On
  RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]

Weitere interessante Artikel finden Sie in unserem Blog.

Bei Fragen können Sie uns auch gerne kontaktieren.