Перенаправьте пользователя при отказе аутентификации SSL

Я настроил VirtualHost с включенным SSL и аутентификация клиента SSL, все это на apache2 2.2.8 (сервер человечности 8.04).

Все сертификаты SSL (CA, сертификат Сервера, Клиентский сертификат, CRL) были сгенерированы с openssl командной строкой.

Я хочу перенаправить пользователя к пользовательской ошибочной странице, если клиентский сертификат не действителен (не существующий, с истекшим сроком, или отменяемый).

Вот конфигурация моего виртуального хоста:

<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>

С той конфигурацией, если у пользователя нет сертификата SSL, он правильно перенаправляется к ошибочной странице. Но если у него есть отменяемый или сертификат с истекшим сроком, (нормальные) сбои квитирования и соединение закрывается (возврат ошибки SSL на браузере).

Как я могу сказать apache2 перенаправлять пользователя к корректной странице вместо того, чтобы закрыть соединение при отказе квитирования SSL?

5
задан 19 July 2013 в 18:16
1 ответ

Распространено заблуждение, что веб-сервер может «что-то делать» вместо того, чтобы отображать большинство (возможно, все) ошибок SSL в браузере.

Это происходит потому, что сначала происходит квитирование SSL, и полностью независимо от любого соединения HTTP. Хотя мы рассматриваем его как единый протокол, HTTPS на самом деле не является протоколом, отличным от HTTP, это «HTTP через зашифрованный канал между вашим браузером и сервером».

Если клиент представляет недействительный сертификат, подтверждение SSL не удается, вы получаете ошибка. На данный момент HTTP-соединение не произошло, и поэтому нет возможности перенаправить пользователя.

1
ответ дан 3 December 2019 в 02:03

Теги

Похожие вопросы