Apache Tomcat, domena Windows, Mozilla Firefox i SSL (https)

W tym artykule chciałbym opisać konfigurację współpracy trzech elementów: domeny Windows, kontenera aplikacji i serwera webowego Apache Tomcat oraz jednej z popularniejszych przeglądarek Mozilla Firefox. Wszystko po to aby, transmisja pomiędzy przeglądarką a serwerem www była szyfrowana a certyfikaty były podpisane (zaufane) i dystrybuowane za pomocą usług domenowych.

1. Założenia wstępne.

O instalacji poszczególnych komponentów nie będę się rozpisywał. Zakładam, że mamy poprawnie działającą domenę Windows (w przykładzie użyłem domeny Windows 2008 R2), zainstalowanego i działającego Apache Tomat (w przykładzie 8.0.44, z domyślnymi ustawieniami) i przeglądarkę Mozilla Firefox (ESR 52.2.0). Dla potrzeb testu wszystkie komponenty są zainstalowane na jednej maszynie.
domena: losiaktest.local
kontroler: dc1.losiakitest.local
alias CNAME serwera www: sd.losiaktest.local
port dla http: 8080 - przepuszczony na firewallu
port dla https: 8443 - przepuszczony na firewallu

Aby sprawdzić czy środowisko działa poprawnie łączymy się (po nazwie) z naszym serwerem www http://sd.losiaktest.local:8080/

http://losiakit.pl/wp-content/uploads/2017/07/tomcat1.jpg

2. Przygotowanie Tomcata do obsługi połączeń https

Klucze, których Tomcat używa zestawiając połączenie SSL (HTTPS) są przechowywane w pliku o nazwie keystore. Plik ten jest zabezpieczony hasłem. W przypadku, kiedy mamy świeżą instalacje Tomcata, lub nigdy nie generowaliśmy kluczy SSL, plik ten musimy utworzyć. Z pomocą przychodzi na narzędzie keytool.exe z pakietu Javy. Znajdziemy je w katalogu C:\Program Files\Java\jre1.8.0_131\bin. Oczywiście ścieżka może się zmieniać w zależności czy mamy Javę 32 czy 64-bitową lub czy zainstalowaliśmy ją w domyślnej lokalizacji czy gdzieś indziej.
Komenda za pomocą, której generujemy plik wygląda następująco (linię poleceń otwieramy z prawami administratora):
keytool.exe -genkey -alias [własny_alias] -keyalg RSA -keystore [scieżka_do_pliku_keystore]
W tym momencie zaczyna się dialog konfiguracyjny naszego magazynu kluczy oraz wprowadzenie danych potrzebnych do wystawienia certyfikatu. Pierwszym krokiem jest zdefiniowanie hasła zabezpieczającego. Hasło to jest bardzo ważne ponieważ każdą czynność związaną z magazynem kluczy (podłączenie, wygenerowanie CSR, import certyfikatów, itd) będzie trzeba potwierdzić tym hasłem. Pozycje First and last name sugeruję wypełnić nazwą naszego serwera, będzie wtedy jasno widać kto jest właścicielem certyfikatu. Ostatnim krokiem będzie podanie hasła do tego konkretnego, wygenerowanego przed chwilą, certyfikatu (można mieć dwa hasła do magazynu i certyfikatu – zaleca się aby na tą chwile były jednakowe). Jeżeli nic nie wprowadzimy i naciśniemy ENTER, to hasło to będzie takie samo jak do magazynu kluczy.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat2.jpg
http://losiakit.pl/wp-content/uploads/2017/07/tomcat3.jpg

Drugim krokiem, który musimy wykonac, po wygenerowaniu certyfikatów, jest włączenie transmisji SSL w serwerze Tomcat. W tym celu musimy wedytować plik server.xml znajdujący sie w katalogu conf Tomcata (domyślnie C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\ ). Odnajdujemy sekcję, która odpowiada za połączenia SSL:

http://losiakit.pl/wp-content/uploads/2017/07/tomcat5.jpg

i włączamy (odkomentowyjemy) konektor, podając dane (ścieżkę i hasło) naszego magazynu kluczy (keystore).

http://losiakit.pl/wp-content/uploads/2017/07/tomcat4.jpg

Port połaczenia możmna zmienić na dowolny ale na czas testu zostańmy przy domyslnym. Po restarcie Tomcata powinniśmy już móc połączyć sie po HTTPS. Na tą chwilę obie przeglądarki (IE i Firefox) wyswietlają komunikat o niezaufanym certyfikacie. Jest to zrozumiałe ponieważ certyfikat jest samopodpisany (self-signed) i nie jest potwierdzony przez żadne centrum certyfikacji.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat6.jpg
http://losiakit.pl/wp-content/uploads/2017/07/tomcat7.jpg
http://losiakit.pl/wp-content/uploads/2017/07/tomcat8.jpg

Oczywiście po dodaniu wyjątku transmisja zostanie zestawiona.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat9.jpg

3. Własne Centrum Certyfikacji w oparciu od domenę Windows

Aby certyfikat serwera Tomcat był w pełni zaufany powinien być potwierdzony przez zaufane centrum certyfikacji. Możemy skorzystać z jednego z komercyjnych centrów i tam wykupić certyfikat lub, mając domenę Active Directory, zbudować własne centrum w oparciu o nią. Zaczynamy od dodania do kontrolera domenowego roli Usługi Certyfikatów w usłudze Active Directory oraz dodatkowej usługi dla tej roli Rejestracja w sieci Web dla urzędu Certyfikacji. Będzie nam ona potrzebna do podpisania certyfikatu serwera www.
http://losiakit.pl/wp-content/uploads/2017/07/tomcat10.jpg
http://losiakit.pl/wp-content/uploads/2017/07/tomcat11.jpg

W przypadku kiedy serwer Tomcata i CA mamy zainstalowanie na jednej maszynie sytuacja jest niezbyt pożądana ponieważ koło siebie pracują dwa serwery www – Tomcat i IIS (zainstalowany przez usługę Rejestracji w sieci Web). Jednak dopóki nasłuchują one na innych portach nie udało mi się doprowadzić ich do konfliktu. Jako typ CA wybieramy Przedsiębiorstwo, dalej Główny urząd certyfikacji gdy jest to nasz pierwszy urząd, oraz Utwórz nowy klucz prywatny w przypadku kiedy tego klucza jeszcze (dla CA) nie generowaliśmy. Opcje kryptograficzne ustawiamy na RSA 2048bit (jako algorytm klucza) oraz SHA256 jako funkcję skrótu.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat12.jpg

W kolejnym kroku nadajemy nazwę naszemu CA, wybieramy okres ważności certyfikatu i klikając kolejne Dalej instalujemy nasze centrum autoryzacji.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat13.jpg
http://losiakit.pl/wp-content/uploads/2017/07/tomcat14.jpg

Po restarcie serwera powinniśmy móc się dostać pod adres usługi Rejestracji certyfikatów http:\\nazwa_serwera\certsrv. Nazwę serwera możemy zastąpić jego adresem IP – natomiast nie jego aliasem (chyba, że poświecimy czas na konfigurację Kreberosa i IISa). Do witryny logujemy się poświadczeniami użytkownika z prawami administracyjnymi.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat15.jpg

4. Podpisanie certyfikatu Tomcata

Aby certyfikat Tomcata został podpisany przez nasze centrum certyfikacji i przez to stał się zaufany w naszej domenie najpierw musimy przygotować plik żądania podpisania certyfikatu (CSR – certificate signing request). Podobnie jak etapach poprzednich wykonujemy to za pomocą narzędzia keytool.exe z pakietu Javy.
Tym razem polecenie wygląda następująco:
keytool.exe -certreq -keyalg RSA -alias [wlasny_alias_keystora] -file [sciezka_do_pliku_csr].csr -keystore [sciezka_do_keystore]
Po podaniu hasła do naszego keystore plik CSR zostanie, w podanej ścieżce, utworzony.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat16.jpg

Teraz ten plik musimy podejrzeć w edytorze tekstowym (np. Notepad++) i skopiować do schowka całą jego zawartość. Przechodzimy pod adres usługi Rejestracji certyfikatów http:\\nazwa_serwera\certsrv i klikamy zadania Żądanie certyfikatu i dalej Zaawansowane żądanie certyfikatu. W pole zapisane żądanie wklejamy zawartość wcześniej wygenerowanego pliku CSR. Jako szablon certyfikatu wybieramy Serwer sieci Web i klikamy Prześlij. Po chwili certyfikat zostanie wystawiony. Pobieramy go (Pobierz certyfikat) wybierając opcje Szyfrowany algorytmem Base-64. W tym momencie dobrze jest mu zmienić nazwę na własną i zapisać w znanej ścieżce (np. tej z keystore). W Właściwościach możemy sprawdzić, że certyfikat jest wystawiony przez nasze CA dla naszego Tomcata.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat17.jpg
http://losiakit.pl/wp-content/uploads/2017/07/tomcat18.jpg

Wracamy na strone główną usługi Rejestracji certyfikatów i wybieramy zadanie Pobierz certyfikat urzędu certyfikacji, łańcuch certyfikatów lub listę CRL. W kolejnym kroku wybieramy właściwy certyfikat urzędu certyfikacji (przy jednym urzędzie będzie tylko jeden certyfikat), jako metodę kodowania wybieramy Base 64 i klikamy zadanie Pobierz certyfikat urzędu certyfikacji. Tak jak poprzednio zmieniamy mu nazwę i zapisujemy w folderze z naszym keystore. W Właściwościach możemy sprawdzić, że jest to faktycznie certyfikat naszego CA.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat19.jpg

Po przygotowaniu certyfikatów CA i serwera Tomcat musimy je zaimportować do jego magazynu kluczy. I jak zawsze posłużymy się narzędziem keytool.exe.
Najpierw importujemy certyfikat CA komendą:
keytool -import -alias root -keystore [sciezka_do_keystore] -trustcacerts -file [sciezka_do_pliku_certyfikatu CA].
Tu uwaga – przy importowaniu certyfikatu CA opcja alias przyjmuje wartość root a nie tą, którą zdefiniowaliśmy w poprzednich krokach.
Po podaniu hasła do keystore i potwierdzeniu, że ufamy temu certyfikatowi zostanie on dodany do magazynu kluczy.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat20.jpg

Teraz importujemy certyfikat serwera. Komenda wygląda następująco:
keytool -import -alias [wlasny_alias_keystora] -keystore [sciezka_do_keystore] -file [sciezka_do_pliku_certyfikatu_serwera_Tomcat].
Po podaniu hasła do keystore certyfikat serwera zostanie zaimportowany.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat21.jpg

Restartujemy serwer Tomcat i w momencie kiedy będziemy się łączyli na adres naszego serwera w przeglądarce Internet Explorer po protokole https nie powinniśmy zobaczyć żadnych ostrzeżeń. Kiedy wyświetleniu certyfikatu serwera zobaczymy, że jest właściwy, zaufany i podpisany przez nasze CA.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat22.jpg

Natomiast Firefox nadal wyświetla monit o niezaufanym certyfikacie….

5. Mozilla Firefox i systemowy magazyn certyfikatów

Mozilla Firefox, w domyślnej konfiguracji, nie korzysta z systemowego magazynu certyfikatów – ma swój własny. Dlatego certyfikat podpisany przez nasze CA nie jest dla niej zaufany. Aby zmusić ją do używania magazynu systemowego musimy przejść do zaawansowanej konfiguracji przeglądarki, wpisując w pasku adresu about:config i odszukać opcję security.enterprise_roots.enabled i zmienić jej wartość na true.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat23.jpg

Po tej zmianie połączenie się z naszym Tomcatem będzie już w pełni zaufane a serwer zweryfikowany.

http://losiakit.pl/wp-content/uploads/2017/07/tomcat24.jpg

Literatura: https://www.mulesoft.com/tcat/tomcat-ssl, https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html

Dodaj komentarz