w , ,

FajneFajne ŚwietnieŚwietnie

Konfiguracja HTTPS w Spring Boot z wykorzystaniem podpisu cyfrowego RSA

Konfigurowanie HTTPS w Spring Boot

Brak wdrożonego HTTPS w Spring lub dowolnej innej aplikacji działającej po stronie serwera stanowi poważną lukę w bezpieczeństwie. Zwłaszcza kiedy nasza aplikacja wymaga od użytkownika podawania danych wrażliwych takich jak hasło, dane karty płatniczej, itp.

Dlatego w tym artykule wyjaśnię Ci:

  • jakie znaczenie ma połączenie szyfrowane;
  • pokażę sposób na utworzenie podpisu cyfrowego z wykorzystaniem algorytmu RSA;
  • wdrożenie podpisu cyfrowego w ramach aplikacji napisanej w Spring Boot.

Czym jest HTTPS i po co HTTPS?

HTTPS to szyforwana wersja protokołu HTTP. Bezpieczeństwo i integralność danych zapewnia TLS (Transport Layer Secure). A zatem można wykorzystać wzór:

HTTPS = HTTP + TLS

HTTPS zapewnia szyfrowaną komunikację pomiędzy użytkownikiem a serwerem aplikacji. W przypadku kiedy go nie zapewnimy, to cała komunikacja jest jawna!

Rozpatrzmy przypadek – „Niezabezpieczony Janusz” korzysta z aplikacji niezabezpieczonej przez HTTPS. Następnie wypełnia formatkę logowania klikając przycisk „zaloguj”. W efekcie przesyła w sposób jawny login i hasło, które w łatwy sposób jest podejrzeć, bo nie są w żaden sposób chronione.

Z pewnością lepiej postąpi „Pomysłowy Dobromir”, który korzysta z aplikacji zabezpieczonej prze TLS. W rezultacie osoba podsłuchująca sieć będzie mogła zobaczyć jedynie pomiędzy jakimi urządzeniami odbywa się ruch sieciowy. Natomiast samego hasła, loginu, ani konkretnych podstron nie pozna.

Zasada działania HTTPS
Zasada działania HTTPS. Źródło materiały AkademiaSpring.pl

Jak wygenerować samopodpisany certyfikat?

Aby zapewnić szyfrowaną komunikacje potrzebujemy certyfikat. Certyfikaty są wydawane przez Urząd Certyfikacji, po to, aby były zaufane przez przeglądarkę, która wówczas w pasku adresu wyświetli zieloną kłódkę:

kłódka przy adresie https

Możliwe jest również wydanie własnego certyfikatu, który nie będzie wiarygodny, jednak zapewni nam szyfrowaną komunikacje. Godne uwagi jest to, że JRE zapewnia możliwość wygenerowania takiego certyfikatu. Dlatego w tym celu należy się udać do katalogu:
Java > JRE > bin i odnaleźć plik keytool.exe

W następnej kolejności uruchamiamy terminal z prawami administratora i wykonujemy polecenie:

.\keytool.exe -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -validity 365 -keysize 2048

Po tym zostaniemy spytani o dodatkowe informacje:

Po tych czynnościach wygeneruje się klucz keystore.jks w tym samym katalogu.

Konfiguracja HTTPS w Spring

Utworzony plik keystore.jks dodaj do katalogu resource w projekcie Spring Boot. Natomiast w pliku application.properties uwzględnij następujące rekordy:

server.port=443
server.ssl.key-password=password
server.ssl.key-store-password=password
server.ssl.key-store=src/main/resources/keystore.jks

Zmiana portu na 443 jest bardzo ważna, ponieważ jest to domyślny port szyfrowany. Kolejne rekordy należy wypełnić zgodnie z wartościami podawanymi w trakcie generowania pary kluczy z poziomu konsoli.

Finalnie możesz uruchomić aplikacje, pamiętając o dodaniu httpS:
https://localhost:443

Od teraz połączenie jest szyfrowane, a Ty możesz sprawdzić swój certyfikat w przeglądarce 😉

Certyfikat RSA

Podsłuch niezabezpieczonej aplikacji

W wideo-materiale pokazuje w jaki sposób dokonać podsłuchu aplikacji niezabezpieczonej przez HTTPS. Również krok po kroku pokazuje jak prawidłowo skonfigurować aplikacje napisaną w Spring Boot, aby była bezpieczniejsza 😉

Stosowanie HTTPS – Wnioski

Pamiętaj, że wszelkie starania zapewniające bezpieczeństwo w ramach odpowiedniego składowania, oraz szyfrowania danych użytkownika są daremne, jeśli nie zabezpieczymy odpowiednio połączenia z naszą aplikacją 😉

Napisane przez Przemysław Bykowski

Aktywny programista i energiczny trener. Specjalizuje się w Spring Boot i uczę go w ramach AkademiaSpring.pl. Po godzinach udzielam się na YouTubach. Więcej o mnie.

Dodaj komentarz

Raport JRebel dotyczący preferencji Java Developerów

JRebel zdradza preferencje technologiczne Java Developerów

graphql

Nowy następca REST? Poznaj GraphQL!