В этой статье вы узнаете, как обновить веб-сайт SpringBoot до HTTPS.

задняя часть HTTPS Тенсент Tomcat

В феврале этого года Google объявил, что с июля адресная строка браузера Chrome будет помечать все HTTP-сайты как небезопасные! Сейчас, когда конец июня, пришло время отказаться от HTTP, который уязвим для стороннего мониторинга, и перейти на HTTPS.

Следующее научит вас обновлять веб-сайт SpringBoot для защиты HTTPS с трех аспектов: применение сертификата HTTPS, конфигурация HTTPS веб-сайта и перенаправление HTTP на HTTPS.

Заявка на сертификат

В настоящее время не так много поставщиков облачных услуг, которые предоставляют бесплатные сертификаты HTTPS в Китае.Tencent, который всегда не был щедрым, на этот раз очень щедр.Tencent Cloud предоставляет бесплатную DV-версию SSL-сертификата азиатского бренда целостности. Пользователи, прошедшие регистрацию и сертификацию, могут бесплатно подать заявку на 20 бесплатных сертификатов.

Создать сертификат

Выберите сертификат

Сначала вам необходимо зарегистрироваться и аутентифицироваться в Tencent Cloud, а затем войти вSSL证书Управление меню, нажмите申请证书кнопку, а затем выберите во всплывающем окне免费版DVSSL证书, нажмите确定кнопка.

选择证书

Полная информация о доменном имени

Затем заполните информацию о своем доменном имени,通用名称То есть доменное имя, которое вы хотите подать на сертификат,申请邮箱Просто введите свой личный адрес электронной почты, как показано ниже:

填写域名信息

Полная проверка домена

После выбора проверки DNS вы увидите следующую информацию:

DNS验证

На этом этапе введите фон провайдера доменного имени и добавьте разрешение:

添加TXT解析

Наконец, вернитесь к интерфейсу проверки сертификата и нажмите验证После успешной сертификации можно дождаться прохождения аудита, общее время аудита варьируется от нескольких минут до нескольких часов.

После завершения аудита вы можете загрузить сертификат в интерфейсе списка сертификатов.Загруженный файл представляет собой ZIP-архив, который содержит форматы сертификатов, необходимые для различных широко используемых программ для хостинга веб-сайтов:

证书压缩包内容

Конфигурация сайта

копировать ключ

SpringBoot по умолчанию использует Tomcat для размещения веб-сайтов, поэтому из каталога Tomcat в сжатом пакете сертификат (суффикс файлаjks) скопировано в проект SpringBootresourcesВ каталоге вы можете:

拷贝证书到 resources 目录

Обновить конфигурацию

После завершения копирования сертификата откройте файл конфигурацииapplication.yml, а затем измените порт веб-сайта на443,key-store-passwordЕго можно найти в текстовом файле в папке Tomcat сжатого пакета сертификата.Кроме того, настройте тип и путь сертификата SSL:

server:
  address: 0.0.0.0
  port: 443
  ssl:
    enabled: true
    key-store: classpath:luooqi.com.jks
    key-store-password: xxxxxxxxxxxx
    key-store-type: JKS

В этот момент вы можете запустить запущенный проект, вы можете ввести в адресную строкуhttps://yourdomainВы можете получить к нему доступ и увидеть следующие эффекты после публикации на сервере:

认证发布成功

Перенаправление HTTP-запросов на HTTPS

Хотя веб-сайт был обновлен до HTTPS, многие старые пользователи не знают об этом, и когда они посещают старую версию HTTP-адреса, они обнаруживают, что веб-сайт больше не доступен:

旧版 HTTP 网址无法正常访问

Поэтому лучше всего перенаправить HTTP на HTTPS, и ниже вы узнаете, как это сделать с помощью кода.

Добавить конфигурацию HTTP-порта

Сначала добавьте пользовательскую конфигурацию HTTP-порта в файл конфигурации:

http-port: 80

Создать отношение перенаправления

Создайте новый класс конфигурацииHttpsConfiguration, внедрите в класс настраиваемый порт HTTP и порт HTTPS из файла конфигурации, а затем создайте новыйConnectorдля обработки HTTP-запросов при настройкеConnectorПорт — это введенный HTTP-порт, порт перенаправления (setRedirectPort) — новый порт 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.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpsConfiguration {
    @Value("${http-port}")
    private int port;

    @Value("${server.port}")
    private int sslPort;

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(redirectConnector());
        return tomcat;
    }

    private Connector redirectConnector() {
        Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setScheme("http");
        connector.setPort(port);
        connector.setSecure(false);
        connector.setRedirectPort(sslPort);
        return connector;
    }
}

обращать внимание

Важно отметить в приведенном выше коде, чтоTomcatServletWebServerFactoryдолжен быть вpostProcessContextДобавьте соответствующую область действия HTTP в метод.addPattern("/*"), иначе перенаправление недействительно.


Any Code,Code Any!

Отсканируйте код, чтобы следовать «AnyCode», давайте вместе двигаться вперед по пути программирования.