Do czego służy port przekierowania w Tomcat?

13

Trudno zrozumieć dokumentację tomcat i patrząc na server.xml znajdziesz sałatkę portów, która może być trudna do zrozumienia, ponieważ tak naprawdę nie jest dokładnie wyjaśniona lub obszernie w dokumentacji.

Na przykład ten wiersz w pliku konfiguracyjnym server.xml

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

I tutaj możesz znaleźć jeszcze jeden port przekierowania:

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

Rozumiem, co robi port złącza. W pierwszym przypadku używasz go do utworzenia pracownika w apache i wysłania go tam, w drugim otworzysz port, aby uzyskać bezpośredni dostęp do tomcat. Jednak w przypadku przekierowania sprawy stają się rozmyte.

Oto wyjaśnienie podane w dokumentacji tomcat dla portu ajp:

Jeśli ten łącznik obsługuje żądania inne niż SSL i otrzymano żądanie, dla którego dopasowanie wymaga transportu SSL, Catalina automatycznie przekieruje żądanie na podany tutaj numer portu.

Zawsze wybieram losowy port przekierowania powyżej 1024 i to działa,

Ale kiedy to się stanie? Skąd ma wiedzieć, kiedy żądanie wymaga transportu SSL?

Mam serwer satelitarny z modułem tomcat. Moduł wchodzi w życie poprzez przekierowywanie ruchu do złącza ajp z apache z głównego serwera i odwrotnie.

Na głównym serwerze https jest wymuszany w apache. Czy to oznacza, że ​​wszystkie żądania są wysyłane do serwera satelitarnego w postaci zaszyfrowanej lub w postaci zwykłego tekstu? Wiem, że jeśli uzyskam dostęp do serwera satelitarnego przez port 8080, nie jest on szyfrowany, ale zastanawiam się, czy dotyczy to również ruchu przekierowywanego na główny serwer i gdzie ten port przekierowania wchodzi w życie.

Ulukai
źródło

Odpowiedzi:

6

Jak zdefiniowano w dokumentacji, port przekierowania pojawi się na obrazie, gdy żądanie SSL przyjdzie na serwer, a ponieważ port konektora HTTP nie może obsłużyć żądań SSL, przekieruje na zdefiniowany port. Ale musi to być kolejna sekcja zdefiniowana w pliku server.xml, w której zdefiniowany port przekierowania będzie działał jako port konektora do obsługi żądań SSL. Na przykład jeśli chcesz, aby żądania HTTP były obsługiwane przez port 80 i żądanie https przez port 443, plik server.xml będzie wyglądał następująco:

<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"/>

Plik kluczy to certyfikat ssl Twojej witryny.

Jeśli nie skonfigurujesz drugiej sekcji z portem przekierowania jako portem konektora, twoje żądania nie zostaną przekierowane do tego portu. Na przykład, jeśli witryna nie obsługuje żądań ssl i próbujesz wysłać żądanie https do tej witryny, w przeglądarce pojawi się błąd, taki jak Niepowodzenie bezpiecznego połączenia .

Gaurav Pundir
źródło
Słusznie. Co z konfiguracją ajp w przeciwieństwie do http? Czy warto też używać portów poniżej 1024, jak wspomniałeś? Oznaczałoby to uruchomienie tomcat jako root i to nie jest dobre.
Ulukai
1
Nie mam pojęcia o ajp, ale przekierowanie musi działać tak samo jak http. O korzystaniu z portów poniżej 1024, zależy to wyłącznie od Ciebie. 80 i 443 są domyślnymi portami dla protokołu https i https, nie trzeba ich wyraźnie wymieniać w adresie URL. Jeśli chcesz użyć niestandardowych portów, zależy to od Ciebie. Uruchamia także tomcat z rootem, zależy to od wdrożonej aplikacji. Jeśli nie ufasz swojej aplikacji z punktu widzenia bezpieczeństwa, nie możesz uruchamiać tomcat z rootem. Innym sposobem jest użycie apache lub nginx jako serwera proxy do uruchomienia na portach 80 i 443 i przekierowania żądania do tomcat.
Gaurav Pundir
Zauważę, że iptablesdziała również ładnie, między innymi, do przekierowywania ruchu do Tomcat .
SeldomNeedy
To wyjaśnienie jest niepełne. Jeśli przekierowujesz z portu innego niż SSL na port SSL, dołączenie docelowego konektora do server.xml nie wystarczy. Konieczne jest również skonfigurowanie sekcji <ograniczenie bezpieczeństwa> w pliku web.xml. Zobacz stackoverflow.com/questions/9526425/…
luiscolorado,