HTTPS pomoću samopotpisanog certifikata u proljetnom pokretanju
1. Pregled
U ovom uputstvu pokazat ćemo kako omogućiti HTTPS u Spring Boot-u. U tu svrhu generirat ćemo i samopotpisani certifikat i konfigurirati jednostavnu aplikaciju.
Za više detalja o projektima Spring Boot, ovdje se možete osvrnuti na hrpu resursa.
2. Izrada samopotpisanog certifikata
Prije početka stvorit ćemo samopotpisanu potvrdu. Upotrijebit ćemo jedan od sljedećih formata certifikata:
- PKCS12: Kriptografski standardi s javnim ključem zaštićen je lozinkom format koji može sadržavati više certifikata i ključeva; to je format koji se koristi u cijeloj industriji
- JKS: Java KeyStore sličan je PKCS12; vlasnički je format i ograničen je na Java okruženje.
Za generiranje certifikata iz naredbenog retka možemo koristiti alatku keytool ili OpenSSL. Keytool se isporučuje s Java Runtime Environmentom, a OpenSSL se može preuzeti ovdje.
Upotrijebimo alat za ključeve za našu demonstraciju.
2.1. Generiranje pohrane ključeva
Sada ćemo stvoriti skup kriptografskih ključeva i pohraniti ga u pohranu ključeva.
Sljedeću naredbu možemo koristiti za generiranje našeg formata pohrane ključeva PKCS12:
keytool -genkeypair -alias baeldung -keyalg RSA -keyys 2048 -tip tipa PKCS12-keystore baeldung.p12 -validnost 3650
U istu pohranu ključeva možemo pohraniti što više brojeva parova ključeva, a svaki je identificiran jedinstvenim zamjenskim imenom.
Za generiranje naše pohrane ključeva u JKS formatu možemo upotrijebiti sljedeću naredbu:
keytool -genkeypair -alias baeldung -keyalg RSA -keyys 2048 -keystore baeldung.jks -validnost 3650
Preporučuje se korištenje formata PKCS12 koji je industrijski standardni format. Dakle, u slučaju da već imamo JKS pohranu ključeva, možemo je pretvoriti u PKCS12 format pomoću sljedeće naredbe:
keytool -importkeystore -srckeystore baeldung.jks -destkeystore baeldung.p12 -deststoretip pkcs12
Morat ćemo navesti izvornu lozinku za pohranu ključeva i postaviti novu lozinku za pohranu ključeva. Zamjenski naziv i lozinka za pohranu ključeva bit će potrebni kasnije.
3. Omogućavanje HTTPS-a u Spring Boot-u
Spring Boot nudi skup deklarativnih stavki svojstva poslužitelja.ssl. *. Upotrijebit ćemo ta svojstva u našem primjeru aplikacije za konfiguriranje HTTPS-a.
Krenut ćemo od jednostavne aplikacije Spring Boot s Spring Security koja sadrži stranicu dobrodošlice kojom upravlja "/Dobrodošli”Krajnja točka.
Zatim ćemo kopirati datoteku pod nazivom “baeldung.p12 ″ generiran u prethodnom koraku u "src / main / resources / keystore”Imenik.
3.1. Konfiguriranje SSL svojstava
Sada ćemo konfigurirati svojstva povezana sa SSL-om:
# Format koji se koristi za pohranu ključeva. Može se postaviti na JKS u slučaju da je riječ o datoteci JKS server.ssl.key-store-type = PKCS12 # Put do spremišta ključeva koji sadrži certifikat server.ssl.key-store = classpath: keystore / baeldung.p12 # The lozinka korištena za generiranje poslužitelja certifikata.ssl.key-store-password = password # Alias mapiran na server certifikata.ssl.key-alias = baeldung
Budući da koristimo aplikaciju s omogućenom Spring Security, konfigurirajmo je da prihvaća samo HTTPS zahtjeve:
server.ssl.enabled = true
4. Pozivanje HTTPS URL-a
Sad kad smo u svojoj aplikaciji omogućili HTTPS, prijeđimo na klijenta i istražimo kako pozvati HTTPS krajnju točku samopotpisanim certifikatom.
Prvo, moramo stvoriti trgovinu povjerenja. Kako smo generirali PKCS12 datoteku, možemo koristiti isto što i skladište povjerenja. Definirajmo nova svojstva za detalje trgovine povjerenja:
#trust lokacija pohrane trust.store = put puta: spremište ključeva / baeldung.p12 #pouzdanje trgovine lozinka trust.store.password = lozinka
Sada moramo pripremiti SSLContext s trgovinom povjerenja i stvorite prilagođenu Predložak za odmor:
RestTemplate restTemplate () baca izuzetak {SSLContext sslContext = new SSLContextBuilder () .loadTrustMaterial (trustStore.getURL (), trustStorePassword.toCharArray ()) .build (); SSLConnectionSocketFactory socketFactory = novi SSLConnectionSocketFactory (sslContext); HttpClient httpClient = HttpClients.custom () .setSSLSocketFactory (socketFactory) .build (); HttpComponentsClientHttpRequestFactory tvornica = novo HttpComponentsClientHttpRequestFactory (httpClient); vratiti novi RestTemplate (tvornički); }
Zarad demo, pobrinimo se Proljetna sigurnost dopušta sve dolazne zahtjeve:
zaštićena void konfiguracija (HttpSecurity http) baca Exception {http.authorizeRequests () .antMatchers ("/ **") .permitAll (); }
Napokon, možemo uputiti poziv krajnjoj točki HTTPS:
@Test public void whenGETanHTTPSResource_thenCorrectResponse () baca izuzetak {ResponseEntity response = restTemplate (). GetForEntity (WELCOME_URL, String.class, Collections.emptyMap ()); assertEquals ("", response.getBody ()); assertEquals (HttpStatus.OK, response.getStatusCode ()); }
5. Zaključak
U vodiču smo prvo naučili kako generirati samopotpisan certifikat za omogućavanje HTTPS-a u aplikaciji Spring Boot. Osim toga, pokazali smo kako pozivati krajnju točku s omogućenim HTTPS-om.
Kao i uvijek, kompletni izvorni kod možemo pronaći na GitHub spremištu.
Napokon, da bismo pokrenuli uzorak koda, moramo ukloniti komentar iz sljedećeg svojstva start-class u pom.xml:
com.baeldung.ssl.HttpsEnabledApplication