https становится все более и более популярным сейчас, особенно при создании небольших программ или разработке общедоступных аккаунтов https в основном просто необходим.
Однако https-сертификат стоит довольно дорого, и отдельные разработчики могут подать заявку на получение бесплатного сертификата от различных поставщиков облачных услуг. У меня сложилось впечатление, что он действителен в течение одного года и может применяться в течение 20 лет.
Сегодня я хочу поговорить с вами о том, как включить конфигурацию https в проекте Spring Boot для сопровождения нашего интерфейса.
Введение в https
Давайте сначала посмотрим, что такое https, согласно введению в Википедии:
Безопасный протокол передачи гипертекста (аббревиатура: HTTPS; часто упоминается как HTTP через TLS, HTTP через SSL или HTTP Secure) — это транспортный протокол для безопасной связи в компьютерных сетях. HTTPS взаимодействует через HTTP, но использует SSL/TLS для шифрования пакетов. Основной целью разработки HTTPS является обеспечение аутентификации серверов веб-сайтов и защита конфиденциальности и целостности передаваемых данных. Этот протокол был впервые предложен компанией Netscape в 1994 году и впоследствии распространен на Интернет.
Исторически соединения HTTPS часто использовались для оплаты транзакций через Интернет и для передачи конфиденциальной информации в корпоративных информационных системах. В конце 2000-х и начале 2010-х годов HTTPS стал широко использоваться для обеспечения подлинности различных типов веб-страниц, защиты учетных записей и обеспечения конфиденциальности общения пользователей, их личности и просмотра веб-страниц.
Кроме того, существует безопасный протокол передачи гипертекста (S-HTTP), который также является реализацией защищенной передачи HTTP, но широко распространенное применение HTTPS стало де-факто реализацией защищенной передачи HTTP, а S-HTTP не был широко поддерживается.
Готов к работе
Прежде всего, нам нужен https-сертификат. Мы можем подать заявку на получение бесплатного сертификата от различных поставщиков облачных услуг, но нет необходимости проводить эксперименты самостоятельно. Мы можем напрямую использовать инструмент управления JDK keytool, который поставляется с Java, чтобы создать бесплатный https-сертификат.
Входить%JAVVA_HOME%\bin
В каталоге выполните следующую команду для создания цифрового сертификата:
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore D:\javaboy.p12 -validity 365
Команды имеют следующие значения:
- genkey означает создание нового ключа.
- alias представляет собой псевдоним хранилища ключей.
- keyalg указывает, что используемый алгоритм шифрования — RSA, алгоритм асимметричного шифрования.
- keysize указывает длину ключа.
- keystore указывает место, где хранится сгенерированный ключ.
- valid Указывает срок действия ключа в днях.
Конкретный процесс генерации выглядит следующим образом:
После выполнения команды мы увидим файл с именем javaboy.p12 в каталоге диска D. Как показано ниже:
С этим файлом наши приготовления в порядке.
импортировать https
Далее нам нужно ввести https в проект.
Скопируйте сгенерированный файл javaboy.p12 в каталог ресурсов проекта Spring Boot. Затем добавьте следующую конфигурацию в application.properties:
server.ssl.key-store=classpath:javaboy.p12
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=111111
в:
- имя файла ключа хранилища ключей.
- key-alias представляет собой псевдоним ключа.
- key-store-password — это пароль, введенный во время выполнения команды cmd.
После завершения настройки можно запускать проект Spring Boot.Если мы напрямую используем протокол Http для доступа к интерфейсу, мы увидим следующую ошибку:
Вместо этого используйте https для доступа, результаты будут следующими:
Это связано с тем, что https-сертификат, который мы сами сгенерировали, не распознается браузером, но это не имеет значения, мы можем просто нажать, чтобы продолжить доступ (в реальном проекте нам нужно только заменить https-сертификат, распознанный браузером ).
запрос на переадресацию
Учитывая, что Spring Boot не поддерживает одновременный запуск HTTP и HTTPS, для решения этой проблемы мы можем настроить здесь переадресацию запросов: когда пользователь инициирует HTTP-вызов, он автоматически перенаправляется на HTTPS.
Конкретная конфигурация выглядит следующим образом:
@Configuration
public class TomcatConfig {
@Bean
TomcatServletWebServerFactory tomcatServletWebServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(){
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
factory.addAdditionalTomcatConnectors(createTomcatConnector());
return factory;
}
private Connector createTomcatConnector() {
Connector connector = new
Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8081);
connector.setSecure(false);
connector.setRedirectPort(8080);
return connector;
}
}
Здесь мы настроили порт запроса Http на 8081, и все запросы с 8081 будут автоматически перенаправлены на https-порт 8080.
После этого, если мы перейдем к доступу по http-запросу, он будет автоматически перенаправлен на https.
Эпилог
Добавление https в Spring Boot на самом деле очень удобно. Если вы используете nginx или tomcat, https также может отправить очень удобную конфигурацию.После подачи заявки на https-сертификат от различных поставщиков облачных услуг, у официального будет подробный учебник по настройке.В общем, вы не ошибетесь.
Обратите внимание на общедоступную учетную запись [Jiangnan A Little Rain], сосредоточьтесь на технологиях с полным стеком, таких как Spring Boot + микросервисы и разделение интерфейса и сервера, делитесь регулярными видеоуроками, отвечайте на Java после того, как уделите внимание, и получайте Сухие товары Java тщательно приготовлены Songge для вас!