Obecnie każda szanująca się aplikacja Web nie może się obyć bez certyfikatu zapewniającego szyfrowanie i wiarygodność strony. Dla celów testowych możemy samodzielnie wygenerować i podpisać certyfikat (tzw. Self-Signed) który włączy nam szyfrowanie jednak przeglądarki będą wciąż krzyczały że połączenie nie jest bezpieczne.
Jest jednak możliwość wygenerowania darmowego i całkowicie prawidłowego certyfikatu SSl, działającego w przeglądarkach ważnego 3 miesiące. Po tym czasie można wygenerować kolejny, nie ma tu żadnych ograniczeń.
Pokażę kroki potrzebne do wygenerowania certyfikatu oraz przekonwertowania go na format wymagany przez SpringBoot.
Będziemy potrzebować narzędzia o nazwie Certbot, pobierz go ze strony https://certbot.eff.org/ i zainstaluj. Jest to program wywoływany z linii poleceń z uprawnieniami administratora.
W celu rozpoczęcia generowania certyfikatu dla domeny mojadomena.pl wystarczy wpisać komendę:
certbot certonly -a manual -d mojadomena.pl --preferred-challenges dns
Po chwili powinniśmy otrzymać komunikat typu:
Please deploy a DNS TXT record under the name:
_acme-challenge.mojadomena.pl.
with the following value:
-aUT5VUDMfp5mgBSgqrQGlqLmKZRwrkGZvSMJpinkVg
Certbot będzie tu chciał zweryfikować czy mamy uprawnienia do podanej domeny, w praktyce uzna że jeśli mamy dostęp do konfiguracji strefy DNS to może wystawić nam certyfikat. Dlatego, zgodnie z instrukcją, musimy stworzyć rekord TXT o podanej nazwie i wartości. Aby nie przepisywać z konsoli informacje te znajdziemy w logu w katalogu Certbot\log.
Jak już dodamy właściwy rekord powinniśmy zweryfikować czy jest on już widoczny w strefie DNS, możemy tu użyć np. narzędzia ze strony https://mxtoolbox.com/SuperTool.aspx. Gdy rekord będzie widoczny, zatwierdzamy enterem a certbot tworzy nam pliki .pem w katalogu Cerbot\live\nazwa.domeny. Jest to już gotowy certyfikat jednak nie możemy go użyć w SpringBoot w takiej postaci.
Teraz musimy wykonać pośrednią operację i przekonwertować klucze na format p12. Do tego skorzystamy z programu openssl.exe, program ten można znaleźć w katalogu instalacyjnym programu Git, który podejrzewam że masz już zainstalowany. Jeśli nie to najwyższy czas to zrobić.
Otwieramy terminal i przechodzimy do lokalizacji pliku openssl.exe np. w katalogu Program Files\Git\usr\bin\ i wpisujemy komendę:
openssl.exe pkcs12 -export -in "C:\Certbot\live\mojadomena.pl\cert.pem" -inkey "C:\Certbot\live\mojadomena.pl\privkey.pem" -out certificate.p12 -name "certificate"
Oczywiście parametry -in oraz -inkey powinny zawierać ścieżki do odpowiednich plików w Twoim systemie i mogą się różnić. Również plik wyjściowy w parametrze -out możesz podać jaki chcesz.
Program prosi nas o podanie hasła i w rezultacie tworzy oczekiwany plik magazynu kluczy w formacie p12.
Teraz już możemy przekonwertować certyfikat na format jks (Java Key Store) o który ostatecznie nam chodzi. Robimy to za pomocą programu keytool który znajdziemy w JDK Javy którą mamy zainstalowaną w systemie, znajduje się on w katalogu bin razem z plikiem java.exe.
Wpisujemy komendę dbając o odpowiednie ścieżki do plików programu, certyfikatu p12 i pliku wynikowego jks zgodnie z własnym systemem:
D:\jdk8\bin\keytool.exe -importkeystore -srckeystore certificate.p12 -srcstoretype pkcs12 -destkeystore keystore.jks
W pierwszej kolejności zostaniemy zapytani o nowe hasło do tworzonego magazynu kluczy, to hasło będziemy musieli podać w konfiguracji aplikacji Spring. Następnie podajemy hasło do magazynu źródłowego, czyli to które ustawiliśmy przy tworzeniu pliku p12. Po tym wszystkim wygenerowany zostaje plik magazynu w formacie jks, w przypadku powyższej komendy będzie to plik keystore.jks.
Taki plik możemy już wykorzystać do włączenia SSL w naszej aplikacji SpringBoot, jak to zrobić pokażę w kolejnym wpisie.
Pozdrawiam