Рубрики
Без рубрики

HTTPS с использованием самозаверяющего сертификата при весенней загрузке

Узнайте, как создать самозаверяющий сертификат для включения HTTPS в приложении Spring Boot.

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы покажем, как включить HTTPS в Spring Boot. Для этой цели мы также создадим самозаверяющий сертификат и настроим простое приложение.

Для получения более подробной информации о проектах Spring Boot мы можем обратиться к куче ресурсов здесь .

Дальнейшее чтение:

Автоматическая настройка безопасности весенней загрузки

Введение в Java Config для безопасности Spring

2. Создание Самозаверяющего сертификата

Прежде чем приступить к работе, мы создадим самозаверяющий сертификат. Мы будем использовать любой из следующих форматов сертификатов:

Мы можем использовать инструменты keytool или OpenSSL для создания сертификатов из командной строки. Key tool поставляется с Java Runtime Environment, и OpenSSL можно загрузить из здесь .

Давайте используем keytool для нашей демонстрации.

2.1. Создание хранилища ключей

Теперь мы создадим набор криптографических ключей и сохраним его в хранилище ключей.

Мы можем использовать следующую команду для создания нашего формата хранилища ключей PKCS12:

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

Мы можем хранить столько номеров пар ключей в одном и том же хранилище ключей, каждый из которых идентифицируется уникальным псевдонимом.

Для создания нашего хранилища ключей в формате JKS мы можем использовать следующую команду:

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

Рекомендуется использовать формат PKCS12, который является стандартным форматом отрасли. Поэтому, если у нас уже есть хранилище ключей JKS, мы можем преобразовать его в формат PKCS12 с помощью следующей команды:

keytool -importkeystore -srckeystore baeldung.jks -destkeystore baeldung.p12 -deststoretype pkcs12

Нам нужно будет указать исходный пароль хранилища ключей, а также установить новый пароль хранилища ключей. Псевдоним и пароль хранилища ключей понадобятся позже.

3. Включение HTTPS в весенней загрузке

Spring Boot предоставляет набор декларативных server.ssl.* свойств . Мы будем использовать эти свойства в нашем примере приложения для настройки HTTPS.

Мы начнем с простого приложения Spring Boot с Spring Security , которое содержит страницу приветствия, обрабатываемую конечной точкой ” /welcome “.

Затем мы скопируем файл с именем ” baeldung.p12″ , созданный на предыдущем шаге, в каталог ” src/main/resources/keystore “.

3.1. Настройка свойств SSL

Теперь мы настроим свойства, связанные с SSL:

# The format used for the keystore. It could be set to JKS in case it is a JKS file
server.ssl.key-store-type=PKCS12
# The path to the keystore containing the certificate
server.ssl.key-store=classpath:keystore/baeldung.p12
# The password used to generate the certificate
server.ssl.key-store-password=password
# The alias mapped to the certificate
server.ssl.key-alias=baeldung

Поскольку мы используем приложение с поддержкой Spring Security, давайте настроим его на прием только HTTPS-запросов:

server.ssl.enabled=true

4. Вызов URL-адреса HTTPS

Теперь, когда мы включили HTTPS в нашем приложении, давайте перейдем к клиенту и рассмотрим, как вызвать конечную точку HTTPS с помощью самозаверяющего сертификата.

Во-первых, нам нужно создать рейтинг доверия. Поскольку мы создали файл PKCS12, мы можем использовать то же самое, что и хранилище доверия. Давайте определим новые свойства для сведений о доверительном хранилище:

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

Теперь нам нужно подготовить SSLContext с хранилищем доверия и создать настроенную RestTemplate:

RestTemplate restTemplate() throws Exception {
    SSLContext sslContext = new SSLContextBuilder()
      .loadTrustMaterial(trustStore.getURL(), trustStorePassword.toCharArray())
      .build();
    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext);
    HttpClient httpClient = HttpClients.custom()
      .setSSLSocketFactory(socketFactory)
      .build();
    HttpComponentsClientHttpRequestFactory factory = 
      new HttpComponentsClientHttpRequestFactory(httpClient);
    return new RestTemplate(factory);
}

Ради демонстрации давайте убедимся, что Spring Security разрешает любые входящие запросы:

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
      .antMatchers("/**")
      .permitAll();
}

Наконец, мы можем позвонить в конечную точку HTTPS:

@Test
public void whenGETanHTTPSResource_thenCorrectResponse() throws Exception {
    ResponseEntity response = 
      restTemplate().getForEntity(WELCOME_URL, String.class, Collections.emptyMap());

    assertEquals("

Welcome to Secured Site

", response.getBody()); assertEquals(HttpStatus.OK, response.getStatusCode()); }

5. Заключение

В этом руководстве мы впервые узнали, как создать самозаверяющий сертификат для включения HTTPS в приложении Spring Boot. Кроме того, мы показали, как вызвать конечную точку с поддержкой HTTPS.

Как всегда, мы можем найти полный исходный код в репозитории GitHub .

Наконец, чтобы запустить пример кода, нам нужно раскомментировать следующее свойство начального класса в pom.xml :

com.baeldung.ssl.HttpsEnabledApplication