Eu tive que rebaixar o Apache para o 2.4.7 e não funciona muito bem.
Eu tenho meu próprio servidor (no qual estou executando Apache/2.4.26
) e hoje percebi que de (Brave e Google Chrome - computadores diferentes) estou recebendo de meus sites esse erro;
This site can’t provide a secure connection
mywebsite.com sent an invalid response.
ERR_SSL_PROTOCOL_ERROR
E o mais estranho é que estou recebendo este erro a cada cinco cliques no meu site.
Do meu arquivo 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
de options-ssl-apache.conf
;
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLHonorCipherOrder on
SSLCompression off
Eu verifiquei o arquivo de log do site, mas nada, também nada aqui; /var/log/apache2/error.log
Estou tentando descobrir o que está causando esse erro, alguma idéia de onde posso encontrar mais informações ou, melhor ainda, como resolver esse problema?
EDITAR:
Se eu tentar openssl s_client -connect mywebsite.com:443
, ele retornará:
Estou usando: 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:
Além disso, se eu alterar SSLProtocol para SSLProtocol -ALL +TLSv1 +TLSv1.1 +TLSv1.2
, ele retornará o mesmo erro.
OUTRA EDIÇÃO:
Como alguém sugeriu, alterei as opções-ssl-apache.conf para:
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1
SSLHonorCipherOrder on
SSLCompression off
#SSLSessionTickets off
Eu também tentei adicionar SSLProtocol all -SSLv2 -SSLv3
no meu arquivo conf virtualhost e, ao mesmo tempo, alterei algumas coisas aqui; /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
EDITAR:
Depois de alterar o LogLevel para Info, ele retorna:
[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)
Ainda procurando pela alma ...
Então, há algumas coisas aqui, e agora você vai se aprofundar tentando copiar apenas os protocolos e cifras de segurança mais modernos.
Em primeiro lugar, suas cifras SSL. Fazendo !SSL3
e !TLS1
você está desabilitando todos códigos TLS suportados; além disso, selecionando apenas as quatro cifras especificadas, você também proíbe outras cifras compatíveis com TLS1.2, que podem ser mais 'compatíveis' sobre TLS1.2 com LE e outros serviços.
(E eles ainda retornarão o código de erro que você está vendo se não puder negociar, é uma mensagem de erro padrão que não é necessariamente um indicador de SSLv2 ou SSLv3 sendo tentado.)
Em segundo lugar, seus protocolos SSL. Embora seja ótimo desativar o SSLv2, SSLv3, TLSv1 e TLSv1.1, muitas coisas não são 'atualizadas' para suportar apenas cifras TLSv2 que você selecionou. Portanto, você deve oferecer um conjunto mais "legado" de protocolos e cifras para que tudo se comunique corretamente. Especialmente se você estiver usando 14.04 em um servidor ou sistema de ponto de extremidade (baseado em sua postagem excluída no Ask Ubuntu), devido à idade do OpenSSL nesse sistema. (E não, seu problema não é SSLv3
relacionado).
Eu gosto bastante do gerador de configuração SSL da Mozilla , para fazer isso, mas eu Também gosto bastante de usar as configurações do Cipherli.st . O segundo aqui oferece um conjunto 'legado' de configurações SSL como esta:
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)"
Note que eu costumo usar essas coisas legadas para alguns dos meus dispositivos Android mais antigos, para que eles possam ver meus serviços da web (servidos pelo NGINX, não pelo Apache, mas com a mesma diferença).
Se você realmente deseja testar a segurança ultra-endurecida como está tentando fazer (somente TLSv1.2 e cifras muito MUITO strongs), você deve considerar que uma boa parte da Internet e muitos dispositivos de IoT não poderão acessar seu site ou serviços. LetsEncrypt pode ser incluído nesta lista. É por isso que é "ok" usar configurações de cipherets e configurações de Intermediate (Mozilla) ou Legacy (Cipherli.st). Talvez você não consiga obter a pontuação SSL 100% maior do que a placa em SSLLabs, mas fará com que você obtenha A + nos sites que escolher usar.
Um outro ponto em consideração é que eu acho que você está perdendo algumas partes críticas para suas cifras baseadas em DH que você selecionou. Você precisa de um arquivo de parâmetros DH para ser definido. Os males do Apache tornam isso um pouco mais difícil de ativar. Você basicamente precisará gerar um arquivo de parâmetros DH de 2048 bits ou mais strong e, em seguida, adicioná-lo ao final do seu certificado SSL.
openssl dhparam 2048 >> /path/to/site/certificate
deve fazer isso, embora você queira fazer uma cópia do seu certificado em um espaço gravável pelo usuário para certificar-se de editar corretamente o arquivo. (Em seguida, mova o arquivo de volta para o diretório com outro nome para indicar que ele tem o DHParam e use-o).
Tags ssl apache-http-server