Redirecionar usuário em falha de autenticação SSL

5

Eu configurei um VirtualHost com SSL ativado e autenticação de cliente SSL, tudo isso no apache2 2.2.8 (servidor ubuntu 8.04).

Todos os certificados SSL (CA, certificado de servidor, certificado de cliente, CRL) foram gerados com a linha de comando openssl.

Eu quero redirecionar o usuário para uma página de erro personalizada, se o certificado do cliente não for válido (não presente, expirado ou revogado).

Aqui está a configuração do meu host virtual:

<VirtualHost *:443>
    ServerName myserv.example.com
    DocumentRoot /var/www/myserv/

    CustomLog /var/log/apache2/myserv.access.log combined
    ErrorLog /var/log/apache2/myserv.error.log
    LogLevel warn

    SSLEngine on
    SSLOptions +StdEnvVars +ExportCertData

    SSLCertificateFile "/etc/apache2/ssl/certs/servcrt.pem"
    SSLCertificateKeyFile "/etc/apache2/ssl/private/servkey.pem"

    SSLCACertificateFile "/etc/apache2/ssl/certs/ca.pem"

    SSLCARevocationPath "/etc/apache2/ssl/crl/"
    SSLCARevocationFile "/etc/apache2/ssl/crl/crl.pem"

    <Directory /var/www/myserv/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all

        SSLVerifyClient optional
        SSLVerifyDepth 1

        RewriteEngine on
        RewriteCond %{SSL:SSL_CLIENT_VERIFY} !^SUCCESS$
        RewriteRule .* /error-page.html [L]
    </Directory>
</VirtualHost>

Com essa configuração, se o usuário não tiver nenhum certificado SSL, ele será redirecionado corretamente para a página de erro. Mas se ele tiver um certificado revogado ou expirado, o handshake falhará (normal) e a conexão será encerrada (retornando um erro SSL no navegador).

Como posso dizer ao apache2 para redirecionar o usuário para a página correta em vez de fechar a conexão na falha do handshake SSL?

    
por linkdd 19.07.2013 / 17:16

1 resposta

1

É um equívoco comum que um servidor web pode "fazer algo" em vez de exibir a maioria (talvez todos) erros SSL no navegador.

Isso ocorre porque o handshake SSL ocorre primeiro e completamente independentemente de qualquer comunicação HTTP. Embora tratemos como um, HTTPS não é realmente um protocolo diferente para HTTP, é "HTTP over e canal criptografado entre seu navegador e o servidor".

Se o cliente apresentar um certificado inválido, o handshake SSL falhará, você receberá um erro. Neste ponto, nenhuma comunicação HTTP ocorreu e, portanto, nenhuma oportunidade para redirecionar o usuário existe.

    
por 27.09.2016 / 08:47