Ankündigung

Einklappen
Keine Ankündigung bisher.

HS mit Apache2/Reverse-Proxy und Zertifkatsbasierender Authentifizierung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    HS mit Apache2/Reverse-Proxy und Zertifkatsbasierender Authentifizierung

    Hi,
    ich versuche mal zu Dokumentieren wie man einen HS aus dem Internet erreichbar mach - und das ganze per Zertifikat absichert.

    Voraussetzung:
    ein Linux-System auf dem ein Apache 2 läuft.
    Eine selbst konfigurierte CA mit der man sich die keys erzeugen kann.
    Ein einfacher weg dürfte über die easyRSA sein:
    RSA Key Management
    Dort die Kapitel INSTALL und BUILD YOUR OWN ROOT CERTIFICATE AUTHORITY abarbeiten.

    Falls für euer Linux kein easy-rsa package verfügbar ist - hier die quelle:
    https://github.com/OpenVPN/easy-rsa/...r/easy-rsa/2.0
    (auf dem Wiregate ist easy-rsa imho installiert)

    Den key für den Webserver erzeugt man mit
    ./build-key <meinwebserver>
    (ergebniss müsste ein .crt und ein .key sein)

    dann vermutlich Client-Keys erzeugen mit
    ./build-key-pkcs12 mycert
    (Ergebnis müsste ein .p12-file sein)

    Bei mir läuft die CA schon eine weile - daher kann ich diesen Teil gerade nicht nachvollziehen.

    Apache:
    in httpd.conf die Proxy module aktivieren:
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_http_module modules/mod_proxy_http.so

    In
    /etc/apache/sites-available/
    eine deue Datei anlegen: vi homeserver
    Code:
    Listen *:81
    NameVirtualHost *:81
    <VirtualHost *:81>
    
        ErrorLog /var/log/apache2/hs-ssl.error.log
        CustomLog /var/log/apache2/hs-ssl.access.log combined
    
        ProxyRequests off
        ProxyPass /  http://<ip-des-hs>:<port>/
        ProxyHTMLURLMap http://<ip-des-hs>:<port>/ /
    
        # SSL
        SSLEngine On
        SSLCipherSuite HIGH:MEDIUM
        SSLCertificateFile    /etc/apache/ssl/keys/webserver.crt
        SSLCertificateKeyFile /etc/apache/ssl/keys/webserver.key
    
        # activate the client certificate authentication
        SSLCACertificateFile /etc/apache/ssl/ca.crt
        SSLVerifyClient require
        SSLVerifyDepth 2
    
         <Location />
    
            #AuthType Basic
            #AuthName "Geschuetzter Bereich"
            #AuthUserFile /etc/apache2/htpasswd
            #Require valid-user
    
            Options Indexes FollowSymLinks MultiViews
    
            Order allow,deny
            allow from all
            SetOutputFilter  proxy-html
            RequestHeader    unset  Accept-Encoding
    
            #Reverse Proxy
            ProxyPassReverse /
    
        </Location>
    
    </VirtualHost>
    Die beiden http://<ip-des-hs>:<port> ersetzen durch die richtige IP-Adresse und Port.

    In /etc/apache2/sites-enabled die Configuration verlinken
    Code:
    cd /etc/apache2/sites-enabled
     ln -s ../sites-available/homeserver
    und Apache2 re-starten
    /etc/init.d/apache 2 restart

    Jetzt muss man noch das Webserver-Zertifikat importieren & vertrauen - dazu die meinwebserver.crt einfach per Mail oder USB-Stick zum Client schicken und anklicken.
    Dazu noch den privaten Schlüssel (die das .p12-file) auf den Client installieren - dabei auf sicheren Transportweg achten.

    ... und jetzt: Viel erfolg. Feedback & Verbesserungsvorschläge sind Erwünscht.

    Gruß
    Thorsten

    #2
    Hallo Thorsten,
    sowas hab ich gesucht.
    Wenn ich Zeit hab probier ich das mal aus. Mein Linuxsystem ist ja jetzt frei (Misterhouse hat ausgedient) da HS jetzt vorhanden ist.

    Ich berichte dann.



    Viele Grüße

    Ralf
    Gruß

    Ralf

    Kommentar


      #3
      Hallo Thorsten,

      ich kommentier mal einige Punkte, um das zu vervollständigen.

      Bei mir ist es eine Debian Squeeze Server daher habe ich mal die Debian-Paket Mechanismen beschrieben.

      Zitat von ThorstenGehrig Beitrag anzeigen
      Voraussetzung:
      ein Linux-System auf dem ein Apache 2 läuft.
      Eine selbst konfigurierte CA mit der man sich die keys erzeugen kann.
      Ein einfacher weg dürfte über die easyRSA sein:
      RSA Key Management
      Dort die Kapitel INSTALL und BUILD YOUR OWN ROOT CERTIFICATE AUTHORITY abarbeiten.
      Mit folgendem Befehl wird das Openvpn Paket und das Apache2-Proxy installiert.
      Code:
      apt-get install openvpn libapache2-mod-proxy-html
      Den key für den Webserver erzeugt man mit
      ./build-key <meinwebserver>
      (ergebniss müsste ein .crt und ein .key sein)

      dann vermutlich Client-Keys erzeugen mit
      ./build-key-pkcs12 mycert
      (Ergebnis müsste ein .p12-file sein)

      Bei mir läuft die CA schon eine weile - daher kann ich diesen Teil gerade nicht nachvollziehen.
      Ich habe es so umgesetzt:

      Code:
      mkdir /etc/apache2/ssl
      cd /etc/apache2/ssl
      cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* ./
      Jetzt kann man die Datei vars am Ende der Datei editieren (Das wird dann als Vorlage für die folgenden Einträge genutzt):

      Code:
      ...
      # These are the default values for fields
      # which will be placed in the certificate.
      # Don't leave any of these fields blank.
      export KEY_COUNTRY="DE"
      export KEY_PROVINCE="Dein Bundesland"
      export KEY_CITY="Dein Ort"
      export KEY_ORG="Firma oder ???"
      export KEY_EMAIL="mail@irgendwas.de"
      Jetzt ein:

      Code:
      source ./vars
      ./clean-all
      ./build-ca
      Jetzt sollten im keys Unterverzeichnis die Dateien ca.crt und ca.key liegen.

      Den key für den Webserver erzeugt man mit
      ./build-key <meinwebserver>
      (ergebniss müsste ein .crt und ein .key sein)

      dann vermutlich Client-Keys erzeugen mit
      ./build-key-pkcs12 mycert
      (Ergebnis müsste ein .p12-file sein)
      Genau so funktioniert es.
      Die Dateien liegen dann auch im keys Verzeichnis.

      Apache:
      in httpd.conf die Proxy module aktivieren:
      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_http_module modules/mod_proxy_http.so
      Funktioniert, aber unter Debian ist folgendes meiner Meinung nach schöner. Bei der Installation von "libapache2-mod-proxy-html" wird der Befehl schon durchgeführt und somit gleich aktiviert. Aber es muss noch ein Paket mehr aktiviert werden.
      Code:
      a2enmod headers
      In
      /etc/apache/sites-available/
      eine deue Datei anlegen: vi homeserver
      Datei anlegen und folgendes (Datei Pfade) in der Datei anpassen:

      Code:
          # SSL
          SSLEngine On
          SSLCipherSuite HIGH:MEDIUM
          SSLCertificateFile    /etc/apache2/ssl/keys/<meinwebserver>.crt
          SSLCertificateKeyFile /etc/apache2/ssl/keys/<meinwebserver>.key
      
          # activate the client certificate authentication
          SSLCACertificateFile /etc/apache2/ssl/keys/ca.crt
          SSLVerifyClient require
          SSLVerifyDepth 2
      Die beiden http://<ip-des-hs>:<port> ersetzen durch die richtige IP-Adresse und Port.
      Zusätzlich muss noch <meinwebserver> angepasst werden.

      In /etc/apache2/sites-enabled die Configuration verlinken
      Geht einfacher mit:

      Code:
      a2ensite homeserver
      Das erstellt die von Torsten manuel erstellten Links automatisch.

      Was Torsten "unterschlagen" hat ist die Konfiguration des Routers.

      Ein Port (z.B. Port 81 oder 8443) muss auf dem Router an den Server auf dem der Apache läuft geforwarded werden.

      Torsten wir hatten noch über DNS Reflection gesprochen, das habe ich nicht in den Menüs des OpenWRT gefunden.
      Kannst Du mir noch sagen wo das ist?

      Bei mir funktioniert es schon soweit, muss die html Seite auf dem Homeserver noch anpassen.

      Schönen Gruss
      Frank Plass
      Gruß
      Lapheus

      Kommentar


        #4
        Hi
        Danke Frank - so hab ich mir das vorgestellt: Teamwork :-)
        Vielleicht überführen wir das (wenn es final ist) mal ins Wiki - äh Lexikon.

        So - zum DNS-Thema: hab gerade einen Tunnel aufgebaut und schaue in der Konfig nach: Unter Firewall sehen meine Regeln so aus:
        GENERAL SETTINGS
        Protokoll: TCP
        External Port: <je nach geschmack>
        Internal IP-Adress: die des Gira-HS
        Internal Port: <je nach Config>

        ADVANCED SETTINGS
        Redirection Type: DNAT
        Enable NAT Loopback: aktiviert

        Damit kann man dann seinen Server von "innen" und außen gleich ansprechen - also immer https://mein-dns-name.de

        Verbindungen die von innen aufgebaut werden gehen über den Router zum HS, Verbindungen von außen gehen "durch" den Router zum HS.

        Gruß
        Thorsten

        Kommentar


          #5
          Hallo,

          Zitat von ThorstenGehrig Beitrag anzeigen
          Internal IP-Adress: die des Gira-HS
          Ich vermute mal das es nicht die IP des Homeservers sein muss sondern die des Apache Proxys, der leitet ja auf den Homeserver um.

          Richtig?

          Du hattest den Pfad beim testen auf meinem iPhone nicht eingegeben.

          Muss in der homeserver Datei der Pfad angepasst werden?

          So in etwa:

          Code:
              ProxyRequests off
              ProxyPass /  http://<ip-des-[URL="http://redaktion.knx-user-forum.de/lexikon/hs/"]hs[/URL]>:<port>/opt/hsav/
              ProxyHTMLURLMap http://<ip-des-[URL="http://redaktion.knx-user-forum.de/lexikon/hs/"]hs[/URL]>:<port>/opt/hsav/ /
          Bei mir kommt jetzt immer der Login Bildschirm, kann aber kein "Ok" klicken.
          Wo ist das Problem?

          Gruss
          Lapheus
          Gruß
          Lapheus

          Kommentar


            #6
            Hi,

            ach ja:

            Welches Zertifikat(e) muss man wo beim Firefox installieren?
            Hattest Du auch erwähnt, das es da nen Hacken gibt.

            Gruss
            Lapheus
            Gruß
            Lapheus

            Kommentar


              #7
              Hi,
              ja - mit der IP hast du recht - natürlich der Apache nicht der HS...

              Zum Link: doch doch - ich habe den Link mit angegeben
              also https://<domain.info>:<port>/opt/hsav/xxapi.htm

              die start.htm solltest du natürlich nicht nehmen - sondern eine start-datei die die Usernamen&Co schon eingetragen hat.
              Allerdings muss ich zugeben das ich da nicht 100%ig durchblicke - im Browser funktioniert das immmer - als "WebApp" (also Lesezeichen auf dem Screen) hatte ich schonmal ähnliche Zicken (aber nicht auf allen Geräten).
              Auf iPad&co sollten auf jedenfall die Cookies aktzeptiert/eingeschaltet sein (über ein Cookie wird Username&Co weitergegeben)

              Gruß
              Thorsten

              Kommentar


                #8
                Zum Firefox/allgemein: wenn man das ca.crt importiert - und evtl. auch das webserver.crt - sollten die Browser aufhören an den SSL-Zertifikaten rumzumeckern :-)
                Beim ca.crt ist es empfehlenswert/nötig den Zertifikatsspeicher manuell zu wählen - dann sollte man "vertrauenswürdige quellen" anwählen (solange ihr euch selbst vertraut)

                Kommentar


                  #9
                  Nabend,

                  Zitat von ThorstenGehrig Beitrag anzeigen
                  Zum Link: doch doch - ich habe den Link mit angegeben
                  also https://<domain.info>:<port>/opt/hsav/xxapi.htm

                  die start.htm solltest du natürlich nicht nehmen - sondern eine start-datei die die Usernamen&Co schon eingetragen hat.
                  Nachdem ich das jetzt angepasst habe geht es, zur Sicherheit hatte ich den Cache vom iPhone gelöscht.



                  Aber aus dem Firefox heraus geht es noch nicht.

                  Ich kann das webserver.crt Zertifikat nicht importieren, Firefox meckert mit:

                  [INFORMATION]Dies ist kein Zertifikat für eine Zertifizierungsstelle und kann deshalb nicht in die Liste der Zertifizierungsstellen importiert werden.[/INFORMATION]

                  Ideen?

                  Gruss
                  Lapheus
                  Gruß
                  Lapheus

                  Kommentar


                    #10
                    Hi
                    ich habe gerade einen Fehler gefunden!
                    Um den Key für den Server zu erzeugen - muss man einen Server-Key erzeugen (und keinen Client-Key).
                    Das geht mit
                    ./build-key-server <servername>

                    Gruß
                    Thorsten

                    Kommentar


                      #11
                      Tolle Anleitung, exzellente Grundlage um auch einen SSL Reverse Proxy für ein Wiregate aufzusetzen.

                      Was mich Stunden gekostet hat (jaja, im Nachhinein ein typischer Denkfehler :-(): auch http://<wiregate>/cgi-bin muss "reverse-proxied" werden...

                      Also etwas à la
                      ProxyPass /cgi-bin http://<wiregate>/cgi-bin ProxyHTMLURLMap http://<wiregate>/cgi-bin /cgi-bin

                      Gruß,

                      Koen

                      Kommentar


                        #12
                        Moin,

                        ich habe mir heute auch mal eine Debian Maschine aufgesetzt und einen Reverse Proxy eingerichtet.

                        Leider scheitere ich kurz vorm Ende.
                        Ich habe mal einen Screenshot von meiner Visu angehängt.
                        Die Visu ist offensichtlich erreichbar - der Tab im IE wird ja schonmal richtig benannt.
                        Der Rest bleibt leider schwarz.

                        Andere Webserver, wie z.B. die Dreambox sind ebenfalls erreichbar, allerdings werden die Seiten unvollständig dargestellt (2. Screenshot).

                        Ich habe das Ganze mit IE, FF & Safari jeweils in meinem Netzwerk und von extern getestet, das Ergebnis ist immer das gleiche.
                        Hat jemand von euch eine Idee, wo ich noch weiter suchen kann?

                        VG,
                        Mucki
                        Angehängte Dateien

                        Kommentar


                          #13
                          Poste doch mal deine Apache-Konfiguration...

                          Kommentar


                            #14
                            Moin,

                            gestern hätte ich fast jede Wette abgeschlossen, das die Konfiguration 1:1 mit der aus Post #1 übereinstimmt. Jetzt habe ich meinen Fehler gefunden.

                            VG,
                            Mucki

                            Kommentar


                              #15
                              Mal ne vielleicht blöde Frage am Rande:

                              Wieso die Apache-Zertifikat-Sache? Wieso nicht gleich OpenVPN aufsetzen? Hätte den Vorteil dass man von Unterwegs auch noch an andere "Spielereien" daheim ran kommt.

                              Gruß
                              Alex

                              Kommentar

                              Lädt...
                              X