HTTPS pomocou certifikátu s vlastným podpisom v Spring Boot
1. Prehľad
V tomto tutoriáli si ukážeme, ako povoliť HTTPS v Spring Boot. Na tento účel tiež vygenerujeme certifikát s vlastným podpisom a nakonfigurujeme jednoduchú aplikáciu.
Viac podrobností o projektoch Spring Boot sa dozviete tu.
2. Generovanie certifikátu s vlastným podpisom
Predtým, ako začneme, vytvoríme certifikát s vlastným podpisom. Použijeme jeden z nasledujúcich formátov certifikátu:
- PKCS12: Kryptografické štandardy verejného kľúča je formát chránený heslom, ktorý môže obsahovať viac certifikátov a kľúčov; je to priemyselne používaný formát
- JKS: Java KeyStore je podobný PKCS12; je to proprietárny formát a je obmedzený na prostredie Java.
Na generovanie certifikátov z príkazového riadku môžeme použiť buď keytool, alebo OpenSSL nástroje. Keytool je dodávaný s prostredím Java Runtime Environment a odtiaľ je možné stiahnuť OpenSSL.
Na ukážku použijeme keytool.
2.1. Generuje sa úložisko kľúčov
Teraz vytvoríme sadu kryptografických kľúčov a uložíme ju do skladu kľúčov.
Na vygenerovanie nášho formátu úložiska kľúčov PKCS12 môžeme použiť nasledujúci príkaz:
keytool -genkeypair -alias baeldung -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore baeldung.p12 -validita 3650
V rovnakom úložisku kľúčov môžeme uložiť toľko párov kľúčov, z ktorých každý je identifikovaný jedinečným aliasom.
Na generovanie nášho úložiska kľúčov vo formáte JKS môžeme použiť nasledujúci príkaz:
keytool -genkeypair -alias baeldung -keyalg RSA -keysize 2048 -keystore baeldung.jks -validita 3650
Odporúča sa používať formát PKCS12, ktorý je priemyselným štandardným formátom. Takže ak už máme úložisko kľúčov JKS, môžeme ho previesť do formátu PKCS12 pomocou nasledujúceho príkazu:
keytool -importkeystore -srckeystore baeldung.jks -destkeystore baeldung.p12 -deststoretype pkcs12
Budeme musieť poskytnúť zdrojové heslo úložiska kľúčov a tiež nastaviť nové heslo úložiska kľúčov. Alias a heslo úložiska kľúčov budú potrebné neskôr.
3. Povolenie HTTPS v Spring Boot
Spring Boot poskytuje množinu deklaratívnych vlastnosti server.ssl. * Tieto vlastnosti použijeme v našej ukážkovej aplikácii na konfiguráciu HTTPS.
Začneme od jednoduchej aplikácie Spring Boot s Spring Security, ktorá obsahuje uvítaciu stránku spracovanú „/ vitaj”Koncový bod.
Potom skopírujeme súbor s názvom „baeldung.p12 ″ vygenerované v predchádzajúcom kroku do „src / main / resources / keystore”Adresár.
3.1. Konfigurácia vlastností SSL
Teraz nakonfigurujeme vlastnosti súvisiace s SSL:
# Formát používaný v obchode s kľúčmi. Môže byť nastavený na JKS v prípade, že sa jedná o súbor JKS server.ssl.key-store-type = PKCS12 # Cesta do skladu kľúčov obsahujúcich certifikát server.ssl.key-store = classpath: keystore / baeldung.p12 # The heslo použité na vygenerovanie certifikátu server.ssl.key-store-password = heslo # Alias namapovaný na certifikát server.ssl.key-alias = baeldung
Pretože používame aplikáciu s povolením Spring Security, nakonfigurujme ju tak, aby prijímala iba požiadavky HTTPS:
server.ssl.enabled = true
4. Vyvolanie adresy HTTPS
Teraz, keď sme v našej aplikácii povolili HTTPS, poďme ďalej do klienta a preskúmajme, ako vyvolať koncový bod HTTPS pomocou certifikátu s vlastným podpisom.
Najskôr musíme vytvoriť obchod dôvery. Pretože sme vygenerovali súbor PKCS12, môžeme ho používať rovnako ako v úložisku dôvery. Definujme nové vlastnosti pre podrobnosti úložiska dôvery:
#trust umiestnenie obchodu trust.store = cesta k triede: keystore / baeldung.p12 #trust heslo k úložisku trust.store.password = heslo
Teraz si musíme pripraviť SSLContext s obchodom dôvery a vytvorte prispôsobené RestTemplate:
RestTemplate restTemplate () vyvolá výnimku {SSLContext sslContext = nový SSLContextBuilder () .loadTrustMaterial (trustStore.getURL (), trustStorePassword.toCharArray ()) .build (); SSLConnectionSocketFactory socketFactory = nový SSLConnectionSocketFactory (sslContext); HttpClient httpClient = HttpClients.custom () .setSSLSocketFactory (socketFactory) .build (); HttpComponentsClientHttpRequestFactory factory = nový HttpComponentsClientHttpRequestFactory (httpClient); vrátiť nový RestTemplate (továreň); }
Kvôli ukážke sa uistite Jarná bezpečnosť umožňuje akékoľvek prichádzajúce požiadavky:
protected void configure (HttpSecurity http) vyvolá výnimku {http.authorizeRequests () .antMatchers ("/ **") .permitAll (); }
Nakoniec môžeme zavolať do koncového bodu HTTPS:
@Test public void whenGETanHTTPSResource_thenCorrectResponse () vyvolá výnimku {ResponseEntity response = restTemplate (). GetForEntity (WELCOME_URL, String.class, Collections.emptyMap ()); assertEquals ("", response.getBody ()); assertEquals (HttpStatus.OK, response.getStatusCode ()); }
5. Záver
V tutoriáli sme sa najskôr naučili, ako vygenerovať certifikát s vlastným podpisom na povolenie HTTPS v aplikácii Spring Boot. Ďalej sme si ukázali, ako vyvolať koncový bod s povoleným HTTPS.
Ako vždy môžeme nájsť kompletný zdrojový kód v úložisku GitHub.
Na záver, aby sme mohli spustiť ukážku kódu, musíme odkomentovať nasledujúcu vlastnosť start-class v pom.xml:
com.baeldung.ssl.HttpsEnabledApplication