Para que serve a porta de redirecionamento no Tomcat?

13

É difícil entender a documentação do tomcat e, olhando para server.xml, você encontrará uma salada de portas que podem ser difíceis de entender porque não são realmente explicadas adequadamente ou extensivamente na documentação.

Por exemplo, esta linha no arquivo de configuração server.xml

<Connector port="8345" protocol="AJP/1.3" redirectPort="9875" />

E aqui você pode encontrar outra porta de redirecionamento:

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" /> 

Eu entendo o que a porta do conector faz. No primeiro caso, você usa isso para criar um trabalhador no apache e enviá-lo para lá; no segundo, você abre uma porta para acessar o tomcat diretamente. No entanto, quando se trata do redirecionamento, as coisas ficam confusas.

Aqui está a explicação dada pela documentação do tomcat para a porta ajp:

Se este Conector suportar solicitações não SSL, e uma solicitação for recebida para a qual uma correspondência requer transporte SSL, a Catalina redirecionará automaticamente a solicitação para o número da porta especificado aqui.

Eu sempre escolho uma porta de redirecionamento aleatório acima de 1024 e funciona,

Mas quando isso entraria em prática? Como ele sabe quando uma solicitação requer transporte SSL?

Eu tenho um servidor satélite executando um módulo tomcat. Este módulo entra em vigor redirecionando o tráfego para o conector ajp com apache do servidor principal e vice-versa.

No servidor principal, o https é imposto no apache. Isso significa que todas as solicitações são enviadas ao servidor de satélite criptografadas ou em texto sem formatação? Eu sei que se eu acessar o servidor via satélite através da porta 8080, ele não será criptografado, mas estou pensando se isso se aplica ao tráfego que está sendo redirecionado ao servidor principal e onde essa porta de redirecionamento entra em vigor.

Ulukai
fonte

Respostas:

5

Como está definido na documentação, a porta de redirecionamento entrará em cena quando a solicitação SSL chegar ao servidor e, como a porta do conector http não pode lidar com solicitações SSL, ela será redirecionada para a porta definida. Mas deve ser outra seção definida no arquivo server.xml, na qual a porta de redirecionamento definida atuará como uma porta de conector para manipular solicitações SSL. Por exemplo, se você deseja que as solicitações HTTP sejam tratadas pela porta 80 e a solicitação https pela porta 443, o server.xml terá a seguinte aparência:

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" scheme="https" secure="true" sslProtocol="TLS" keystoreFile="/path/to/kestorefile" keystorePass="my_keystore_password"/>

Keystorefile é o certificado SSL do seu site.

Se você não configurar a outra seção com porta de redirecionamento como uma porta de conector, suas solicitações não serão redirecionadas para essa porta. Por exemplo, se o site não suportar solicitações de SSL e você tentar enviar uma solicitação https para esse site, um erro como Falha na conexão segura será mostrado no navegador.

Gaurav Pundir
fonte
Justo. E a configuração do ajp em vez do http? Também é uma boa ideia usar portas abaixo de 1024, como você mencionou? Isso significaria rodar o tomcat como root e isso não é bom.
Ulukai 22/02
1
Não tenho muita idéia sobre o ajp, mas o redirecionamento deve funcionar da mesma forma que o http. Sobre o uso de portas abaixo de 1024, depende totalmente de você. 80 e 443 são portas padrão para os protocolos https e https, não é necessário mencioná-las explicitamente no URL. Se você deseja usar portas não padrão, é com você. Também executando o tomcat com root, depende do aplicativo implantado. Se você não confia no aplicativo com perspectiva de segurança, não deve executar o tomcat com root. O contrário é que você pode usar o apache ou o nginx como proxy para executar nas portas 80 e 443 e redirecionar sua solicitação para o tomcat.
Gaurav Pundir 22/02
Observarei que iptablestambém funciona bem para redirecionar o tráfego para o Tomcat, entre outras abordagens .
SeldomNeedy 9/09/16
Esta explicação está incompleta. Se você estiver redirecionando de não SSL para uma porta SSL, não é suficiente incluir o conector de destino no server.xml. Também é necessário configurar a seção <security-constraint> no web.xml. Veja stackoverflow.com/questions/9526425/…
luiscolorado