HTTPS ved hjælp af selvsigneret certifikat i Spring Boot

1. Oversigt

I denne vejledning skal vi vise, hvordan du aktiverer HTTPS i Spring Boot. Til dette formål genererer vi også et selvsigneret certifikat og konfigurerer en simpel applikation.

For flere detaljer om Spring Boot-projekter, kan vi henvise til en masse ressourcer her.

2. Generering af et selvunderskrevet certifikat

Inden vi kommer i gang, opretter vi et selvsigneret certifikat. Vi bruger et af følgende certifikatformater:

  • PKCS12: Kryptografiske standarder for offentlig nøgle er et adgangskodebeskyttet format, der kan indeholde flere certifikater og nøgler; Det er et brugt format i hele branchen
  • JKS: Java KeyStore svarer til PKCS12; det er et proprietært format og er begrænset til Java-miljøet.

Vi kan bruge enten keytool eller OpenSSL-værktøjer til at generere certifikaterne fra kommandolinjen. Keytool leveres med Java Runtime Environment, og OpenSSL kunne downloades herfra.

Lad os bruge keytool til vores demonstration.

2.1. Generere en Keystore

Nu opretter vi et sæt kryptografiske nøgler og gemmer det i en nøglelager.

Vi kan bruge følgende kommando til at generere vores PKCS12 keystore-format:

keytool -genkeypair -alias baeldung -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore baeldung.p12 -gyldighed 3650

Vi kan gemme så mange antal nøglepar i samme nøglelager, som hver er identificeret ved et unikt alias.

Til at generere vores keystore i et JKS-format kan vi bruge følgende kommando:

keytool -genkeypair -alias baeldung -keyalg RSA -keysize 2048 -keystore baeldung.jks -gyldighed 3650

Det anbefales at bruge PKCS12-formatet, der er et industristandardformat. Så hvis vi allerede har en JKS-keystore, kan vi konvertere den til PKCS12-format ved hjælp af følgende kommando:

nøgleværktøj -importkeystore -srckeystore baeldung.jks -destkeystore baeldung.p12 -deststoretype pkcs12

Vi bliver nødt til at angive kildetastaturadgangskoden og også indstille en ny adgangskodeadgangskode. Alias ​​og adgangskodeadgangskode er nødvendige senere.

3. Aktivering af HTTPS i Spring Boot

Spring Boot giver et sæt af en deklarativ server.ssl. * egenskaber. Vi bruger disse egenskaber i vores prøveapplikation til at konfigurere HTTPS.

Vi starter fra en simpel Spring Boot-applikation med Spring Security, der indeholder en velkomstside, der håndteres af “/Velkommen”Slutpunkt.

Derefter kopierer vi filen med navnet “baeldung.p12 ″ genererede int det foregående trin i “src / main / resources / keystore”-Mappe.

3.1. Konfiguration af SSL-egenskaber

Nu konfigurerer vi de SSL-relaterede egenskaber:

# Det format, der bruges til keystore. Det kunne indstilles til JKS, hvis det er en JKS-filserver.ssl.key-store-type = PKCS12 # Stien til keystore, der indeholder certifikatserveren .ssl.key-store = classpath: keystore / baeldung.p12 # The adgangskode, der bruges til at generere certifikatserveren.ssl.key-store-password = password # Aliaset tilknyttet certifikatserveren.ssl.key-alias = baeldung

Da vi bruger Spring Security-aktiveret applikation, lad os konfigurere den til kun at acceptere HTTPS-anmodninger:

server.ssl.enabled = sand

4. Påkald af en HTTPS-URL

Nu hvor vi har aktiveret HTTPS i vores applikation, lad os gå videre til klienten, og lad os undersøge, hvordan man påberåber et HTTPS-slutpunkt med det selvsignerede certifikat.

Først skal vi oprette en tillidsbutik. Da vi har genereret en PKCS12-fil, kan vi bruge det samme som tillidsbutikken. Lad os definere nye egenskaber for tillidsbutikoplysningerne:

#trust butikslokation trust.store = classpath: keystore / baeldung.p12 #trust store password password.store.password = password

Nu er vi nødt til at forberede en SSLContext med tillidsbutikken og opret en tilpasset RestTemplate:

RestTemplate restTemplate () kaster undtagelse {SSLContext sslContext = ny SSLContextBuilder () .loadTrustMaterial (trustStore.getURL (), trustStorePassword.toCharArray ()) .build (); SSLConnectionSocketFactory socketFactory = ny SSLConnectionSocketFactory (sslContext); HttpClient httpClient = HttpClients.custom () .setSSLSocketFactory (socketFactory) .build (); HttpComponentsClientHttpRequestFactory fabrik = ny HttpComponentsClientHttpRequestFactory (httpClient); returner nyt RestTemplate (fabrik); }

Af hensyn til demoen skal vi sørge for det Forårssikkerhed tillader indgående anmodninger:

beskyttet ugyldig konfiguration (HttpSecurity http) kaster undtagelse {http.authorizeRequests () .antMatchers ("/ **") .permitAll (); }

Endelig kan vi ringe til HTTPS-slutpunktet:

@Test offentlig ugyldig nårGETanHTTPSResource_thenCorrectResponse () kaster Undtagelse {ResponseEntity respons = restTemplate (). GetForEntity (WELCOME_URL, String.class, Collections.emptyMap ()); assertEquals ("", response.getBody ()); assertEquals (HttpStatus.OK, response.getStatusCode ()); }

5. Konklusion

I vejledningen lærte vi først, hvordan man genererer et selvsigneret certifikat for at aktivere HTTPS i en Spring Boot-applikation. Derudover viste vi, hvordan man påberåber et HTTPS-aktiveret slutpunkt.

Som altid kan vi finde den komplette kildekode på GitHub-arkivet.

Endelig skal vi fjerne kommentar til følgende startklasseegenskab for at køre kodeeksemplet i pom.xml:

com.baeldung.ssl.HttpsEnabledApplication

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