ambos ssl e não-ssl em uma única porta

1

Eu gostaria de fazer com que meu servidor web apache2 servisse tanto http como https na mesma porta.
Com o método diferente eu tentei ou não estava trabalhando em http ou em https ..

Como posso fazer isso?

Atualização:
Se eu ativar o SSL e depois visitar o com http, recebo uma página como esta:

<!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://server/"><b>https://server/</b></a></blockquote></p>
<hr>
<address>Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny16 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g Server at server Port 443</address>
</body></html>

Por causa disso, parece muito possível ter http e https na mesma porta.
Um primeiro passo seria alterar essa página-padrão para que ela apresentasse um cabeçalho 301-Moved.

Update2: De acordo com isso , é possível. Agora, a questão é como configurar o apache para isso.

    
por Zulakis 22.09.2012 / 17:34

4 respostas

2

É possível redirecionar http para https usando um ErrorDocument personalizado.
Ter o servidor web inteiro rodando tanto no http quanto no https não é possível na versão atual do Apache.

Infelizmente, há um bug no Apache 2.2-16 que ainda não foi corrigido, pois o redirecionamento só funciona no Apache 2.4.

Para mais informações, dê uma olhada aqui: link

Atualizar
Aqui está um fragmento de prova de conceito que testet com o apache 2.4:

<?php
if ($_SERVER["REDIRECT_STATUS"] == "400" && preg_match("/.*?Reason: You're speaking plain HTTP to an SSL-enabled server port\..*/", $_SERVER["REDIRECT_ERROR_NOTES"])) {
    header("Location: https://localhost:999");
} else {
    //echo normal error message
}
?>

Use-o definindo ErrorDocument 400 /redirect-400-error.php no seu arquivo de configuração do apache. Você pode encontrar mais informações sobre a implementação de ErrorDocuments personalizados aqui

    
por 22.09.2012 / 20:37
3

O tráfego SSL não pode funcionar na mesma porta que o tráfego não-SSL, o TLS pode fazer isso, mas não é usado em servidores da Web. O TLS é muito usado no servidor SMTP de maneira precisas por causa disso

A mesma pergunta já foi feita várias vezes (veja dois exemplos abaixo) por pessoas diferentes, e sempre foi dito, não é possível usar apenas o Apache, você teria que usar algum outro software ou fazer o seu próprio ouvinte de algum tipo:

Apache2 Reescreva http para https na porta 5553

O Apache responde HTTP e HTTPS da mesma forma porta

Além disso, não encontrei nenhum documento oficial do Apache que mencionasse o tráfego http e https na mesma porta sem redirecioná-lo.

Lembre-se de que, quando as pessoas dizem SSL, elas normalmente significam SSL / TLS que não são iguais.

Eu aceitaria essa resposta do apache.org como um NÃO definitivo para sua pergunta, para trabalhar com http e https na mesma porta

    Can we have both http and https listening on the same port?

Comment 1 Eric Covener 2011-11-22 14:36:45 UTC

No, and bugzilla is not for support or Q&A.  Try the users mailing list.

link

Você pode experimentar o módulo mod_rewrite , mas sugiro abrir outra pergunta sobre como use-o para fazer redirecionamentos de https (você ainda precisará ter várias portas). Eu não trabalhei com isso, então não posso dar detalhes sobre como fazer isso.

Como eu disse, não sei muito sobre o módulo, então acho que você precisaria de três portas. Uma porta não-SSL para mod_rewrite escutar, um não-SSL para tráfego HTTP e uma porta SSL para https, você teria que fazer a porta 999 para mod_rewrite e então ter seus serviços escutando em duas portas diferentes para http e https. / p>

Preste atenção ao que Shane Madden disse em seu comentário, a requisição http em porta SSL permitida lhe daria erros mesmo se você colocasse mod_rewrite naquela porta.

    
por 22.09.2012 / 17:53
1

Solução fácil:

ErrorDocument 400 https://server:port/

Agora você recebe um redirecionamento "Encontrado" e nenhuma mensagem de erro desagradável.

    
por 18.10.2012 / 20:27
0

Eu acho que poderia funcionar definindo um ErrorDocument estático, por exemplo:

ErrorDocument 400 /redirect_https.txt

Em seguida, crie o arquivo redirect_https.txt na raiz do documento com o seguinte conteúdo:

HTTP/1.1 302 Found
Location: https://www.example.com/mypage.html

Isso funciona (até tentou) e envia ao navegador um redirecionamento HTTP "falsificado".

    
por 11.07.2013 / 02:15