O Apache não atualizará a conexão para o TLS

4

Eu escrevi um servidor IPP em PHP rodando sob o Apache. Com os clientes IPP padrão, funciona muito bem. Mas quando tento imprimir de um dispositivo iOS, as conexões são interrompidas quando o cliente tenta mudar para o TLS. Isso parece estar coberto pelo RFC 2817 (Atualizando para TLS no HTTP / 1.1) e deve ser suportado pelo Apache por anos. O que há de errado com minha configuração do Apache?

Configuração SSL do Apache:

SSLEngine optional
SSLCertificateFile /path/to/server.crt
SSLCertificateKeyFile /path/to/server.key

Solicitação:

OPTIONS * HTTP/1.1
Connection: Upgrade
Host: iserv.local
Upgrade: TLS/1.0,SSL/2.0,SSL/3.0
User-Agent: CUPS/1.5.0

Responder:

HTTP/1.1 200 OK
Server: Apache/2.2.16
Content-Length: 0
Content-Type: text/plain

Resposta esperada:

HTTP/1.1 101 Switching Protocol
Server: CUPS/1.4
Connection: Keep-Alive
Keep-Alive: timeout=30
Connection: Upgrade
Upgrade: TLS/1.0,HTTP/1.1
Content-Length: 0
    
por Jörg Ludwig 08.06.2012 / 13:43

1 resposta

1

Tanto quanto eu saiba, o Apache Httpd tem suporte a RFC 2817 desde a versão 2.1.

Para usá-lo, você deve usar SSLEngine optional (em vez do mais comum SSLEngine on para HTTPS ), como mencionado na documentação .

EDITAR (eu não sabia que você já estava usando SSLEngine optional ):

Parece que esse problema é especificamente devido a OPTIONS * HTTP/1.1 . Ele funcionará quando você enviar OPTIONS / HTTP/1.1 (ou OPTIONS / HTTP/1.1 ) com os mesmos cabeçalhos de upgrade.

Depois de um pouco mais de investigação, parece que OPTIONS * simplesmente não funciona nas versões recentes do Apache Httpd (ou pelo menos funciona de forma diferente).

Se você tentar um Debian Etch (Apache Httpd 2.2.3), um simples OPTIONS * HTTP/1.1 (com um Host header) lhe dará uma resposta com os cabeçalhos Allow: GET,HEAD,POST,OPTIONS e Vary .

Em um Debian Lenny (Apache Httpd 2.2.9, com alguns patches extras de segurança backportados) e versões mais recentes, você não obterá esses Allow ou Vary cabeçalhos. Você irá obtê-los com OPTIONS / .

Suspeito que algo tenha mudado na forma como OPTIONS * foi tratado entre essas versões. (Isso também pode ter algo a ver com os problemas mencionados em este tópico .) Isso certamente afetaria uma atualização do RFC 2817 via OPTIONS * .

Eu sugeriria perguntar ao usuário do Apache Httpd ou possivelmente à lista de desenvolvedores sobre isso.

Parece que pode ser um bug. (O uso de OPTIONS * é bastante raro, e tão poucos clientes suportam o RFC 2817 que ele pode simplesmente ter passado despercebido.)

    
por 13.06.2012 / 21:20