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:
- Genera un certificado autofirmado
- Agregue las propiedades de SSL a su application.properties o application.yml como se menciona en la documentación de Spring Boot
- (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:
gulp / config.js ,
apiPort
yuri
para:apiPort: 8443, uri: ''https://localhost:'',
gulp / serve.js : add
options.rejectUnauthorized = false;
enproxyRoutes
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); }));
opcionalmente, permite que
BrowserSync
sirva contenido sobre https también. Lo recomiendo conSpring Social
para ahorrar algunos problemas. Simplemente agreguehttps: true
en la llamada debrowserSync
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
}]
},