Wie erhalte ein Zertifikat für eine Subdomain die lokal genutzt wird?

  • Hallo,

    Aktuelle Stand:
    Ich habe das Webhosting 2000 gebucht und meine Domain dort registriert, sagen wir mal einfach "example.com". Die Domain besitzt ein gültiges Let's Encrypt Zertifikat und kann somit für das HTTPS Protokoll abgerufen werden.


    Desweiteren habe ich einen Docker Container laufen mit Nextcloud (Bisher nur auf eine lokale IP-Adresse, unverschlüsselt mit HTTP und per VPN zugreifbar ).


    Vorhaben/Ziel:
    Ich möchte eine Subdomain haben: nextcloud.example.com.
    Die Subdomain sollte jedoch nicht öffentlich sein, sondern nur per VPN aufrufbar und sollte unbedingt HTTPS unterstützen.


    Ich könnte in der /etc/hosts für nextcloud.example.com die lokale IP eintragen, jedoch ist diese dann nicht HTTPS verschlüsselt.

    Wie gehe ich hierbei vor?

  • was würde hier gegen ein selbstsigniertes SSL-Zertifikat sprechen?

    dann brauchst auch keinen DNS-Eintrag in irgend einem öffentlichen DNS-Server dafür erstellen;

    und niemand weiß etwas davon; weil ja die Domain ohnehin von Dir registriert wurde, kollidiert das auch nirgends;

    Grüße / Greetings

    Walter H.


    RS, VPS, Webhosting - was man halt so braucht;)

  • cltrmx klar, beim Aufwand ist es eine Frage, wie man bei sowas herangeht; ich hab meine lokale CA, das Stammzert. hab ich einmal eingerichtet;

    die Zwischen- und Endzertifikate akzeptieren die Clients damit automatisch, sodaß ich z.B. am Router das End-(SSL-)Zertifikat problemlos tauschen kann;

    (läuft übrigens kommendes Jahr nach 5 Jahren ab)


    daran denken muss man; sonst tuts besonders weh, wenn der Browser einem nicht mehr reinläßt;

    beim SSL-Intercept-CA Zertifikat des Proxies wär es der SuperGAU ^^

    Grüße / Greetings

    Walter H.


    RS, VPS, Webhosting - was man halt so braucht;)

  • Abgesehen von der (zu bevorzugenden Variante) mittels DNS challenge könntest du auch die Subdomain zu dem Hauptzertifikat hinzufügen und auf den Nextcloud-Server kopieren (zum Beispiel automatisch per after-renew-hook)


    Rein aus Interesse: Normalerweise ist der Datenverkehr per VPN verschlüsselt. Wenn(?!) dein Nextcloud-Server dein VPN Server ist, wieso brauchst du zusätzlich noch HTTPS?

  • Hab schon seit einigen Jahren eine Domain die für mein internes Netz genutzt wird. Via acme.sh hole ich mir für diese Domain ein Wildcard Zertifikat was via Ansible auf alle Systeme verteilt wird welche ich lokal laufen habe. Funktioniert problemlos.


    Damit das Ganze funktioniert gibts entsprechende DNS Overrides in meinem lokalen DNS Server. Habe damals mit einem einfachen Override im DNS von OPNSense/OpenWRT/DD-WRT Router angefangen, mittlerweile habe ich entweder einen pihole (wo man auch DNS Overrides machen kann) oder einen bind9 an allen Locations laufen.


    Wenn es sich um einen Dienst handelt der auch im Internet erreichbar ist löst mein lokaler DNS die Domain auf die lokale IP auf und der öffentliche DNS zeigt via CNAME auf meine DynDNS Domain des Internet Anschlusses.

  • Erstmal vielen Dank für die Tipps und Vorschläge.
    Versuche das über acme.sh script durchzuführen als Wildcard und anhand dieser Anleitung.


    Code: https://herrdoering.de/de/wildcard-zertifikate-von-letsencrypt-mit-dns-abfrage/#installation
    sudo ./acme.sh --install \
    --home /etc/acme.sh \
    --config-home /etc/acme.sh/config \
    --cert-home  /etc/acme.sh/certs \
    --accountemail  "admin@example.de" \
    --accountkey  ~/.acme/myaccount.key \
    --accountconf ~/.acme/myaccount.conf 


    Die Umgebungsvariablen (env) habe ich genau so eingetragen:

    Code: https://herrdoering.de/de/wildcard-zertifikate-von-letsencrypt-mit-dns-abfrage/
    export NC_Apikey="<Apikey>"
    export NC_Apipw="<Apipassword>"
    export NC_CID="<Customernumber>"

    Um an die Zugangsdaten zu kommen, habe ich die Anleitung befolgt: https://www.netcup-wiki.de/wiki/CCP_API
    Das Passort habe ich über den Button API-Passwort generieren erstellt.

    Nun erhalte ich folgenden Fehler wenn ich versuche ein Zertifikat zu erstellen:


    Der apikey kann ja nicht falsch sein. Zudem habe ich auch nur den einen.
    Verstehe auch nicht warum er als CA Zerossl verwendet und nicht Lets Encrypt.


    Die Codes sind frei-erfunden für den Post.



  • ZeroSSL: Das ist ne Eigenheit von acme.sh. Man kann das durch eine Option einfach ändern, dann nutzt der Client die Lets Encrypt CA.


    Den Fehler würde ich wie im Output beschrieben mal debuggen.


    Die Credentials kann man auch einfach vor dem acme.sh Command angeben:


    Code
    NC_CID=421111 NC_ApiKey=foo ./acme.sh --issue ....
  • Nun erhalte ich folgenden Fehler wenn ich versuche ein Zertifikat zu erstellen:

    Bash
    […]
    [Do 7. Okt 13:50:36 CEST 2021] No Credentials given
    […]

    Verstehe auch nicht warum er als CA Zerossl verwendet und nicht Lets Encrypt.

    Da hilft wohl wirklich nur ein erster Blick ins Log nach Nutzung von "--debug". Wie es aussieht, werden den Zugangscodes nicht übernommen.

    Der Wechsel auf ZeroSSL (wohl aufgrund eines Sponsorings) wurde bei Erscheinen der Version 3.0.0 bekanntgegeben, vergleiche hier.

    VServer IOPS Comparison Sheet: https://docs.google.com/spreadsheets/d/1w38zM0Bwbd4VdDCQoi1buo2I-zpwg8e0wVzFGSPh3iE/edit?usp=sharing


  • Ich konnte das Zertifikat damit erstellen, das hat auch alles geklappt.
    Jedoch komme ich nicht weiter, oder ich habe einen logikfehler in meinem Vorhaben.

    Die Nextcloud läuft bei mir lokal (192.168.2.2) und dort in den Apache Config habe ich das Zertifikat auch eingefügt.
    Habe versucht über nextcloud.example.de darauf zuzugreifen, dann öffnet der die Webseite von netcup als Subdomain mit der Nachricht: "Domain noch nicht zugewiesen / in Zuweisung".

    Dann habe ich im hosts-file die lokale IP für nextcloud.example.de eingetragen. Funktioniert, aber immer noch kein HTTPS. Dort kommt die Fehlermeldung von Chrome, dass der Host die Verbindung abgelehnt hat.

    Jemand ne Idee, was ich hier falsch mache?