Ответ 1
Эти инструкции применимы для всех приложений Spring Boot, на которых основан JHipster. Я тестировал это на недавно созданном проекте JHipster 2.7.
Вам нужно выполнить следующие шаги при запуске с нуля:
- Создание самозаверяющего сертификата
- Добавьте свойства SSL в свои приложения application.properties или application.yml, как указано в Spring Документация для загрузки
- (необязательно) Перенаправление HTTP на HTTPS
Создание самозаверяющего сертификата
Сначала вам нужно сгенерировать свой самозаверяющий сертификат в каталоге проекта, это можно сделать с помощью keytool
, который является утилитой script, предоставляемой Java:
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]:
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: yes
Я выбрал пароль mypassword
, так что это тот, который я буду использовать на следующем шаге. Когда вы это сделаете, вы увидите keystore.p12
в своем текущем каталоге.
Добавьте свойства SSL в application.properties
или application.yml
, как указано в Spring Документация по загрузке
Теперь вам нужно добавить свойства соединителя HTTPS для Tomcat. Файлы свойств (yml) можно найти в src/main/resources/
, и вам нужно обновить application.yml
(или если он предназначен только для разработки в application-dev.yml
со следующими свойствами:
server:
ssl:
key-store: keystore.p12
key-store-password: mypassword
keyStoreType: PKCS12
keyAlias: tomcat
Теперь вы можете упаковать свое приложение с помощью Maven (или Gradle, если вы выбрали это для своего приложения JHipster) с помощью mvn clean package
и запустить приложение, используя mvn spring -boot: run. Теперь вы можете получить доступ к своему приложению на https://localhost:8080
Для простоты я не изменил порт, но в идеале вы должны изменить его также в файлах свойств, но я его оставил, так как они уже определены в application-dev.yml
и application-prod.yml
, поэтому вам придется его изменить там или удалите его и поместите в общий application.yml
(необязательно) Добавить перенаправление HTTP на HTTPS
Вы можете включить только один протокол через application.properties
, поэтому, когда вы сделаете это, как описано выше, HTTPS будет работать. Если вы хотите, чтобы HTTP тоже работал и перенаправлялся на HTTPS, вам нужно добавить класс @Configuration
, как показано ниже
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@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(initiateHttpConnector());
return tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
Этот ответ в основном является копией моего сообщения в блоге по тому же вопросу: http://www.drissamri.be/blog/java/enable-https-in-spring-boot/