Как настроить TLS для веб-приложения на Java?

«Как настроить TLS для веб-приложения на Java?» — вопрос из категории Безопасность, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Настройка TLS (Transport Layer Security) обеспечивает шифрование и аутентификацию соединения между клиентом и сервером.

Типичные шаги настройки на сервере (например, Tomcat):

  1. Генерация ключевого хранилища (Keystore):
    keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 
            -keystore keystore.jks -validity 3650
  2. Конфигурация Connector в server.xml:
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/keystore.jks"
                         certificateKeystorePassword="changeit"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

Использование TLS на стороне клиента (Java):

URL url = new URL("https://example.com/api");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
// Доверие всем сертификатам (ТОЛЬКО для тестов!)
// connection.setSSLSocketFactory(getInsecureSSLContext().getSocketFactory());

Важные практики:

  • Используйте актуальные версии TLS (1.2 или 1.3). Версии 1.0 и 1.1 считаются устаревшими.
  • Используйте надежные алгоритмы шифрования. Отключите слабые шифры (например, RC4, DES).
  • Защищайте закрытый ключ и пароль от хранилища.
  • Регулярно обновляйте сертификаты. Рассмотрите использование Let's Encrypt для автоматического получения бесплатных сертификатов.

Цель TLS: защита от перехвата (MITM-атак), обеспечение конфиденциальности и целостности передаваемых данных.