HTTPs auf eigenem VServer

Finalspace

Lt. Junior Grade
Registriert
Sep. 2009
Beiträge
387
Hallo,

ich habe schon seit Jahren einen eigenen Linux VServer (Debian) angemietet und nutze den für meine Familie ausschließlich privat.
Der Server ist bisher nur über die IP erreichbar, hat daher keine Domain und dass soll auch in Zukunft so bleiben. Aber er nutzt kein SSL, sprich der Apache sendet alles unverschlüsselt. Das mögen moderne Browser heutzutage nicht und meine Dienste werden als "Sicherheitsrisiko" erkannt.

Daher möchte nun den HTTP Server zumindest mit SSL absichern, allerdings habe ich davon keinen blassen schimmer.
Ich weiß lediglich dass man ein SSL Zertifikat brauch und man Kram in der apache conf eintragen muss.

Jetzt meine Fragen dazu:

  • Was brauch ich alles damit ich den Apache mit SSL absichern kann?
  • Alle kostenlose Zertifikate die ich gefunden habe benötigen eine Domain, geht das auch ohne Domain?
  • Kann ich ein SSL Zertifikat auch selbst erstellen?
  • Mein Hoster "Hetzner" bietet nur Business Zertifikate an, allerdings nur mit Jahreslaufzeit (35 Euro) und das ist mir definitiv zu teuer.

Wäre super wenn Ihr mir da weiterhelfen könntet ;) Danke.
 
Meines Wissens nach ist ein SSL Zertifikat immer für eine Domain ausgestellt - ohne Domain wird SSL daher schwer. Du könntest zwar eines hinterlegen würdest aber dann auch eine Fehlermeldung im Browser bekommen (weil der Name des Zertifikats nicht zur IP passt bzw. dem "Domainnamen").

Ich würde in dem Kontext eine Domain anmieten und mit Lets Encrypt arbeiten.
 
  • Gefällt mir
Reaktionen: Ebrithil und konkretor
Finalspace schrieb:
Kann ich ein SSL Zertifikat auch selbst erstellen?
Du kannst es kostenlos mit Let's Encrypt erstellen. Du brauchst eine CA, die von deinem Browser anerkannt ist, sonst bekommst du einen Zertifikatsfehler, den du aber auch ignorieren kannst (du musst die Fehlermeldung im Browser wegklicken). Wenn dich das nicht stört, dann kannst du es aber auch selbst ausstellen.
 
Eine Domain kriegst du, wenn du nicht all zu wählerisch bist, schon für 3-5€ im Jahr zb bei Namecheap.
Das wäre es mir definitv wärt, dann könntest du dir über LetsEncrypt kostenlos ein Zertifikat ausstellen lassen das auch von allen gängigen Browsern anerkannt wird.
 
Also für https benötigst du immer eine Domain. Das benötige Zertifikat kannst du nämlich nur für eine Domain ausstellen, nicht für eine IP. Zertifikate kann man mittlerweile recht einfach und kostenlos bei lets encrypt ausstellen lassen.
 
Finalspace schrieb:
  • Was brauch ich alles damit ich den Apache mit SSL absichern kann?

Ein Zertifikat.

Finalspace schrieb:
  • Alle kostenlose Zertifikate die ich gefunden habe benötigen eine Domain, geht das auch ohne Domain?

Technisch ist es möglich, ob es jemand für lau macht, weiß ich nicht.


Finalspace schrieb:
  • Kann ich ein SSL Zertifikat auch selbst erstellen?

Ja. Browser beschweren sich dann, aber man könnte das eigene Zertifikat dort hinterlegen, um Fehlermeldungen zu vermeiden, wenn man partout kein Geld investieren möchte.
 
ssl/Zertifikat geht auch auf eine IP, allerdings nur selbstausgestellt, dann meckern die Browser halt immer :)

Wenn du was willst wo die nicht mehr meckern brauchst du eine Domain. Hierfür meine Empfehlung: Namecheap (USA) für alles außer .eu und .de und Murauer Group für .eu und .de (Österreich)

dann den Certbot nehmen, oder acme.sh (das zweitere nutze ich aktuell)
 
Lets Encrypt stellt keine Zertifikate für IPs aus. Dir bleibt nur ein Selbstsigniertes übrig oder eine Domain zu kaufen und dann LE zu nutzen.
 
@Rossie: Let's Encrypt "macht das für lau" und diese CA ist in allen gängigen und aktuellen Browsern und Betriebssystemen anerkannt

@Finalspace Es gäbe eine Möglichkeit. Dafür benötigst zwar trotzdem eine beliebige Domain aber dein Webserver muss darüber nicht erreichbar sein ;)
Zuerst besorgst du dir irgendeine günstige Domain. Dann nutzt du den Certbot mit DNS-Challenge (siehe Doku) und gibst bei der Erstellung des Zertifikats im SAN-Feld (https://en.wikipedia.org/wiki/Subject_Alternative_Name) auch die IP deines Servers an. Das daraus entstehende Zertifikat ist dann für die Domain und die IP nutzbar.
Im Apache bindest du das dann noch ein und machst ein mod-rewrite von Port 80 auf 443 oder wie auch immer du dies sonst lösen möchtest.

Ja, per DNS-Abfrage komme ich von der Domain zu deinem Server aber wenn der Apache nur explizit auf IP reagiert, dann sehe ich nix und genauso wenn jemand den Server per IP anspricht und sich das Zertifikat ansieht, findet er die Domain, who cares?
Security by Obscurity funktioniert halt nicht, was schon zig mal bewiesen wurde falls dass dein Ansatz sein sollte bzgl. der Erreichbarkeit des Servers.
 
snaxilian schrieb:
Dann nutzt du den Certbot mit DNS-Challenge (siehe Doku) und gibst bei der Erstellung des Zertifikats im SAN-Feld (https://en.wikipedia.org/wiki/Subject_Alternative_Name) auch die IP deines Servers an. Das daraus entstehende Zertifikat ist dann für die Domain und die IP nutzbar.
Code:
$ certbot certonly --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns-01 -d domain.tld -d '*.domain.tld' -d 1.2.3.4
Requested name 1.2.3.4 is an IP address. The Let's Encrypt certificate authority will not issue certificates for a bare IP address.
https://community.letsencrypt.org/t/certificate-for-public-ip-without-domain-name/6082/6
 
snaxilian schrieb:
Let's Encrypt "macht das für lau" und diese CA ist in allen gängigen und aktuellen Browsern und Betriebssystemen anerkannt

Let's encrypt benötigt aber eine Domain und die will der TE ja nicht.
 
@Yuuri Klappt es auch wenn du anstatt mehrfacher -d domain.tld eine Komma-getrennte Liste nimmst?
Aber in der Tat sehr ärgerlich, wenn sich Letsencrypt da nicht an gängige RFCs hält und so einen Sonderweg wählt auch wenn die Argumente teils nachvollziehbar sind.

Dann bleibt dem TE aber in der Tat wohl wirklich nur der Weg über eine Domain oder ein selbst erstelltes Zertifikat und das eben bei allen relevanten Endgeräten einzubinden.
 
Rossie schrieb:
Let's encrypt benötigt aber eine Domain und die will der TE ja nicht.
Eben. Da die öffentlichen CAs (wie LetsEncrypt) für IP-Adressen keine Certs ausstellen, fallen sie aus. Aber selbst erstellen kann man sich natürlich eins.

Zwei grundsätzliche Varianten sind denkbar: a) ein selbstsigniertes Zertifikat oder b) eine eigene CA erstellen und von der eins ausstellen lassen. Beide Varianten unterscheiden sich aus Endnutzersicht (also für den am Webbrowser sitzenden Menschen, der die sichere Verbindungen nutzen möchte) vor allem dadurch, wie dem Webbrowser einmalig klar gemacht wird, dass er dem selbstsignierten Zertifikat bzw. der Eigenbau-CA vertrauen soll.

@Finalspace
Das üblicherweise verwendete Werkzeug heißt openssl. Mit den richtigen Stichworten (z.B: self-signed cert + apache + openssl für die erste Variante) findest du im Web viele detailierte Schritt-für-Schritt-Anleitungen, wie du es erstellst und in die Apache integrierst. Direkt für dein Debian sollte das Beispiel hier taugen.

Die eigentliche Arbeit dauert nur wenige Minuten. Ratsam ist aber, sich nebenbei soweit mit der Materie vertraut zu machen, das man grob weiß, was man da eigentlich anstellt.
 
Zuletzt bearbeitet:
Selbst wenn Du Dich für ein self-signed Cert entscheidest, würde ich Dir empfehlen den SSL-Config-File Generator von Mozilla zu nutzen. Damit generierst Du Dir eine sehr sichere Konfiguration, die auf ssllabs.com mit A+ bewertet wird (wenn man den Vertrauensstatus Deines Zertifikats ausklammert)
https://mozilla.github.io/server-side-tls/ssl-config-generator/

Code:
<VirtualHost *:443>
    ...
    SSLEngine on
    SSLCertificateFile      /path/to/signed_certificate_followed_by_intermediate_certs
    SSLCertificateKeyFile   /path/to/private/key

    # Uncomment the following directive when using client certificate authentication
    #SSLCACertificateFile    /path/to/ca_certs_for_client_authentication


    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security "max-age=15768000"
    ...
</VirtualHost>

# modern configuration, tweak to your needs
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder     on
SSLCompression          off
SSLSessionTickets       off

Das OCSP Stapling solltest Du rausnehmen, da Dein Zertifikat ja nicht vertrauenswürdig ist. Wenn Du irgendwann einmal eine Domain beantragst, solltest Du es wieder rein nehmen.

Ach ja, eine Sache noch. Ich hoffe Du hast eine Firewall für Deinen Server. Wenn nein kümmere Dich ebenfalls darum und sperre alle Ports und greife ggf. nur via VPN auf den Server zu.
 
Wenn du dir keine Domain zulegen möchtest kannst du auch schauen ob dein Server über die Domain deines Hosters erreichbar ist. Bei hosteurope ist das Beispielsweise der Fall.
 
Zurück
Oben