Martin Hein: vhosts per https nicht erreichbar

Hallo Forum,

ich habe in meiner httpd.conf einige vhosts definiert. das sieht so aus:

-----------------------------------------
NameVirtualHost *:80

<VirtualHost *:80>
ServerName root.home.net
DocumentRoot Z:/htdocs/root
DirectoryIndex index.php
<Directory Z:/htdocs/root>
AllowOverride AuthConfig
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName xampp.home.net
DocumentRoot D:/Programme/xampp/htdocs
DirectoryIndex index.php
</VirtualHost>
-----------------------------------------

Nun habe ich mal ganz naiv versucht, die lokale Domian statt über:

http://root.home.net

... über:

https://root.home.net

Es ging nicht ;( es wurde der Inhalt des (Default-)DokumentRoots
angezeigt.

Wie sorge ich dafür, dass alle meine eingerichteten vhosts auch
über https funktionieren ?

danke für die Tipps und

beste gruesse,
martin

  1. Hallo martin,

    Wie sorge ich dafür, dass alle meine eingerichteten
    vhosts auch über https funktionieren ?

    hmm,
    indem Du auf Deiner Maschine OpenSSL und die noetigen Zertifikate einrichtest.
    Siehe auch Hypertext Transfer Protocol Secure.

    Gruss Norbert

  2. Moin!

    ich habe in meiner httpd.conf einige vhosts definiert. das sieht so aus:

    Wie man sieht, nimmst du ausführlich Bezug auf den Port 80.

    Nun habe ich mal ganz naiv versucht, die lokale Domian statt über:

    http://root.home.net

    ... über:

    https://root.home.net

    HTTPS läuft über Port 443.

    Wie sorge ich dafür, dass alle meine eingerichteten vhosts auch
    über https funktionieren ?

    HTTPS und VHosts hat sowieso einige Fallstricke, weil die SSL-Zertifikate IP-basiert benutzt werden, der VHost aber erst nach Zustandekommen der Verbindung bekannt gemacht wird. Du kriegst also entweder ständig Meldungen, dass das Zertifikat nicht zur URL paßt, oder du baust dir ein Wildcard-Zertifikat für "*.home.net", mit dem du dann anstelle des Sternchens beliebige Hostnamen als VHost benutzen kannst. Alternativ kannst du natürlich von namensbasierten VHosts auf IP-basierte VHosts umsteigen und dann je VHost einfach ein passendes Zertifikat installieren.

    Grundsätzlich gesprochen fehlt es dir aber erstmal ganz schlicht an der Aktivierung deiner VHosts für SSL. :)

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Hallo Sven,

      HTTPS läuft über Port 443.

      das hatte ich auch schon herausgefunden. Und ich hätte einfach
      die 80 gegen 434 austauschen können. ( Wäre ja naheliegend )
      Das habe ich garnicht erst probiert, weil die Domains dann logischerweise (zumindest) nicht mehr über http erreichbar
      gewesen wären. Daher frage ich mich (bzw. euch ;), wo und wie
      ich die 434 in meiner Konfiguration unterbringe.

      HTTPS und VHosts hat sowieso einige Fallstricke, weil die SSL-
      Zertifikate IP-basiert benutzt werden, der VHost aber erst nach
      Zustandekommen der Verbindung bekannt gemacht wird. Du kriegst
      also entweder ständig Meldungen, dass das Zertifikat nicht zur
      URL paßt, oder du baust dir ein Wildcard-Zertifikat für
      "*.home.net", mit dem du dann anstelle des Sternchens beliebige
      Hostnamen als VHost benutzen kannst. Alternativ kannst du
      natürlich von namensbasierten VHosts auf IP-basierte VHosts
      umsteigen und dann je VHost einfach ein passendes Zertifikat
      installieren.

      Danke für die ausführliche Info. Ein Fake-Zertifikat zu erstellen
      wäre die Kür. Im Moment ist es ja so, dass wenn ich einen der vhosts
      mit https aufrufe, ich auf das DocumentRoot des Servers gelange.
      Der Browser meckert natürlich, aber das hab ich erstmal ignoriert.

      Grundsätzlich gesprochen fehlt es dir aber erstmal ganz schlicht an der Aktivierung deiner VHosts für SSL. :)

      genauso sehe ich das auch. Aber wie mache ich das bei der
      Konfiguration. Oder defacto: Wo scheibe ich die 434 rein ?

      beste gruesse,
      martin

      1. Hello,

        kann man beim Listen Kommando nicht beides angeben?

        Und btw: was hast Du mit Domain Systems Escrow zu tun?

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

        1. Hallo,

          ich hab keine Ahnung, wie ich die 434 in meiner httpd.conf
          untergebracht kriege. Wenn ich "NameVirtualHost *" schreibe,
          also die ":80" weglasse, krieg ich ein 'Bad request!' vom
          Browser.

          Und btw: was hast Du mit Domain Systems Escrow zu tun?

          Hoffentlich nix. Sagt mir nix, aber klingt gefährlich ;)

          beste gruesse,
          martin

          1. Hello,

            Und btw: was hast Du mit Domain Systems Escrow zu tun?

            Hoffentlich nix. Sagt mir nix, aber klingt gefährlich ;)

            ...na nur, weil du die Domain-Adresse "root.home.net" benutzt hast.

            Harzliche Grüße vom Berg
            http://bergpost.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  3. Hallo,

    daran hab ich auch gerade gebastelt und es läuft *jubel* hier also ein paar Tipps zur Einrichtung:

    1. Statt die httpd.conf zu missbrauchen, würde ich empfehlen eine eigene vhosts-Datei anzulegen. Es müsste eigentlich ein Unterverzeichnis vhosts.d geben. Hier legst du einfach z.b. vhost-meinhost.conf an und schreibst deine Konfiguration rein.

    2. HTTPS ist über Port 443 verfügbar. Deine Konfiguration sagt nur etwas über Port 80 aus. Also müsstest du hinzufügen:

      
    # Deine virtuellen Hosts  
     NameVirtualHost *:80  
     NameVirtualHost *:443  
      
    # Beispiel für Port 80  
    # für jeden Domainnamen wiederholen, falls er woanders hinzeigt  
    # Ansonsten nutze ServerAlias  
     <VirtualHost *:80>  
       ServerName www.example.org  
       DocumentRoot /srv/www/htdocs/  
       ...  
     </VirtualHost>  
     <VirtualHost *:80>  
       ServerName this.example.org  
       DocumentRoot /srv/www/htdocs/this/  
       ...  
     </VirtualHost>  
      
    # für SSL müssen ebenfalls diese Defintionen gemacht werden  
      
    <IfDefine SSL>  
     <IfDefine !NOSSL>  
      <VirtualHost *:443>  
        ServerName www.example.org  
        DocumentRoot /srv/www/htdocs/this/  
        # SSL anschalten:  
        SSLEngine On  
        # und Zertifikate einfügen  
        SSLCertificateFile /pfad/zum/Zertifikat  
        SSLCertificateKeyFile /pfad/zum/Schlüssel  
        # Hier gibts noch weitere Einstellungen, einfach nachlesen - in der vhost-template.conf steht alles drin  
        ...  
      </VirtualHost>  
      
      # nächster Host  
      
     </IfDefine>  
    </IfDefine>  
      
    
    

    Wie meine Vorredner allerdings schon sagten, geht für ein IP leider nur ein Zertifikat, also muss ein *.example.org her.

    Ob mein obiges Vorgehen allerdings der Weisheit letzter Schluss ist, wage ich zu bezweifeln. Die richtigen Apache-Cracks haben dafür sicherlich eine viel bessere Lösung auf Lager.

    Gruß,
    Leeloo

    --
    "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
    1. Hallo,

      ach, hab noch einen ziemlich hilfreichen Eintrag gefunden. Übrigens ebenfalls aus diesem Forum ;-)

      Gruß,
      Leeloo

      --
      "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
    2. Hallo Leeloo,

      danke für Deinen Input. Das war exakt das, was ich in diesem
      Entwicklungsstadium gebraucht habe:

      1. zusätzlich 'NameVirtualHost *:443' einfügen.
      2. zusätzlichen vhost für 443 definieren.

      Auch wenn das sicher nicht die eleganteste Lösung ist, jeden
      vhost dann doppelt definieren zu müssen, aber es funktioniert
      und damit reicht's an dieser Stelle.

      Ergebnis: Das Zertifikat ist ungültig und der Browser meckert
      deshalb, aber ich kann meine Doamin über https aufrufen.

      Danke aber auch für den Link zu den vertiefenden Infos.
      Damit setze ich mich auseinander, wenn ich die Zeit dafür
      habe.

      beste gruesse,
      martin

      1. Hallo Martin,

        Auch wenn das sicher nicht die eleganteste Lösung ist, jeden
        vhost dann doppelt definieren zu müssen, aber es funktioniert
        und damit reicht's an dieser Stelle.

        Diesbezüglich hilft Dir eventuell mod_macro.

        Viele Grüße,
        Christian

        1. Hallo,

          Auch wenn das sicher nicht die eleganteste Lösung ist, jeden
          vhost dann doppelt definieren zu müssen, aber es funktioniert
          und damit reicht's an dieser Stelle.

          Diesbezüglich hilft Dir eventuell mod_macro.

          hey, das ist ja mal ne Idee :-) THX

          Gruß,
          Leeloo

          --
          "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
      2. Hallo,

        danke für Deinen Input. Das war exakt das, was ich in diesem
        Entwicklungsstadium gebraucht habe:

        Bitte, gern :-)

        1. zusätzlich 'NameVirtualHost *:443' einfügen.
        2. zusätzlichen vhost für 443 definieren.

        jupp, genau. Das ist die Kurzfassung ;-)

        Auch wenn das sicher nicht die eleganteste Lösung ist, jeden
        vhost dann doppelt definieren zu müssen, aber es funktioniert
        und damit reicht's an dieser Stelle.

        *wieder zu stimm* Leider weiß ich mir auch grad net anders zu helfen. Aber wie du schon meintest: Es funktioniert...

        Ergebnis: Das Zertifikat ist ungültig und der Browser meckert
        deshalb, aber ich kann meine Doamin über https aufrufen.

        Mit einem *.example.org-Zertifikat funzts dann mit mehreren verschiedenen Subdomains.

        Danke aber auch für den Link zu den vertiefenden Infos.
        Damit setze ich mich auseinander, wenn ich die Zeit dafür
        habe.

        Tu das.

        Gruß,
        Leeloo

        --
        "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
        1. Hallo,

          Danke aber auch für den Link zu den vertiefenden Infos.
          Damit setze ich mich auseinander, wenn ich die Zeit dafür
          habe.

          ... oder wenn sich die Notwenigkeit früher ergibt ;)

          ich habe erreicht, dass ich https://domain.net eingeben kann
          und der indianer mir den im entsprechenden vhost definierten
          Inhalt anzeigt. So weit so gut ;) Jetzt muss ich in meinem
          PHP--Script die Info haben, ob die Seite über http oder https
          aufgerufen worden ist. Ich hab versucht, das aus den
          Umgebungsvariablen rauszukrigen:

          <?=$_SERVER['HTTPS'];?> ... erzeugt keine Ausgabe.
          <?=$_SERVER['REMOTE_PORT'];?> ... sagt '80'

          Sieht so aus, als würde die Seite garnicht per SSL gesendet.
          Weil in der Konfiguration von http.conf etwas fehlt schickt,
          kann der Server die Anfrage mit https zwar beantworten, schickt
          die Seite aber unverschüsselt über Port 80.

          Fragt sich nur, was genau fehlt.

          beste gruesse,
          martin