https connection spring boot

Как настроить HTTPS в Spring Boot

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

И так, приступим. Для начала нам нужен сертификат. В сети множество организаций, которые предоставляют HTTPS сертификаты разной степени защиты и надежности. Все зависит от цены и потребностей того, кто их покупает. Если же у Вас тестовое приложение, и Вы не собираетесь покупать сертификат его можно подписать самому. Для этого в операционной системе, будь то Windows, Linux, Mac есть встроенный инструмент для создания HTTPS сертификата. Называется он keytool.

keytool main view

Для того, чтобы создать сертификат нужно ввести команду keytool -genkeypair с некоторыми параметрами: -alias имяалиас -keyalg алгоритмшифрования -keysize размер ключа -storetype нечтовродерасширения -keystore имяирасширение -validity валидити.

Чтобы Вы долго не искали в Интернете все параметры, вот пример строки которая создаст нужный нам сертификат с именем keystore.p12:

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

Просто вставьте эту строку в командную строку, следуйте инструкциям и Вы получите готовый самоподписаный сертификат, который можно будет использовать. Вам будет предложено выбрать пароль для ключа. Введите надежный пароль от 6 символов. Только не забудьте его. Он нам еще понадобиться. Далее следуют необязательные параметры типа имя, город, организация. Отвечать можно по желанию.

Когда все будет сгенерировано Вы увидите сертификат в той папке в которой у Вас открыта командная строка. Как видно на картинке выше у меня это C:\Users\denbu

keytool file storage

Когда у нас есть файл, можно приступить к нашему приложению. Для этого возьмем любое тестовое приложение на Spring Boot и открывает файл application.properties. Я сейчас намерено упускаю все шаги по созданию спринг бут приложения поскольку считаю, что если Вы и заинтересовались данной статьей, то наверняка знаете, как создавать простое приложение с помощью spring boot. Если же это не так, дайте знать в комментариях и обязательно будет статья по этому поводу.

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

application properties file view

Не забудьте скопировать Ваши ключи в src/main/resources, чтобы приложение смогло их найти по classpath:keystore.p12 пути. Заметьте, что в данных настройках указан стандартный порт. Желательно, указывать другой номер порта, чтобы не было конфликтов с другими приложениями на production.

Вот и все. Да так быстро. Просто запускаете свое приложение и оно уже доступно по https. Только нужно учесть, что приложение перестанет быть доступно по http. Чтобы автоматически перенаправлять пользователей на https нужно добавить некоторые настройки редиректа.

Прежде всего уберите server.port из файла конфигураций, что на картинке выше. Если не уберете, потом долго будете искать, кем еще занятый порт томката.

Далее нужно добавить класс конфигураций, который и будет отвечать за перенаправление на https трафик:

Код    
  1. import org.apache.catalina.Context;
  2. import org.apache.catalina.connector.Connector;
  3. import org.apache.tomcat.util.descriptor.web.SecurityCollection;
  4. import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
  5. import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
  6. import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9.  
  10.  
  11. @Configuration
  12. public class ConnectorConfig {
  13.  
  14.  
  15.       @Bean
  16.       public EmbeddedServletContainerFactory servletContainer() {
  17.         TomcatEmbeddedServletContainerFactory tomcat =
  18.           new TomcatEmbeddedServletContainerFactory() {
  19.          
  20.             @Override
  21.             protected void postProcessContext(Context context) {
  22.               SecurityConstraint securityConstraint = new SecurityConstraint();
  23.               securityConstraint.setUserConstraint("CONFIDENTIAL");
  24.               SecurityCollection collection = new SecurityCollection();
  25.               collection.addPattern("/*");
  26.               securityConstraint.addCollection(collection);
  27.               context.addConstraint(securityConstraint);
  28.             }
  29.           };
  30.         tomcat.addAdditionalTomcatConnectors(createHttpConnector());
  31.         return tomcat;
  32.       }
  33.      
  34.       private Connector createHttpConnector() {
  35.         Connector connector =
  36.           new Connector("org.apache.coyote.http11.Http11NioProtocol");
  37.         connector.setScheme("http");
  38.         connector.setSecure(false);
  39.         connector.setPort(8899);
  40.         connector.setRedirectPort(8899);
  41.         return connector;
  42.       }
  43. }

Готово. Теперь Ваше приложение автоматически будет направлять пользователей на https.

результат запуска приложения

Вот так быстро и очень просто можно настроить HTTPS в Spring Boot.

Как всегда видео к статье:

Ссылка на код гитхаб: https://github.com/caligula95/httpsspringboot

4 thoughts on “Как настроить HTTPS в Spring Boot

    • По умолчанию https на 443 порту. То есть нужно перенаправить пользователя с 80 на 443 и сделать так, чтобы приложение работало на 443. Вот и все.

Добавить комментарий