Wie kann ich ein SSL Zertifikat auf einem Apache2 Server aktivieren (Docker)?
Ich versuche schon über mehrere Tage es irgendwie hinzubekommen, dass der Webserver mit "https" erreichbar ist. Das gültige Zertifikat/ die Dateien habe ich schon:
cert.pem chain.pem fullchain.pem privkey.pem
Jedoch läuft der Apache-Webserver als Docker Image. Ich weiß jedoch nicht, wie ich das SSL Zertifikat hinzufüge, da keine "normale" Apache2 Config vorliegt.
<VirtualHost *:443>
SSLEngine on
SSLCertificateChainFile "path to fullchain.pem"
SSLCertificateKeyFile "path to privkey.pem"
</VirtualHost>
Dies habe ich ich dann via in den Apache2 Server-config importiert. (Wichtig zu wissen ist, dass der Pfad "sites-available" nicht exsestiert.
./configfile.conf:/etc/apache2/sites-available/000-default.conf
Port 80, also http funktioniert auch noch weiter... (80 und 443 sind freigegeben)
Weiß jemand, wie ich ein SSL Zertifikat auf einem Apache2 Server aktiviere, welcher auf Docker läuft / Wie ich die Config Datei richtig lade (denke nämlich nicht, dass diese richtig geladen wird)
Hier nochmal meine docker-compose.yml (unvollständing) :
web:
build:
context: ./php
dockerfile: Dockerfile
container_name: php73
depends_on:
- db
volumes:
- /home/pi/web_dev/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
- ./php:/var/www/html/
- ./my_vhost.conf:/vhosts/myapp.conf:ro
- ./certs:/certs
ports:
- 443:443
- 80:80
Und meine Dockerfile:
FROM php:7.3.3-apache
RUN a2enmod ssl && a2enmod rewrite
RUN mkdir -p /etc/apache2/ssl
COPY /etc/letsencrypt/live/MYIP/*.pem /etc/apache2/ssl/
COPY ../config/000-default.conf /etc/apache2/sites-available/000-default.conf
RUN apt-get update && apt-get upgrade -y
RUN docker-php-ext-install mysqli
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
ADD php.ini /home/pi/web_dev
EXPOSE 80
EXPOSE 443
2 Antworten
Was sagen den die Log Files ?
Stimmen die ganzen anderen Pfade ?
Ist das ein Home Server ?
12.1. Ein Container starten
Anstatt wie beim hello-world Beispiel nach dem Start als Container gleich wieder zu enden, können wir auch ein interaktiven Shell Zugriff auf den Container erlangen. Dies machen wir mit den Argumenten „- i“ und „-t“. diese kann man zusammenfassen zu „-it“.
mng01@mng01:~$ docker run –it ubuntu
12.2. In einem Container arbeiten
Nach dem Start ändert sich unsere Kommandozeileneingabe in die root Eingabe innerhalb des Containers.
root@9f586c1a5b6f:/#
dort kannst du dir die logfiles angucken , ggf kannst du die log files auch auf dein host pfad mappen .
Ich bin schonmal einen Schritt weiter. Deine Methode hatte mir leider nicht so viel geholfen, da ich es über eine docker-compose file / mit docker-compose up starte. Jedoch hattest du mich auf die Idee gebracht Commands in dem Docker Container auszuführen (mit docker exec -it) Dabei habe ich gemerkt, dass garkein sudo ausgeführt werden kann
exec: \"sudo\": executable file not found in $PATH": unknown
Jetzt habe ich alle sudos entfernt und ich bin einen Schritt weiter.
WICHTIG: AB HIER HABE ICH NOCH NICHT RECHERSCHIERT UND WILL NUR DEN AKTUELLEN STAND WIEDERSPIEGELNJetzt bin ich bei
SSL_ERROR_RX_RECORD_TOO_LONG
Ich schaue mal und falls ich was finde / nichts finde melde ich mich nochmal. Bis jetzt abver schonmal danke!
das ist auch beim docker composer möglich .
du kannst auf jedes docker image direct zugreifen wenn du den namen/id hast .
https://geekflare.com/de/run-commands-inside-docker/
oh , hast du ja schon rausgefunden . was sagt den eine suchmaschine zu deinem fehler ?
Hier mal die erklärungen die es gibt
https://stackoverflow.com/questions/119336/ssl-error-rx-record-too-long-and-apache-ssl
die problematik steckt irgendwo zwischen den dingen bzw kann es an vielen dingen liegen die halt nciht genauso wie dein host sind , da SSL ja genau den namen etc brauch .
Sooo und ich bin einen Schritt weiter. Meine Zertifikate wurde nicht importiert. Habe ich schnell behoben. Jetzt kommt dieser Fehler: "PR_END_OF_FILE_ERROR" auch hier gilt. Ich habe noch nicht nach gegoogelt. Werde ich jetzt schnell machen.
Und danke für dein aktives Mitwirken
DANKE DIR. Du hast mir bestimmt Stunden von Arbeit abgenommen. Aber noch eine klitze kleine Frage: Wie funktionieren diese Dockerfiles jetzt ? Wenn ich über docker exec -it mache, funktioniert es. Am besten soll es aber automatisch ablaufen. Aber irgendwie klappt es nicht... Meine Docker-File:
FROM php:7.3.3-apache
RUN a2enmod ssl
RUN mkdir /etc/apache2/ssl
RUN cp "/etc/letsencrypt/live/MYIP/fullchain.pem" "/etc/apache2/ssl/fullchain.pem"
RUN cp "/etc/letsencrypt/live/MYIP/privkey.pem" "/etc/apache2/ssl/privkey.pem"
RUN cp "/home/pi/web_dev/default-ssl.conf" "/etc/apache2/sites-available/default-ssl.conf"
RUN a2ensite default-ssl.conf
RUN apt-get update && apt-get upgrade -y
RUN docker-php-ext-install mysqli
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
ADD php.ini /home/pi/web_dev
EXPOSE 80
EXPOSE 443 https
was hst du den eigentlich geändert ? du kannst dir auch das image nach änderung wieder speichern als neues image , dann brauchste auch nicht dieses RUN a2enmod ssl und das ganze kopieren .
Ich hatte noch eine "korrupte" Zeile in meiner default-ssl.conf gehabt. die hat dann den Webserver beendet, als man versucht hat, die Config mit
a2ensite default-ssl.conf
zu ändern
13. Container und Image und Docker Hub
13.1. Änderungen im Container in einem Image speichern
Solange wir den ubuntu Container noch nicht entfernt haben, können wir die Änderung (mit der nodejs Installation) in unserem lokalem Repository speichern.
definiert die Info für den Speichervorgang. definiert den Autoren Namen
die Container ID
–m -a
container_id
repository/new_image_name docker hub login/neuer Image Name mng01@mng01:~$ docker commit -m "Was wurde geändert" -a "Author Name" \
container_id \ repository/new_image_name
Ein Beispiel mit dem Docker Hub Login mustermann und der Container ID 898989898 mng01@mng01:~$ docker commit -m "installiertes NodeJs" -a "Max Mustermann" \
898989898\
mustermann /Ubuntu-nodejs
Das Image wird erstmal in dem Lokalen Repository gespeichert. Wir können uns das Ergebnis anzeigen lassen mit
mng01@mng01:~$ docker images
13.2. Images in die Docker Hub Registry hochladen
Um das Image nun in die Docker Hub Registry hochzuladen müssen wir uns erstmal einloggen. mng01@mng01:~$ docker login –u dockerhub-registry-benutzername
Nach Eingabe des Passwortes sind wir beim Docker Hub angemeldet. Wir können nun mit dem Kommando „push“ unser Image auf den Docker Hub hochladen.
mng01@mng01:~$ docker push dockerhub-registry-benutzername/docker-image-name Beim Beispiel von Max Mustermann sieht der Befehl so aus.
mng01@mng01:~$ docker push mustermann/Ubuntu-nodejs
Nach dem Upload zum Docker Hub kann man auf der Docker Hub Webseite den Erfolg bestaunen. Bei Fehlern sollte man noch einmal den Login schritt mit korrekten Anmeldedaten wiederholen. Das hochgeladene Image kann dann auf anderen Rechnern mit einem „pull“ Befehl wieder genutzt werden.
Beispiel: Herunterladen des Images von Max Mustermann mng01@mng01:~$ docker pull mustermann/Ubuntu-nodejs
ich glaub du musst auch nach dem ganzen kram nochmal dein apache2 neu starten/ bzw configs neu laden , da du ja änderungen vorgenommen hast .
Vorab, ohne Logs kann man da nur sehr schwer etwas zu sagen.
Die folgenden beiden Zeilen halte ich auf den ersten Blick für fragwürdig:
SSLCertificateChainFile "path to fullchain.pem"
SSLCertificateKeyFile "path to privkey.pem"
Die würden richtig, eigentlich erstmal so aussehen:
SSLCertificateFile /path/to/fullchain.pem
SSLCertificateKeyFile /path/to/privkey.pem
'SSLCertificateChainFile' ist mindestens veraltet und hier sicher nicht korrekt.
Desweiteren ist mir nach dem von dir geposteten:
/etc/apache2/sites-available/000-default.conf
unklar, ob die Konfiguration auch in
/etc/apache2/sites-enabled/000-default.conf
verfügbar ist, also 'a2ensite' darauf ausgeführt wurde, bzw. ein Symlink besteht.
Benutzt Du die gleiche Konfigurations-Datei für http und https (SSL)?
Was das Zusammenspiel Docker/Apache angeht, kannst Du deine Konfiguration auch nochmal mit diesem Howto abgleichen:
https://codeburst.io/http-server-on-docker-with-https-7b5468f72874
Sorry für die späte Antwort:
Das Problem, was mir auch ein bischen peinlich ist: Ich weiß nicht mal, ob logfiles erstellt werden, da ich mich mit Docker wirklich kaum auskenne, es aber nutzen muss.
Auf meinem Test-Server, welchen ich ohne Docker laufen lasse, funktioniert auch alles fein. Auf dem Docker-Webserver und dem Test-Server benutze ich die selbe config Datei ( die oben kann abweichen, da ich schon viele Tutorials durch habe und etwas rumgespielt hatte ). Wenn ich jedoch den Test-Server 1:1 rüber kopiere, funktioniert es nicht. Natürlich muss ich vorher noch über die docker-compose.yml die Dateien an den richtigen Ort verschieben.
Ich weiß leider nicht wie du das mit den Pfaden meinst. Aber was ich sagen kann, ist dass der Pfad "sites-available" bei mir nicht existiert. Die einzigen Dateien in "/etc/apache2/" sind "conf-available/ mods-available/", wobei ich auch nicht weiß, wie Docker das regelt, da ich wie gesagt nicht sehr vertraut damit bin.
Ansonsten sollten alle Pfade auch richtig zugewießen sein. Ein Anhaltspunkt könnte sein, dass die Dateien von letsencrypt nur über den root user geöffnet/eingesehen werden können. Jedoch sehe ich, wenn der Server startet, keine Fehlermeldung
Und ja, es ist ein Home-Server
Schonmal danke im Vorraus