Подтвердить что ты не робот

Как добавить самоподписанный сертификат SSL в пример приложения jHipster?

Я создал пример приложения jHipster. Теперь я хочу добавить самоподписанный сертификат SSL и протестировать локально, чтобы получить доступ к https. Как достичь этого?

4b9b3361

Ответ 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/

Ответ 2

Чтобы расширить Дрисс Амри блестящий ответ о том, как повторно включить BrowserSync.

Если вы решите не поддерживать http, или если http перенаправлен на https, BrowserSync не будет работать. Чтобы заставить его работать снова, необходимо внести несколько изменений:

  • gulp/config.js, apiPort и uri:

    apiPort: 8443, 
    uri: 'https://localhost:',
    
  • gulp/serve.js: добавьте options.rejectUnauthorized = false; в proxyRoutes, чтобы node не жаловался на самоподписанный сертификат:

    proxyRoutes.map(function (r) {
        var options = url.parse(baseUri + r);
        options.route = r;
        options.preserveHost = true;
        options.rejectUnauthorized = false;
        return proxy(options);
    }));
    
  • необязательно BrowserSync также показывать содержимое по https. Я рекомендую с Spring Social сохранить некоторые проблемы. Просто добавьте https: true в BrowserSync вызов в gulp/serve.js:

    browserSync({
        open: true,
        port: config.port,
        server: {
            baseDir: config.app,
            middleware: proxies
        },
        https: true
    });
    

    Теперь BrowserSync будет обслуживать контент с самозаверяющим сертификатом, поставляемым вместе с ним. Можно повторно использовать созданный для Spring Boot, больше на домашней странице BrowserSync.

Ответ 3

Для тех, кто использует веб-пакет вместо gulp, вы можете выполнить ответ Дрисса Амри с двумя изменениями:

измените proxy.conf.json:

{
    "*": {
        "target": "https://localhost:8443",
        "secure": true
    }
}

это перенаправит запросы API на новый https-адрес. Затем измените также файл webpack, например, пример webpack.dev.js:

module.exports = webpackMerge(commonConfig({ env: ENV }), {
devtool: 'eval-source-map',
devServer: {
    contentBase: './target/www',
    proxy: [{
        context: [
            /* jhipster-needle-add-entity-to-webpack - JHipster will add entity api paths here */
            '/api',
            '/management', ...
            '/auth'
        ],
        target: 'https://127.0.0.1:8443',
        /* set secure to false here, otherwise self-signed certification cause DEPTH_ZERO_SELF_SIGNED_CERT proxy errors */
        secure: false
    }]
},