Configuração Apache SSL - Método inválido na solicitação \x16\x03\x01

Configuração Apache SSL - Método inválido na solicitação \x16\x03\x01

Estou tentando configurar o serviço https na minha instância de convidado do VirtualBox executando o Debian Squeeze e o Apache 2.

Ao tentar carregar a página de teste do meu host virtual em um navegador da minha máquina host Win7, estou recebendo um erro "ssl_error_rx_record_too_long". Ao mesmo tempo, o log de erros do Apache diz "Método inválido na solicitação \x16\x03\x01"para esta solicitação. O problema provavelmente não está relacionado ao fato de que estou executando o Apache dentro de um convidado do VirtualBox, mas queria mostrar o quadro completo para você.

A parte realmente interessante é que já cheguei ao ponto em que o site carrega corretamente, mas apenas para solicitações vindas do localhost (ou seja, de dentro do VirtualBox Debian Guest). Eu verifiquei isso com lynx e wget, eles funcionam conforme o esperado:

wget https://ssltest.intra/ssl.html
--2013-09-13 07:26:49--  https://ssltest.intra/ssl.html
Resolving ssltest.intra (ssltest.intra)... 127.0.0.1
Connecting to ssltest.intra (ssltest.intra)|127.0.0.1|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 122 [text/html]
Saving to: `ssl.html.1'

100%[======================================>] 122         --.-K/s   in 0s

2013-09-13 07:26:49 (1.94 MB/s) - `ssl.html.1' saved [122/122]

O conteúdo do arquivo salvo é exatamente o esperado. Além disso, se eu tentar conversar com o servidor via HTTP de texto simples, ele me enviará para um lugar melhor:

telnet ssltest.intra 443
Trying 127.0.0.1...
Connected to ssltest.intra.
Escape character is '^]'.
GET /ssl.html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />
Instead use the HTTPS scheme to access this URL, please.<br />
<blockquote>Hint: <a href="https://ssltest.intra/"><b>https://ssltest.intra/</b></a></blockquote></p>
<hr>
<address>Apache/2.2.22 (Debian) Server at ssltest.intra Port 443</address>
</body></html>
Connection closed by foreign host.

Arquivos de configuração abaixo (removi tudo da configuração, exceto o mínimo para que este site SSL funcione)

portas.conf:

Listen 443

httpd.conf: vazio

ssltest.intra: (a configuração do virtualhost)

<VirtualHost *:443>

        ServerName ssltest.intra
        ServerAdmin [email protected]

        SSLEngine On
        SSLCertificateFile /etc/ssl/certs/ssltest.intra.crt
        SSLCertificateKeyFile /etc/ssl/certs/ssltest.intra.key

        DocumentRoot /var/www/ssltest.intra
        Options FollowSymLinks

        <Directory /var/www/ssltest.intra/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        php_value error_log /var/www/ssltest.intra/php_errors.log
        ErrorLog /var/log/apache2/ssltest.intra.error.log
        LogLevel warn
        CustomLog /var/log/apache2/ssltest.intra.access.log combined

</VirtualHost>

Verifiquei que as chaves de certificado estão no local indicado e são chaves válidas (não expiradas) para o domínio. A configuração do host virtual acima foi habilitada pelo a2ensite ssltest.intra. mod_ssl foi habilitado, o apache2 foi reiniciado (várias vezes). Quando inicio o apache, esta é a entrada no log:

Apache/2.2.22 (Debian) PHP/5.3.3-7+squeeze14 with Suhosin-Patch mod_ssl/2.2.22
OpenSSL/1.0.1e mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations

Não existem regras de firewall que impeçam qualquer comunicação através de 443.

o que estou perdendo?

EDITARAparentemente, isso tem algo a ver com a configuração da rede VirtualBox. Quando tento acessar o site localmente como 127.0.0.1, tudo funciona conforme o esperado. Quando tento conectar-me (também localmente) por meio de outra interface NAT (192.168.56.10), a solicitação é rejeitada. Alguma dica sobre como resolver isso?

Responder1

Suspeito que meu caso seja o mesmo do user242156 e, muito possivelmente, do autor da postagem original. O problema era que meus arquivos de configuração em sites-enabled/ não estavam de fato sendo lidos, porque o apache2.conf da distribuição incluía apenas sites-enabled/*.conf e meus arquivos não usavam essa extensão, pois não é necessária, por exemplo, Ubuntu.

Portanto, a solução correta é renomear ssltest.intra para ssltest.intra.conf ou, se isso for realmente inaceitável, modifique apache2.conf para adicionar a linha IncludeOptional sites-enabled/*.

Responder2

Tive o mesmo problema. Na minha situação a seguinte solução funcionou (Apache 2.2/Debian Squeeze)

Parece que a configuração do SSL não foi carregada no momento da escuta. Depois de muitas tentativas e erros com a configuração do host virtual, adicionei a configuração para SSL no apache2.conf em vez de na parte da diretiva do host virtual. As portas são configuradas em ports.conf. Depois disso, meu SSL funcionou corretamente. Parece um problema de sequência no carregamento das partes de configuração.

Adicionada a parte SSL na parte inferior do apache2.conf

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/<server certificate filename>
SSLCertificateKeyFile /etc/apache2/ssl/<privatekey filename>
SSLCACertificateFile /etc/apache2/ssl/CaCert.crt

entradas já presentes em ports.conf

# If you just change the port or add more ports here, you will likely also
 have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz
Listen 80
<IfModule mod_ssl.c>
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
Listen 443
</IfModule>

informação relacionada