HTTPS ved hjelp av selvsignert sertifikat i vårstart

1. Oversikt

I denne opplæringen skal vi vise hvordan du aktiverer HTTPS i Spring Boot. For dette formålet genererer vi også et selvsignert sertifikat og konfigurerer en enkel applikasjon.

For mer informasjon om Spring Boot-prosjekter, kan vi referere til en rekke ressurser her.

2. Generere et selvsignert sertifikat

Før vi begynner, oppretter vi et selvsignert sertifikat. Vi bruker ett av følgende sertifikatformater:

  • PKCS12: Kryptografiske standarder for offentlig nøkkel er et passordbeskyttet format som kan inneholde flere sertifikater og nøkler; det er et brukt format for hele bransjen
  • JKS: Java KeyStore ligner på PKCS12; det er et proprietært format og er begrenset til Java-miljøet.

Vi kan bruke enten keytool eller OpenSSL-verktøy for å generere sertifikatene fra kommandolinjen. Keytool leveres med Java Runtime Environment, og OpenSSL kan lastes ned herfra.

La oss bruke keytool for demonstrasjonen vår.

2.1. Generere en Keystore

Nå lager vi et sett med kryptografiske nøkler og lagrer det i en nøkkelbutikk.

Vi kan bruke følgende kommando til å generere vårt PKCS12 nøkkelbutikkformat:

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

Vi kan lagre så mange antall nøkkelpar i samme nøkkellager hver identifisert av et unikt alias.

For å generere nøkkelbutikken vår i et JKS-format, kan vi bruke følgende kommando:

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

Det anbefales å bruke PKCS12-formatet som er et industristandardformat. Så hvis vi allerede har en JKS-nøkkelbutikk, kan vi konvertere den til PKCS12-format ved hjelp av følgende kommando:

nøkkelverktøy -importkeystore -srckeystore baeldung.jks -destkeystore baeldung.p12 -deststoretype pkcs12

Vi må oppgi passordet for kildetastelageret og også angi et nytt passord for nøkkelbutikken. Aliaset og nøkkeloppbevaringspassordet vil være nødvendig senere.

3. Aktivere HTTPS i Spring Boot

Spring Boot gir et sett med en deklarativ server.ssl. * egenskaper. Vi bruker disse egenskapene i eksempelprogrammet vårt for å konfigurere HTTPS.

Vi starter fra en enkel Spring Boot-applikasjon med Spring Security som inneholder en velkomstside håndtert av “/Velkommen”Endepunkt.

Så kopierer vi filen som heter “baeldung.p12 ″ genererte int forrige trinn i “src / main / resources / keystore”Katalog.

3.1. Konfigurere SSL-egenskaper

Nå konfigurerer vi de SSL-relaterte egenskapene:

# Formatet som brukes til nøkkelbutikken. Det kan settes til JKS i tilfelle det er en JKS-filserver.ssl.key-store-type = PKCS12 # Stien til nøkkelbutikken som inneholder sertifikatserveren .ssl.key-store = classpath: keystore / baeldung.p12 # The passord som brukes til å generere sertifikat server.ssl.key-store-password = passord # Aliaset tilordnet sertifikatserveren .ssl.key-alias = baeldung

Siden vi bruker Spring Security-aktivert applikasjon, la oss konfigurere den slik at den bare godtar HTTPS-forespørsler:

server.ssl.enabled = true

4. Påkalle en HTTPS-URL

Nå som vi har aktivert HTTPS i applikasjonen vår, la oss gå videre til klienten, og la oss utforske hvordan vi kan påkalle et HTTPS-sluttpunkt med det selvsignerte sertifikatet.

Først må vi opprette en tillitsbutikk. Siden vi har generert en PKCS12-fil, kan vi bruke det samme som tillitsbutikken. La oss definere nye egenskaper for tillitsbutikkinformasjonen:

# trust butikk plassering trust.store = classpath: keystore / baeldung.p12 # trust butikk passord trust.store.password = passord

Nå må vi forberede en SSLContext med tillitsbutikken og lag en tilpasset RestTemplate:

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

Av hensyn til demoen, la oss forsikre oss om det Vårsikkerhet tillater innkommende forespørsler:

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

Til slutt kan vi ringe til HTTPS-sluttpunktet:

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

5. Konklusjon

I opplæringen lærte vi først hvordan vi genererer et selvsignert sertifikat for å aktivere HTTPS i en Spring Boot-applikasjon. I tillegg viste vi hvordan vi kan påkalle et HTTPS-aktivert sluttpunkt.

Som alltid kan vi finne den fullstendige kildekoden på GitHub-depotet.

Til slutt, for å kjøre kodeeksemplet, må vi fjerne kommentar til følgende startklasseegenskap i pom.xml:

com.baeldung.ssl.HttpsEnabledApplication

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