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

5

Estou tentando configurar o serviço https em minha instância guest do VirtualBox que executa 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 pintar todo o quadro para você.

A parte realmente interessante é que eu já cheguei ao ponto em que o site é carregado corretamente, mas apenas para solicitações vindas de localhost (ou seja, de dentro do VirtualBox Debian Guest). Eu verifiquei isso com lynx e wget, eles funcionam como 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 falar com o servidor via HTTP em texto simples, ele me envia corretamente 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 (eu tirei tudo da configuração, exceto o mínimo para que este site SSL funcione)

ports.conf:

Listen 443

link

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 se as chaves do certificado estão no local indicado e se são chaves válidas (não expiradas) para o domínio. A configuração do host virtual acima foi ativada por a2ensite ssltest.intra . mod_ssl foi habilitado, apache2 reiniciado (várias vezes). Quando eu começo 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 há regras de firewall que impeçam qualquer comunicação acima de 443.

O que estou perdendo?

EDIT Aparentemente, isso tem algo a ver com a configuração da rede do VirtualBox. Quando tento acessar o site localmente como 127.0.0.1, tudo funciona conforme o esperado. Quando tento ligar (também localmente) através da outra interface NAT-ed (192.168.56.10), o pedido é rejeitado. Alguma dica sobre como resolver isso?

    
por András Szepesházi 13.09.2013 / 13:38

2 respostas

4

Eu suspeito que meu caso seja o mesmo que user242156 e, muito possivelmente, o pôster original. O problema era que meus arquivos de configuração em sites habilitados / não estavam de fato sendo lidos, porque o arquivo apache2.conf da distro incluía apenas o arquivo / * .conf habilitado para sites e meus arquivos não usavam essa extensão, já que não é necessário, por exemplo, Ubuntu.

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

    
por 30.06.2015 / 03:49
2

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

Parece que a configuração 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 de host virtual. As portas estão configuradas no ports.conf. Depois disso, meu ssl funcionou corretamente. Parece um problema de sequência ao carregar as 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 no 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>
    
por 12.09.2014 / 22:41