Apache HTTP Fallback при сбое SSL Handshake
У меня очень специфический вариант использования. Я хочу, используя Apache, проверить, способен ли браузер пользователя использовать современные CipherSuites.
Apache вызывается по протоколу https и должен попытаться установить SSL-соединение, в случае сбоя Apache должен перенаправить пользователя на резервный HTTP-сайт, где ему сообщают, что его браузер устарел.
Конечно, мне нужно использовать mod_rewrite, который даже имеет переменную https, которая содержит вкл / выкл, в зависимости от того, установлен ли SSL. Но как я могу сказать apache продолжать, если исходное SSL рукопожатие не удается?
1 ответ
клиент должен попытаться установить соединение SSL, в случае неудачи Apache должен перенаправить пользователя на резервный HTTP-сайт, где ему сообщают, что его браузер устарел.
Я думаю, что вы не можете, рукопожатие TLS потерпит неудачу на стадии задолго до стадии, когда клиент и веб-сервер могут обмениваться сообщениями протокола HTTP.
Вместо:
- Принять все шифры.
- И заказать их от сильных к слабым с
SSLCipherSuite ...
директивы. - Не позволяйте клиенту определять предпочтения шифра, а согласовывайте их в порядке предпочтений, который вы определили на шаге 2. с
SSLHonorCipherOrder on
директивы. - Это должно привести к соединению с самым надежным шифром, который поддерживает клиент. (теоретически ваш фактический пробег может отличаться.)
- Если этот шифр ниже вашего порога, тогда примените логику, чтобы показать ваше сообщение безопасности.
- Защитите контент, который действительно нуждается в надежном шифре, как описано в руководстве
то есть что-то вроде:
# be liberal in general
SSLCipherSuite ALL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
SSLHonorCipherOrder on
<Location "/strong/area">
# but https://hostname/strong/area/ and below
# requires strong ciphers
SSLCipherSuite HIGH:!aNULL:!MD5
</Location>