⚠️ Dieses Script darf so niemals nicht und nirgendwo auf einem öffentlich zugänglichen Webbrowser benutzt werden! Es darf nur in einer geschützten Umgebung betrieben werden'!'
⚠️ This script must never be used on a publicly accessible web browser! It may only be operated in a protected environment'!'
Dokumentation folgt
Ihr benötigt dringend vim und vim-common, damit die Zertifikate auch generiert werden können. Keine Angst, keiner muss das Programm dann nutzen. ;o)
Die wichtigsten Dateien und Ordner im Überblick
/srv/www/tls/
│
├── css/
│ ├── bootstrap/
│ │ ├── css/
│ │ └── js/
│ └── main.css
├── config/
│ ├── config.php
│ └── openssl.cnf
├── ca/ (Wird erst nach dem ausführen der "install-new-root.sh" angelegt)
│ ├── certs/
│ │ ├── rootCA.pem
│ │ └── tls.db2.home.pem
│ ├── private/
│ │ ├── rootCA.key
│ │ └── tls.db2.home.key
│ └── ...
└── certs/
│ ├── Deine Domain1/files
│ ├── Deine Domain2/files
│ └── ...
├── .env
├── install-new-root-ca.sh
├── index.php
├── install-tls-cert.sh
├── generate.php
├── renew.php
├── load.php
└── debug.php
Wo auch immer deine Webroot liegt, bei mir unter /srv/www/tls, sollte der Aufbau etwa ähnlich aussehen. Der Ordner ca/ wird erst nach dem ausführen der install-new-root-ca.sh angelegt. Die Datei install-tls-cert.sh kannst du auf alle Server/Computer kopieren. Durch den Aufruf
bash ./install-tls-cert.shbekommst du die Frage nach dem Zertifikat, welches du installieren möchtest. Dort trägst du dann die entsprechende TLD ein, z.B. vpn.home und das Script erledigt den Rest. Es installiert das root-zertifikat, so dass ab sofort keine Sicherheitsmeldungen mehr auftauchen sollten, weil ein "nicht vertrauenswürdiges Zertifikat" gefunden wurde. Unter /etc/xvpn-tls/ die notwendigen Zertifikate, um deinen Webserver, Mailserver oder was auch immer du benötigst, mit TLS ausführen zu können. Siehe Verteilen der Zertifikate.
Das rootCA.pem im Ordner ca/certs/ ist jenes Zertifikat, welches auf die jeweiligen Computer/Geräte kopiert werden muss, damit die gesamte Zertifikatskette automatisch anerkannt wird. Das passiert teils automatisch mit dem Script install-tls-cert.sh oder eben per Hand, wenn das Zertifikat auf Mobiltelefonen oder ähnlichem verteilt werden soll. Die Schlüssel rootCA.key sowie tls.db2.home.key liegen nicht umsonst in private, weil die niegends verteilt werden dürfen.
Du musst zuerst die Datei install-new-root-ca.sh editieren.
CN_ROOT="xVPN-ROOT-CA"
CN_SERVER="tls.db2.home"
Passe CN_ROOT und CN_SERVER deinen Ansprüchen an. Die Variable für das Passwort:
PASS="supersecret"
solltest du nur während der Initialisierung eintragen. Danach bitte löschen, du brauchst das Script nur wenn du eine neue ROOT-CA anlegen willst.
Mit dem Aufruf:
bash ./install-new-root-ca.shwird nun automatisch die neue Struktur der Zertifikate angelegt. Du musst nichts weiter tun als zusehen. ;o)
Nachdem du hoffentlich die Ausgabe:
✅ Fertig! Zertifikat liegt unter:
zu sehen bekommen hast, kannst du dich weiter dem eigentlichen Script zuwenden.
Nachdem du deinem PHP oder Webserver "erzählt" hast, wie du die Webseite erreichen kannst, rufe sie bitte auf. Du siehst den Rumpf der Zertifikatsverwaltung die einen Eintrag in das Textfeld erlaubt. Möchtest du mehrere Zertifikate (Einzelzertifikate für mehrere unterschiedliche Server) gleichzeitig erstellen, dann sind diese mit Komma getrennt einzugeben. Möchtest du ein sogenanntes SAN-Zertifikat, bei dem mehrere Domains und/oder Subdomains mit ein und demselben Zertifikat unterschrieben werden sollen, dann wähle den Punkt SAN-Zertifikat aus, gebe die verschiedenen Domains kommagetrennt in das Textfeld ein und drücke auf erstellen. Alles weitere macht dann das PHP Script. Nach der Anzeige "$Domain" erfolgreich erstellt, kannst du zur Startseite wechseln und wirst dort alle bisher erstellten Zertifikate in der Übersicht sehen.
Die Anzeige ist so aufgebaut, dass das Datum der Erstellung (Dateidatum) zu sehen ist, ein Link zum Download der Zip-Datei sowie die entsprechende Domain mit (+1 ... n). Im Mouseover sind dann alle eingetragenen Domains zu sehen, die zu dem entsprechenden Zertifikat unterschrieben worden sind.
Im Kopf des Scriptes sind folgende Einstellungen zu finden. Diese sind essentiell, damit das Script nach deinen Bedürfnissen überhaupt funktionieren kann!
DOMAIN="$1"
BASEURL="http://tls.db2.home/certs"
TMPDIR="/tmp/xvpn-tls"
ZIPFILE="$TMPDIR/$DOMAIN.zip"
INSTALLDIR="/etc/xvpn/certs/$DOMAIN"
CAFILE="/usr/local/share/ca-certificates/xvpn-root.crt"
- DOMAIN="$1": ist die Abfrage, welches Zertifikat du vom zentralen Server abholen möchtest
- BASEURL="http://tls.db2.home/certs": Ist die Webseite, auf der die jeweiligen gepackten Dateien (zip) mit den Zertifikaten zu finden sind. Statt wie hier tls.db2.home kann natürlich auch eine IP-Adresse genutzt werden.
- TMPDIR="/tmp/xvpn-tls": sollte selbsterklärend sein
- INSTALLDIR="/etc/xvpn/certs/$DOMAIN": Wo sollen die Zertifikate für deine Anwendung installiert werden? Du kannst den Pfad auch anderweitig benennen. Ich mache mir das verteilen etwas einfacher, dann kann ich alle weiteren Scripte wie das erstellen neuer Apache/Nginx Konfigurationen erleichtern, da alle Zertifikate immer den gleichen Aufbau haben.
- CAFILE="/usr/local/share/ca-certificates/xvpn-root.crt": Das Hauptzertifikat, mit dem alle anderen Zertifikate signiert worden sind, installieren. Du kannst den Namen der Datei hier entsprechend anpassen.
Du solltest deinen TLS-Server mit http statt mit https laufen lassen. Denn dein System, auf welchem du das neue Zertifikat installieren möchtest, wird die ROOT-CA ganz sicher noch nicht kennen. Ansonsten riskierst du Fehlermeldungen! ;o) Absichern kannst du den Zugriff mit einer .htaccess.
- Ich hätte gern ein besseres Design der Seite
- Dokumentation muss verbessert werden
- Datei .env in der Webroot erstellen
- da hinein das:
APP_ENV=development
DEBUG=true
- Verantwortlich für das Debugging und dessen Anzeige ist dann nur APP_ENV
Ob das Script jetzt schon alles tut, muss erst noch auf den Servern getestet werden.