Namecheap ist nicht nur ein Anbieter, der traditionell günstig Top Level Domains anbietet, sondern neuerdings auch einer der günstigsten Hoster, die für Webseiten aller Art ein hervorragendes Preis-/Leistungsverhältnis anbietet.
Mit den günstigen Shared Hosting Plans – die meistens auch mit ordentlichen Rabattaktionen im ersten Jahr noch attraktiver gemacht werden – bietet Namecheap von „Stellar“ über „Stellar Plus“ bis hin zu „Stellar Business“ für ein paar Euro im Monat in US-, UK- und EU-Datencentern einen kostenlosen Domainnamen, die Möglichkeit mehrere Websites und Domains auf SSDs zu hosten an.
Gratis dazu gibt es im ersten Jahr auch SSL Zertifikate für jede Domain, die quasi automatisch bei Bestellung eingerichtet werden. Ist das erste Jahr vorbei, werden die Nutzer mit recht happigen Preisen zur jährlichen Verlängerung der Zertifikate gebeten.
Da die Shared Hosting Pakete von Namecheap alle über eine sehr komfortable cPanel Lösung zur Konfiguration und Administration verfügen, kann man zusammen mit den Skripten aus dem acme.sh Projekt auch eine völlig kostenlose Lösung für SSL Zertifikate bauen, die sich sogar ebenfalls kostenlos jeweils vor Ablauf automatisch verlängern.
Die Nutzung von kostenlosen SSL-Zertifikaten stellt dabei keinen Nachteil gegenüber kommerziellen Lösung dar und ist für den einen oder anderen Blogger oder Webseiten-Betreiber sicherlich eine tolle Gelegenheit vor überzogenen SSL-Zertifikatspreisen zu flüchten und diese Kosten dauerhaft einzusparen.
Was dafür konkret Schritt für Schritt zu tun ist, ist Gegenstand dieser Anleitung.
Sie bezieht sich ganz explizit auf die Shared Hosting Angebote von Namecheap, lässt sich aber ggf auch leicht abgeänderter Form auf andere Shared Hosting Anbieter mit cPanel Verwaltung übertragen.
Voraussetzungen:
Um die Anleitung umsetzen zu können, muss man logischerweise ein Shared Hosting Paket von Namecheap gebucht haben und dieses Paket muss mit mindestens einer registrierten Domain verbunden sein (wie das alles geht, erklärt Namecheap sehr gut in ihren Anleitungen bei der Einrichtung).
Außerdem benötigt man einen Zugang zum cPanel des jeweiligen Shared Hosting-Pakets (URL sieht etwa so aus https://premium123.web-hosting.com:2083/), wo man sich mit seinen Benutzerdaten anmelden muss (Benutzername ist ein achtstelliger Buchstabencode wie „crewdegd“).
Nach der Anmeldung im cPanel:
In cPanel findet man gleich ganz oben unter „Exclusive for Namecheap Customers“ ein Icon mit dem Titel „Manage Shell“ auf das man einmal klickt.
In „Manage Shell“ schiebt man den Schieberegler „Enable SSH access“ auf grün, so dass dieser aktiviert ist.
Zurück im cPanel unter „Advanced“ ist jetzt der Eintrag „Terminal“ zu sehen den man einmal anklickt.
Nun stimmt man den Zugriffsberechtigung bzw. Verwendung von Terminal zu und kann fortan auf der Kommandozeile des Servers bzw. Shared Hosting Pakets arbeiten.
acme.sh Pakete im Terminal installieren:
Zur Erstellung und zum Management der kostenlosen SSL Zertifikate werden die Skripte des acme.sh-Projekts benötigt, die man durch folgenden Befehl im Terminal installiert:
curl https://get.acme.sh | sh
Hat man den Befehl ausgeführt, sollten in den letzten Zeilen vom System etwas stehen wie „OK“ und „Install success!“. Dazwischen gibt es ein paar rot markierte Einträge mit Bezug auf socat. „It is recommended to install socat first. We use socat for standalone server if you use standalone mode. If you don’t use standalone mode, just ignore this warning.“, die aber probemlos ignoriert werden können.
Als nächstes muss man sich nun einmal aus dem Terminal ausloggen, was mit dem mit dem Befehl exit
geht.
Nun erscheint im Browserfenster des cPanel oberhalb des Terminal-Fensters ein „Reconnect“ Button, den man einmal anklickt, um im Terminal wieder angemeldet zu werden.
SSL Zertifikat(e) mit acme.sh im Terminal erstellen:
Nun muss zunächst mit einer E-Mail Adresse ein Account angelegt werden an den man Infos geschickt bekommt, wenn etwas bzgl der Zertifikate nicht funktioniert (Verlängerung etc.).
Dies funktioniert mit folgender Eingabe in der Kommandozeile:
acme.sh --register-account --accountemail email@example.com
Hat man die Account-Registrierung erledigt, erhält man im Terminal u.a. eine Systemmeldung, die mit der Information „Registered“ eine erfolgreiche Registrierung signalisiert.
Die Registrierung wird von acme.sh standardmäßig für die Verwendung von ZeroSSL als Zertifikatsanbieter verwendet. ZeroSSL hat gegenüber Let’s encrypt den Vorteil, dass die Anzahl der ausgestellten Zertifikate pro E-Mail Adresse nicht beschränkt ist.
Cronjob Eintrag checken für automatische Aktualisierung des SSL Zertifikats:
Bei der Installation on acme.sh sollte auch schon ein Cronjob-Eintrag mit angelegt worden sein, der sich regelmäßig um die automatische Verlängerung des SSL Zertifikats vor Ablauf der Gültigkeit kümmert.
Ob dies geschehen ist, prüft man am Besten einmal kurz mit folgendem Befehl:
crontab -l | grep acme.sh
Dabei sollte vom System ein Cronjob-Eintrag gemeldet werden, der ungefähr so aussieht:
10 0 * * * „/home/_CPANEL_USERNAME_/.acme.sh“/acme.sh –cron –home „/home/_CPANEL_USERNAME_/.acme.sh“ > /dev/null
Webroot Pfad checken:
Als nächstes sollte kurz der Webroot Pfad gecheckt werden, um herauszufinden, wo das Verzeichnis der Domain auf dem Webhosting Paket genau liegt. Dies geht mit folgendem Befehl:
uapi DomainInfo single_domain_data domain=example.com | grep documentroot
example.com ist wieder mit eurer Domain zu ersetzen, für die das SSL Zertifikat auszustellen ist.
Im Ergebnis sollte etwas zurückgemeldet werden wie:
Documentroot: /home/crewdegd/example.com
Diesen Pfad brauchen wir gleich im nächsten Schritt.
Erstellen von SSL Zertifikaten mit acme.sh:
Jetzt erstellen wir das eigentliche Zertifikat mit folgendem Befehl (Document Root unbedingt anpassen entsprechend der Ausgabe aus vorherigem Schritt):
acme.sh --issue -w /home/crewdegd/example.com -d example.com -d www.example.com --force
Dieser Befehl erzeugt sowohl für die example.com als auch für die www.example.com Domain ein gültiges SSL Zertifikat. Wenn man nur die Domain ohne www will, kann man den „-d www.example.com“ Eintrag einfach weglassen.
Das Ganze dauert jetzt einen Moment lang und man sieht zwischendurch ein paar Meldungen wie „Processing, The CA is processing your order, please just wait. (1/30)“, „Success“, „Cert Success“ usw.
Zum Schluss wir das Zertifikat angezeigt und die Pfade für „Your cert is in…“, „Your cert key is in…“, „The intermediate CA cert is in…“ sowie „And the full chain certs is there…“ in beruhigend grüner Schrift ausgegeben.
Soweit so gut. Wenn es hier nicht zum gewünschten Ergebnis oder zu Fehlermeldungen gekommen ist, unbedingt den letzten acme.sh Befehl nochmal checken, ob der Document Root Pfad richtig übernommen wurde (häufigster Fehler) und ob die Domainnamen richtig sind (zweithäufigster Fehler).
Übernahme des erzeugten SSL Zertifikats in cPanel:
Nun muss das erzeugte SSL Zertifikat auch noch in cPanel übernommen werden.
Anstatt die Daten des Zertifkats nun mühsam mit Copy&Paste in das cPanel manuell zu übertragen gibt es einen einfachen Befehl, der dies direkt im Terminal veranlasst:
acme.sh --deploy --deploy-hook cpanel_uapi --domain example.com --domain www.example.com
Hierbei sind lediglich wieder die Domain-Einträge an die entsprechend vorher schon verwendeten Einträge anzupassen (ggf. auch wieder mit oder ohne www).
Auch das dauert einen kleinen Moment und dann sollten u.a. die Meldungen „Certificate successfully deployed“ und „Success“ erscheinen.
Damit ist die Einrichtung komplett erfolgt und die Zertifikate werden immer vor Ablauf der 60-tägigen Gültigkeit durch den Cronjob automatisch verlängert.
Finaler Check, ob alles geklappt hat:
Um nochmal zu prüfen, ob alles wirklich geklappt hat, kann man im cPanel im Bereich „Security“ den Eintrag „SSL/TLS Status“ aufrufen (das ist nicht der Namecheap SSL Eintrag“ unter „Exclusive for Namecheap Customers“ ganz oben – den kann man fortan getrost vergessen). In der Liste der Domains sollte man seine „example.com“ finden mit grünem Kreis um „dv“ und Schloss und dem Hinweis „Domain Validated“. Ausserdem gibt es einen Link zu „View Certificate“. Wenn man diesem Link folgt, sieht man eine Certificate ID, die Domains (mit oder ohne „www“ wie man es vorher ausgewählt hat), den Issuer „ZeroSSL“, den Key und das Expiration Datum.
Wichtig ist, dass hier jetzt „ZeroSSL“ steht. Bei SSL Zertifikaten, die von Namecheap (kostenpflichtig) vergeben werden, seht dort i.d.R. „Sectigo Limited“ oder etwas ähnliches – jedenfalls nicht ZeroSSL.
Wenn man nun die eigene Domain aufruft, kann es sein, dass bis zu einer Stunde noch ein Zertifikats-Error oder ein vorher verwendetes Zertifikat angezeigt wird. Das liegt oft am Cache des Browsers, darum einfach mal mit einem anderen Browser oder Rechner versuchen und daran nicht stören.
Was noch?
Weitere Zertifikate anlegen
Will man nun für weitere Domains noch Zertifikate anlegen, so geht das weitestgehend analog. Eine Ausnahme ist das SSL Zertifikat der „Hauptdomain“, des Hosting Pakets. Diese Domain hat kein eigenes „Domainverzeichnis“ im Document-Root sondern die Inhalte liegen im Unterverzeichnis „www“. Hier muss man also logischerweise den jeweiligen Domainnamen verwenden aber bei den Pfaden anstatt des Domainverzeichnisses www verwenden.
Beispiel Document Root: /home/crewdegd/www
Ändern der E-Mail Adresse für Zertifikatsmitteilungen
Will man, aus welchem Grund auch immer, später einmal die E-Mail Adresse ändern, die man bei der Account-Erstellung dem acme.sh-Skript mitgeteilt hat, so lässt sich dies auch recht einfach mit folgendem Befehl erreichen:
acme.sh --update-account --accountemail newemail@example.com
Verlängerung der Zertifikate manuell erzwingen
Grundsätzlich sollte es nicht nötig sein, aber wenn es vorkommt, dass ein Zertifikat nicht automatisch durch den Cronjob verlängert wird, kann man dies mit folgendem Befehl auch manuell erzwingen:
acme.sh --renew -d example.com --force
acme.sh Skript automatisch aktualisieren
Da das acme.sh Skript immer weiterentwickelt wird, bietet es sich an auch das Skript aktuell zu halten. Das geht einmalig mit folgendem Befehl, der dafür sorgt, dass automatisch immer die neueste Version von acme.sh verwendet wird:
acme.sh --upgrade --auto-upgrade
E-Mails von Namecheap zur Zertifikatsverlängerung
Ebenfalls wichtig: Namecheap kann weiterhin E-Mails schreiben, dass das SSL Zertifikat ausläuft und dass es (kostenpflichtig) verlängert werden soll. Das bezieht sich dann auf das (alte) SSL Zertifikat von Namecheap und kann ignoriert werden (zumindest für die Domains, die jetzt ein selbst erstelltes ZeroSSL-Zertifikat haben, das mit dem acme.sh Script angelegt wurde).
Noch mehr Infos zu acme.sh…
…gibt es auf der Github Seite des acme.sh Projekts.