Jak pobrać listę obiektów z usługi wystawionej po https za pomocą RestTemplate

0

Hej

Mam klasę, w której wstrzyknięty przez konstruktor jest RestTemplate.

Za jego pomocą pobieram listę produktów z innej aplikacji:

String url = "http://myservice.com/api/products";

ResponseEntity<ProductList> response = restTemplate.getForEntity(url, ProductList.class);

Ta usługa jest też wystawiona po HTTPS. Dostałam certyfikat z rozszerzeniem .crt: myservice.crt oraz pliki z rozszerzaniami .csr, .key oraz .pem. Niby zostało to użyte do zabezpieczenia tej usługi.
Jak się dostać do tej usługi po https, żeby nie było błędu handshake'a?

Na Baeldung są przykłady, ale z plikiem .p12 i hasłem :/

0

Jeśli chcesz korzystać z RestTemplate do wysyłania zapytań do serwerów HTTPS, nie musisz robić niczego specjalnego, o ile serwer ma prawidłowo skonfigurowane certyfikaty SSL/TLS i są one zaufane przez domyślne zaufane urzędy certyfikacji (CA) w JDK.

Jeśli musisz korzystać z niestandardowego trust store lub wprowadzić inne niestandardowe ustawienia SSL, musisz skonfigurować niestandardowy HttpClient dla RestTemplate. Oto przykład:

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

import javax.net.ssl.SSLContext;
import java.security.KeyStore;

@Configuration
public class AppConfig {

    @Bean
    public RestTemplate restTemplate() throws Exception {
        // Załaduj niestandardowy trust store, jeśli to konieczne
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        // Załaduj trust store z pliku lub innego źródła

        SSLContext sslContext = SSLContextBuilder.create()
                .loadTrustMaterial(trustStore, null)
                .build();

        CloseableHttpClient httpClient = HttpClients.custom()
                .setSSLContext(sslContext)
                .build();

        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
        return new RestTemplate(factory);
    }
}

Powyższa konfiguracja pozwala RestTemplate na używanie niestandardowego trust store, co jest przydatne w przypadku pracy z własnymi certyfikatami SSL.

1 użytkowników online, w tym zalogowanych: 0, gości: 1