
у меня естьоченьконкретный вариант использования. Я хочу проверить, используя Apache, может ли браузер пользователя использовать современные CipherSuites.
Apache вызывается с https и должен попытаться установить SSL-соединение. Если это не удается, Apache должен перенаправить пользователя на резервный HTTP-сайт, где ему сообщают, что его браузер устарел.
Конечно, мне нужно использовать mod_rewrite, у которого даже есть переменная https, которая содержит on/off, в зависимости от того, установлен ли SSL. Но как мне сказать apache продолжить, если начальное SSL Handshake не удалось?
решение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>