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

$config[zx-auto] not found$config[zx-overlay] not found