Сегодня поговорим о том, как настроить HTTPS в Spring Boot приложении. Ведь, если мы уже и написали приложение, которое существует в реальном мире, которым пользуются реальные пользователи, а не только Ваши знакомые или друзья, то переход на HTTPS трафик остается только вопросом времени. Особенно сейчас, когда поисковые системы ранжируют выше веб ресурсы, которые шифруют свой трафик.
И так, приступим. Для начала нам нужен сертификат. В сети множество организаций, которые предоставляют HTTPS сертификаты разной степени защиты и надежности. Все зависит от цены и потребностей того, кто их покупает. Если же у Вас тестовое приложение, и Вы не собираетесь покупать сертификат его можно подписать самому. Для этого в операционной системе, будь то Windows, Linux, Mac есть встроенный инструмент для создания HTTPS сертификата. Называется он keytool.
Для того, чтобы создать сертификат нужно ввести команду 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
Когда у нас есть файл, можно приступить к нашему приложению. Для этого возьмем любое тестовое приложение на Spring Boot и открывает файл application.properties. Я сейчас намерено упускаю все шаги по созданию спринг бут приложения поскольку считаю, что если Вы и заинтересовались данной статьей, то наверняка знаете, как создавать простое приложение с помощью spring boot. Если же это не так, дайте знать в комментариях и обязательно будет статья по этому поводу.
Пока я прикрепил видео, где есть создание простого приложения с помощью spring boot. На первый случай можно посмотреть там.
Не забудьте скопировать Ваши ключи в src/main/resources, чтобы приложение смогло их найти по classpath:keystore.p12 пути. Заметьте, что в данных настройках указан стандартный порт. Желательно, указывать другой номер порта, чтобы не было конфликтов с другими приложениями на production.
Вот и все. Да так быстро. Просто запускаете свое приложение и оно уже доступно по https. Только нужно учесть, что приложение перестанет быть доступно по http. Чтобы автоматически перенаправлять пользователей на https нужно добавить некоторые настройки редиректа.
Прежде всего уберите server.port из файла конфигураций, что на картинке выше. Если не уберете, потом долго будете искать, кем еще занятый порт томката.
Далее нужно добавить класс конфигураций, который и будет отвечать за перенаправление на https трафик:
-
import org.apache.catalina.Context;
-
import org.apache.catalina.connector.Connector;
-
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
-
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
-
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
-
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
-
import org.springframework.context.annotation.Bean;
-
import org.springframework.context.annotation.Configuration;
-
-
-
@Configuration
-
public class ConnectorConfig {
-
-
-
@Bean
-
public EmbeddedServletContainerFactory servletContainer() {
-
TomcatEmbeddedServletContainerFactory tomcat =
-
new TomcatEmbeddedServletContainerFactory() {
-
-
@Override
-
SecurityConstraint securityConstraint = new SecurityConstraint();
-
securityConstraint.setUserConstraint("CONFIDENTIAL");
-
SecurityCollection collection = new SecurityCollection();
-
collection.addPattern("/*");
-
securityConstraint.addCollection(collection);
-
context.addConstraint(securityConstraint);
-
}
-
};
-
tomcat.addAdditionalTomcatConnectors(createHttpConnector());
-
return tomcat;
-
}
-
-
private Connector createHttpConnector() {
-
Connector connector =
-
new Connector("org.apache.coyote.http11.Http11NioProtocol");
-
connector.setScheme("http");
-
connector.setSecure(false);
-
connector.setPort(8899);
-
connector.setRedirectPort(8899);
-
return connector;
-
}
-
}
Готово. Теперь Ваше приложение автоматически будет направлять пользователей на https.
Вот так быстро и очень просто можно настроить HTTPS в Spring Boot.
Как всегда видео к статье:
Ссылка на код гитхаб: https://github.com/caligula95/httpsspringboot
Очень хотелось бы простую статью о настройке и запуске spring boot
Поддержу!!! Пили пост о спринг бут
А как настроить чтобы приложение запускалось по умолчанию: http://localhost и переходило на https://localhost?
Просто на реальном приложении не очень удобно ставить например localhost:8899.
По умолчанию https на 443 порту. То есть нужно перенаправить пользователя с 80 на 443 и сделать так, чтобы приложение работало на 443. Вот и все.