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

Настройка TLS весной

Узнайте, как настроить TLS весной.

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

1. Обзор

Безопасная связь играет важную роль в современных приложениях. Связь между клиентом и сервером по обычному протоколу HTTP небезопасна. Для готового к работе приложения мы должны включить HTTPS через протокол TLS (Transport Layer Security) в нашем приложении. В этом руководстве мы обсудим, как включить технологию TLS в приложении Spring Boot.

2. Протокол TLS

TLS обеспечивает защиту данных, передаваемых между клиентом и сервером, и является ключевым компонентом протокола HTTPS. Secure Sockets Layer (SSL) и TLS часто используются взаимозаменяемо, но это не одно и то же. Фактически, TLS является преемником SSL. TLS может быть реализован как односторонний, так и двусторонний.

2.1. Односторонний TLS

В одностороннем протоколе TLS только клиент проверяет сервер, чтобы убедиться, что он получает данные от доверенного сервера. Для реализации одностороннего TLS сервер делится своим открытым сертификатом с клиентами.

2.2. Двусторонний TLS

В двустороннем протоколе TLS или взаимном протоколе TLS (mTLS) клиент и сервер аутентифицируют друг друга, чтобы гарантировать, что обе стороны, участвующие в обмене данными, являются доверенными. Для реализации MTLS обе стороны делятся друг с другом своими публичными сертификатами.

3. Настройка TLS в Spring Boot

3.1. Создание пары ключей

Чтобы включить TLS, нам нужно создать пару открытых/закрытых ключей . Для этого мы используем keytool . Команда keytool поставляется с дистрибутивом Java по умолчанию. Давайте используем keytool для создания пары ключей и сохранения ее в файле keystore.p12 :

keytool -genkeypair -alias baeldung -keyalg RSA -keysize 4096 \
  -validity 3650 -dname "CN=localhost" -keypass changeit -keystore keystore.p12 \
  -storeType PKCS12 -storepass changeit

Файл keystore может быть в разных форматах . Два самых популярных формата-хранилище ключей Java (JKS) и PKCS#12. JKS специфичен для Java, в то время как PKCS#12-это формат отраслевого стандарта, относящийся к семейству стандартов, определенных в стандартах криптографии с открытым ключом (PKCS).

3.2. Настройка TLS весной

Давайте начнем с настройки одностороннего TLS. Мы настраиваем свойства, связанные с TLS, в файле application.properties :

# enable/disable https
server.ssl.enabled=true
# keystore format
server.ssl.key-store-type=PKCS12
# keystore location
server.ssl.key-store=classpath:keystore/keystore.p12
# keystore password
server.ssl.key-store-password=changeit

При настройке протокола SSL мы будем использовать TLS и скажем серверу использовать TLS 1.2:

# SSL protocol to use
server.ssl.protocol=TLS
# Enabled SSL protocols
server.ssl.enabled-protocols=TLSv1.2

Чтобы убедиться, что все работает нормально, нам просто нужно запустить приложение Spring Boot:

3.3. Настройка mTLS весной

Для включения tls мы используем атрибут client-auth со значением need :

server.ssl.client-auth=need

Когда мы используем значение need , аутентификация клиента необходима и обязательна. Это означает, что и клиент, и сервер должны совместно использовать свой открытый сертификат. Для хранения сертификата клиента в приложении Spring Boot мы используем файл truststore и настраиваем его в файле application.properties :

#trust store location
server.ssl.trust-store=classpath:keystore/truststore.p12
#trust store password
server.ssl.trust-store-password=changeit

Путь к местоположению truststore – это файл, содержащий список центров сертификации, которым доверяет машина для проверки подлинности SSL-сервера. Пароль truststore – это пароль для получения доступа к файлу truststore .

4. Настройка TLS в Tomcat

По умолчанию при запуске Tomcat используется протокол HTTP без каких-либо возможностей TLS. Для включения TLS в Tomcat мы настраиваем server.xml файл:

Для включения MTLS мы установим clientAuth=”true” .

5. Вызов HTTPS API

Для вызова REST API мы будем использовать инструмент curl:

curl -v http://localhost:8443/baeldung

Поскольку мы не указали https , он выдаст ошибку:

Bad Request
This combination of host and port requires TLS.

Эта проблема решается с помощью протокола https :

curl -v https://localhost:8443/baeldung

Однако это дает нам еще одну ошибку:

SSL certificate problem: self signed certificate

Это происходит, когда мы используем самозаверяющий сертификат. Чтобы исправить это, мы должны использовать сертификат сервера в запросе клиента. Сначала мы скопируем сертификат сервера baeldung.cer с сервера хранилища ключей файла. Затем мы будем использовать сертификат сервера в запросе curl вместе с опцией –cacert :

curl --cacert baeldung.cer https://localhost:8443/baeldung

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

Для обеспечения безопасности данных, передаваемых между клиентом и сервером, протокол TLS может быть реализован как односторонний, так и двусторонний. В этой статье мы опишем, как настроить TLS в приложении Spring Boot в файле application.properties и в файле конфигурации Tomcat. Как обычно, все примеры кода, используемые в этом руководстве, доступны на GitHub.