Аутентификация на основе сертификатов, сертификат клиента на сервере - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть требование от серверного приложения для предоставления сертификата SSL. шаг, который я сделал:

  1. Я создал самозаверяющий сертификат для IP-адреса домена (без имени домена), на котором развернуто мое приложение.
  2. Я поделился сертификатом с сервер. они будут хранить сертификат в доверенном хранилище.
  3. сервер проверяет запрос на IP-адрес. если запрос не приходит с IP-адреса, он их останавливает.

Мой вопрос:

У меня есть приложение с загрузочной пружиной. Нужно ли мне вносить какие-либо изменения в мой код для сгенерированного мной сертификата. если да, то что это за изменение?

1 Ответ

0 голосов
/ 05 февраля 2020

Да, вам нужно внести изменения в ваш код. Вам необходимо загрузить хранилище ключей (с парой ключей), а при необходимости также загрузить хранилище доверенных сертификатов в ваш http-клиент. Большинству клиентов http требуется SSLContext, поэтому вам этого будет достаточно:

KeyStore keyStore = ...;
TrustStore trustStore = ...;

KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, keyStorePassword);

TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trustStore);

SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);

// Spring provides by default RestTemplate as HTTP Client, this client is an Apache HTTP Client wrapper
// The setup would be:

HttpClient httpClient = HttpClient.newBuilder();
        .sslContext(sslFactory.getSslContext());
        .build();

HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory)
...