Akela: Apache Client-Zertifikats-Fehler abfangen

Hallo,

mein Apache ist so eingestellt, daß eine Anmeldung per Client-Zertfikaten (SSLVerifyClient) erfolgt. Das funktioniert soweit auch gut und ich kann per PHP auch die SSL_CLIENT_*-Variablen auslesen.
Wenn ich allerdings ohne ein gültiges Zertifikat ankomme, generiert der Apache eine Fehlermeldung (ssl_error_handshake_failure_alert). Wie kann ich es anstellen, dem User eine Anzeige zu bieten, die ihn auf ein falsches Zertfikat hinweist?

Ciao Akela

  1. Hallo Akela,

    mein Apache ist so eingestellt, daß eine Anmeldung per Client-Zertfikaten (SSLVerifyClient) erfolgt. Das funktioniert soweit auch gut und ich kann per PHP auch die SSL_CLIENT_*-Variablen auslesen.

    daraus mutmaße ich jetzt mal, dass die Konfiguration des Apachen SSLOptions +ExportCertData einschließt.

    Wenn ich allerdings ohne ein gültiges Zertifikat ankomme, generiert der Apache eine Fehlermeldung (ssl_error_handshake_failure_alert).

    Der Apache? Der Browser generiert solche Fehlermeldungen z. B.: Mozilla

    Wie kann ich es anstellen, dem User eine Anzeige zu bieten, die ihn auf ein falsches Zertfikat hinweist?

    Davon ausgehend, dass der Browser diese Meldung aufgrund der Abgewiesenen Verbindung zu einem Server generiert, muss das ganze wieder auf die Ebene des Webservers verlagert werden. Im Detail ist also wieder default SSLVerifyClient none zu verwenden. Durch SSLOptions +ExportCertData hast Du die Möglichkeit mittels PHP aus den $_SERVER-Variablen eine Überprüfung des Zertifikats zu machen. Je nach Prüfungsausgang hast Du dann die Möglichkeit, serverseitige Ausgaben zu erstellen.

    Gruß aus Berlin!
    eddi

    --
    Könnte bitte jemand mal langsam dafür sorgen, dass da draußen nicht dauernd die Filmrolle "Planet der Affen" abgedudelt wird? Danke!
    1. Hallo eddi,

      ein Nachtmensch wie ich sehe ;-)
      Danke für Deine Beschreibung.

      Meine config sieht so aus.

      <VirtualHost xx.xx.xx.xx:443>  
          SSLEngine On  
        
          # Server-Zertifikate  
          SSLCertificateFile C:/irgendwo/server-cert.pem  
          SSLCertificateKeyFile C:/irgendwo/priv-server.key  
        
          # Client-Zertifikate  
          SSLCACertificateFile C:/irgendwo/sso_ca.crt  
          SSLVerifyClient require  
          SSLVerifyDepth 2  
          SSLOptions +StdEnvVars +ExportCertData  
      </VirtualHost>
      

      Ich habe Deinem Hinweis folgend SSLVerifyClient none gesetzt. Dann bekomme ich allerdings keine SSL-Umgebungsvariablen mehr!
      Ich dachte eher an eine Lösung wie z.B. eine Umleitung der Seite nach dem Prinzip des Errordocument unter Apache. Aber welchen Errorcode kann ich da anwenden?

      ciao Akela

      1. Hallo,

        ich habe es jetzt wie folgt gelöst:

        <VirtualHost xx.xx.xx.xx:443>  
            SSLEngine On  
          
            # Server-Zertifikate  
            SSLCertificateFile c:/irgendwo/server-cert.pem  
            SSLCertificateKeyFile c:/irgendwo/priv-server.key  
          
            # Client-Zertifikate  
            SSLCACertificateFile c:/irgendwo/sso_ca.crt  
            SSLVerifyClient optional  
            SSLVerifyDepth 2  
            SSLOptions +StdEnvVars +ExportCertData  
          
            # Fehler abfangen  
            RewriteEngine on  
            RewriteCond %{SSL:SSL_CLIENT_VERIFY} !=SUCCESS  
            RewriteRule .* /error.html [L]  
        </VirtualHost>  
        
        

        Wichtig war hierbei SSLVerifyClient NICHT auf require zu setzen, wie eddi das schon bemerkt hatte. Weiter muß mit dem Rewrite-Modul eine Umleitung erfolgen, wenn die Server-Umgebungsvariable SSL_CLIENT_VERIFY nicht SUCCESS ist. Die Umgebungsvariablen für SSL stehen allerdings nur dann zur Verfügung, wenn "SSLOptions +StdEnvVars" gesetzt ist.

        ciao Akela

        1. Re:

          Wichtig war hierbei SSLVerifyClient NICHT auf require zu setzen...

          Aha, danke; dann habe ich auch was dazu gelernt. :)

          Gruß aus Berlin!
          eddi

          --
          Könnte bitte jemand mal langsam dafür sorgen, dass da draußen nicht dauernd die Filmrolle "Planet der Affen" abgedudelt wird? Danke!