2

У меня есть свой собственный сервер (на котором я использую Apache/2.4.26), и сегодня я понял, что с (Brave и Google Chrome - разные компьютеры) я получаю с моих сайтов эту ошибку;

This site can’t provide a secure connection

mywebsite.com sent an invalid response.
ERR_SSL_PROTOCOL_ERROR

И странно то, что я получаю эту ошибку каждый пятый клик на моем сайте.

Из моего файла conf:

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/mywebsite/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mywebsite/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/mywebsite/chain.pem
SSLCompression off

из options-ssl-apache.conf ;

SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite          EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLHonorCipherOrder     on
SSLCompression          off

Я проверил файл журнала с веб-сайта, но ничего, здесь тоже ничего нет; /var/log/apache2/error.log

Я пытаюсь выяснить, что является причиной этой ошибки, какие-либо идеи, где я могу найти больше информации или даже лучше, как решить эту проблему?

РЕДАКТИРОВАТЬ:

Если я попробую openssl s_client -connect mywebsite.com:443 , он вернется:

Я использую: OpenSSL 1.1.0f 25 May 2017

CONNECTED(00000003)

...

3073276480:error:1408F119:SSL routines:ssl3_get_record:decryption failed or bad record mac:../ssl/record/ssl3_record.c:469:

Также, если я изменю SSLProtocol на SSLProtocol -ALL +TLSv1 +TLSv1.1 +TLSv1.2 , он выдаст мне ту же ошибку.

ДРУГОЕ РЕДАКТИРОВАНИЕ:

Как кто-то предложил, я изменил options-ssl-apache.conf на:

SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite           HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1
SSLHonorCipherOrder     on
SSLCompression          off

#SSLSessionTickets       off

Я также попытался добавить SSLProtocol all -SSLv2 -SSLv3 в мой conf-файл virtualhost, и в то же время я кое-что изменил здесь; /etc/apache2/mods-available/ssl.conf

#SSLCipherSuite HIGH:!aNULL
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1

SSLHonorCipherOrder on

#   The protocols to enable.
#   Available values: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2
#   SSL v2  is no longer supported
SSLProtocol all -SSLv2 -SSLv3

РЕДАКТИРОВАТЬ:

После изменения LogLevel на Info он возвращает:

[Sat Jul 08 13:34:53.374307 2017] [ssl:info] [pid 8710] [client] AH02008: SSL library error 1 in handshake (server mywebsite:443)
[Sat Jul 08 13:34:53.374717 2017] [ssl:info] [pid 8710] SSL Library Error: error:140940F4:SSL routines:ssl3_read_bytes:unexpected message
[Sat Jul 08 13:34:53.374750 2017] [ssl:info] [pid 8710] [client] AH01998: Connection closed to child 1 with abortive shutdown (server mywebsite:443)

Все еще в поисках души ...

2 ответа2

2

Итак, здесь есть несколько вещей, и теперь вы собираетесь закопать себя в глубокую яму, пытаясь свернуть только самые современные шифры и протоколы безопасности.

Во-первых, ваши SSL-шифры. Делая !SSL3 и !TLS1 вы отключаете каждый поддерживаемый шифр TLS; Кроме того, выбрав только четыре указанных вами шифра, вы также запрещаете другие TLS1.2-совместимые шифры, которые могут быть более «совместимыми» по сравнению с TLS1.2 с LE и другими службами. (И они все равно вернут код ошибки, который вы видите, если не можете договориться, это стандартное сообщение об ошибке, которое не обязательно является индикатором попытки SSLv2 или SSLv3.)

Во-вторых, ваши SSL-протоколы. Хотя было бы здорово отключить SSLv2, SSLv3, TLSv1 и TLSv1.1, многие вещи не "обновляются", чтобы поддерживать только те шифры TLSv2, которые вы выбрали. Поэтому вы должны предложить более "устаревший" набор протоколов и шифров, чтобы все правильно сообщалось. Особенно, если вы используете 14.04 на сервере или в системе конечных точек (на основе удаленного в данный момент сообщения в Ask Ubuntu) из-за возраста OpenSSL в этой системе. (И нет, ваша проблема не связана с SSLv3 ).

Для этого мне очень нравится генератор конфигурации SSL в Mozilla, но мне также нравится использовать конфигурации Cipherli.st. Второй здесь предлагает «устаревший» набор конфигураций SSL, таких как:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4 
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4 
SSLCompression off
SSLSessionTickets Off 
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"

Обратите внимание, что я склонен использовать эти устаревшие вещи для некоторых из моих старых устройств Android, чтобы они могли просматривать мои веб-сервисы (обслуживаемые NGINX, а не Apache, но та же разница).

Если вы действительно хотите развернуть ультра-усиленную защиту, как пытаетесь (только TLSv1.2 и очень ОЧЕНЬ сильные шифры), вам следует учитывать, что значительная часть Интернета и многие устройства IoT не смогут достичь Ваш сайт или услуги. LetsEncrypt может быть включен в этот список. Вот почему все в порядке, если вы используете промежуточные (Mozilla) или устаревшие (Cipherli.st) наборы шифров и настройки protocl. Это может не дать вам сверхвысокую 100% -ную общую оценку SSL на SSLLabs, но это даст вам A+ на сайтах, которые вы решите использовать.


Еще один важный момент: я думаю, что вам не хватает некоторых важных частей для выбранных вами шифров на основе DH. Вам необходимо определить файл параметров DH. Зло Апача делает это немного сложнее. В основном вам нужно будет сгенерировать файл параметров DH размером 2048 бит или более, а затем добавить его в конец вашего сертификата SSL. openssl dhparam 2048 >> /path/to/site/certificate должен сделать это, хотя вы можете сделать копию вашего сертификата в доступном для записи пространстве, чтобы убедиться, что вы правильно отредактировали файл. (Затем переместите этот файл обратно в каталог с другим именем, чтобы указать, что у него есть DHParam, а затем используйте его).

0

Мне пришлось понизить Apache до 2.4.7, и не все работает нормально.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .