Bisher hatte ich meine HTTPS-Zertifikate von cacert.org bezogen. Kostet nix und hält ein halbes Jahr.
Allerdings kam ich bei der Installation von bitwarden mit cacert nicht mehr weiter und musste mich mit letsencrypt befassen, auch wenn die Zertifikate hier all 3 Monate ausgetauscht werden müssen. Dafür erledigt dies der certbot (ein Kommandozeilenprogramm) mehr oder weniger von alleine.
Von dem her ist HTTPS mit letsencrypt keine große Sache, wenn es denn mal installiert ist...
certbot installieren
Um letsencrypt nutzen zu können, muss man sich nirgends registrieren oder ein Konto anlegen. Man muss allerdings das Kommandozeilenprogramm certbot auf dem Webserver installieren, was ich mit Hilfe von Homebrew gemacht habe:brew install certbot
Zertifikate erstellen
So ganz automatisiert bekam ich die Erstellung aller Zertifikate für sämtliche (Sub-)Domains dann aber doch nicht hin und musste mit der certonly-Option arbeiten.An sich sollte der Befehl sudo certbot --apache ausreichen, so dass der certbot von selbst rausfindet, was für Zertifikate man benötigt und wo sie hin müssen.
Aber wie es mit so vereinfachten one-linern bei mir immer ist: Funktioniert nicht.
Also Zertifikat für jede (Sub-)Domain manuell erstellen und der Apache-Konfiguration hinzufügen...
Zertifikat manuell einrichten
Die PHP-Dokumente für die Website beispiel.apfel-z.net liegen in diesem Beispiel unter /Library/WebServer/Documents/beispiel.apfel-z.net/Diese Domain muss auf jeden Fall über den Standard-HTTP-Port erreichbar sein, also in /private/etc/apache2/extra/httpd-vhosts.confkonfiguriert. Auch, wenn ich vielleicht später gar nicht vor habe, HTTP auszuliefern und nur HTTPS-Verbindungen nutzen möchte!
Mit folgendem Befehl wird ein entsprechendes Zertifikat erstellt und unter /etc/letsencrypt/live/*domainname* abgelegt:
Darauf sollte folgende Erfolgsmeldung erscheinen:
/etc/letsencrypt/live/beispiel.apfel-z.net/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/beispiel.apfel-z.net/privkey.pem
Your cert will expire on 2020-05-29. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
Beide in der Erfolgsmeldung erwähnten .pem-Zertifikate in der https-ssl-Config /private/etc/apache2/extra/httpd-ssl.conf als SSLCertificateFile und SSLCertificateKeyFile eintragen:
DocumentRoot "/Library/WebServer/Documents/beispiel.apfel-z.net"
ServerName beispiel.apfel-z.net:443
ServerAlias beispiel.apfel-z.net
ServerAdmin webmaster@apfel-z.net
ErrorLog "/private/var/log/apache2/error_log"
TransferLog "/private/var/log/apache2/access_log"
<Directory "/Library/WebServer/Documents/beispiel.apfel-z.net">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
<FilesMatch "\.(cgi|html|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
CustomLog "/private/var/log/apache2/ssl_request_log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/beispiel.apfel-z.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/beispiel.apfel-z.net/privkey.pem
</VirtualHost>
ODER nochmals certbot laufen lassen: sudo certbot --apache
Und dann "Reinstall" (1) wählen- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Attempt to reinstall this existing certificate
2: Renew & replace the cert (limit ~5 per 7 days)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Und nun noch den Apache neustarten:
sudo apachectl -k restart
Zertifikate erneuern
Alle per letsencrypt eingerichteten Zertifikate zu erneuern (spätestens nach 3 Monaten, wenn sie verfallen) ist nun wirklich keine große Sache mehr:sudo certbot renew --post-hook "apachectl restart"
Durch die post-hook-Option wird nach dem Erneuern gleich noch der Apache neu gestartet.
Generelles zu HTTPS
Am Rande:Damit HTTPS per Apache auf dem Mac ausgeliefert werden kann, müssen in /etc/apache2/httpd.conf folgende Zeilen aktiviert sein (also das # am Zeilenbeginn entfernt sein):
Include /private/etc/apache2/extra/httpd-ssl.conf
Hatte mir bei mir anfangs nicht geklappt und ich hatte folgende Fehlermeldung im Log entdeckt:
Setting Compression mode unsupported; not implemented by the SSL library
Die SSLCompression zu deaktivieren schafft hier Abhilfe.
In /etc/letsencrypt/options-ssl-apache.conf folgende Zeile auskommentieren.
#SSLCompression off
auskommentieren (Also ein # davor setzen).
Und Apache neustarten:sudo apachectl -k restart
![]() ![]() ![]() ![]() |
|
Erstellt am: 29.02.2020 unter den Kategorien Unverzichtbar Grundlagen Selbstgehostet . | Kommentieren |