raíz navegador los cuenta crear certificados certificado causarán autofirmados autofirmado advertencias spring-boot jhipster

spring-boot - navegador - crear cuenta ssl



¿Cómo agregar un certificado SSL autofirmado a la aplicación de ejemplo jHipster? (3)

Estas instrucciones son aplicables para todas las aplicaciones Spring Boot, en las que se basa JHipster. He probado esto en un proyecto recientemente generado JHipster 2.7 .

Debe completar estos pasos cuando comience desde cero:

  1. Genera un certificado autofirmado
  2. Agregue las propiedades de SSL a su application.properties o application.yml como se menciona en la documentación de Spring Boot
  3. (Opcional) Redirigir HTTP a HTTPS

Generando un certificado autofirmado

Primero necesita generar su certificado autofirmado en su directorio de proyecto, esto puede hacerse con keytool , que es un script de utilidad provisto por 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

He elegido la contraseña mypassword así que esta será la que utilizaré en el siguiente paso. Cuando haya hecho esto, verá un keystore.p12 en su directorio actual.

Agregue las propiedades de SSL a su application.properties o application.yml como se menciona en la documentación de Spring Boot

Ahora necesita agregar las propiedades del conector HTTPS para Tomcat. Puede encontrar los archivos de propiedades (yml) en src/main/resources/ y necesita actualizar el archivo application.yml (o si solo es para desarrollo en application-dev.yml con las siguientes propiedades:

server: ssl: key-store: keystore.p12 key-store-password: mypassword keyStoreType: PKCS12 keyAlias: tomcat

Ahora puede empaquetar su aplicación con Maven (o Gradle si la eligió para su aplicación JHipster) usando mvn clean package y ejecutar la aplicación usando mvn spring-boot: ejecutar . Ahora puede acceder a su aplicación en https: // localhost: 8080

Para simplificar, no cambié el puerto, pero idealmente debería cambiarlo también en los archivos de propiedades, pero lo dejé porque ya están definidos en application-dev.yml y application-prod.yml por lo que tendría que cambiar está allí o eliminarlo y ponerlo en la application.yml general.yml

(Opcional) Agregue redirigir HTTP a HTTPS

Solo puede habilitar un protocolo a través de application.properties , de modo que cuando lo haga como en el ejemplo anterior solo HTTPS funcionará. Si quiere que HTTP también funcione y redirija a HTTPS, debe agregar una clase @Configuration como se muestra a continuación

@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; }

Esta respuesta es básicamente una copia de la publicación de mi blog sobre el mismo tema: http://www.drissamri.be/blog/java/enable-https-in-spring-boot/

Tengo crear la aplicación jHipster de muestra. Ahora quiero agregar un certificado SSL autofirmado y probarlo en local para tener acceso a https. ¿Cómo lograr esto?


Para ampliar la brillante respuesta de Driss Amri sobre cómo volver a habilitar BrowserSync .

Si elige no admitir http, o si http se redirige a https, BrowserSync no funcionará. Para que funcione de nuevo, son necesarios pocos cambios en:

  1. gulp / config.js , apiPort y uri para:

    apiPort: 8443, uri: ''https://localhost:'',

  2. gulp / serve.js : add options.rejectUnauthorized = false; en proxyRoutes para que el nodo no se queje de un certificado autofirmado:

    proxyRoutes.map(function (r) { var options = url.parse(baseUri + r); options.route = r; options.preserveHost = true; options.rejectUnauthorized = false; return proxy(options); }));

  3. opcionalmente, permite que BrowserSync sirva contenido sobre https también. Lo recomiendo con Spring Social para ahorrar algunos problemas. Simplemente agregue https: true en la llamada de browserSync en gulp / serve.js:

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

    Ahora BrowserSync servirá contenido con certificado autofirmado enviado con él. Es posible reutilizar el creado para Spring Boot , más en la página de inicio de BrowserSync .


Para aquellos que usan webpack en lugar de gulp, pueden completar la respuesta de Driss Amri con dos cambios:

modificar el proxy.conf.json :

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

esto redirigirá las solicitudes de la API a la nueva dirección https. Luego modifique también el archivo webpack, por ejemplo, aquí un ejemplo modificado de 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 }] },