Spring Boot SSL [https]配置例子

前言

本文主要介绍Spring Boot HTTPS相关配置,基于自签证书实现;

通过本例子,同样可以了解创建SSL数字证书的过程;

本文概述

Spring boot HTTPS 配置

server.port=8443
server.ssl.key-alias=selfsigned_localhost_sslserver
server.ssl.key-password=changeit
server.ssl.key-store=classpath:ssl-server.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS

Http请求自动跳转到Https

private Connector redirectConnector() {
  Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
  connector.setScheme("http");
  connector.setPort(8080);
  connector.setSecure(false);
  connector.setRedirectPort(8443);
  return connector;
}

更多详细配置,请继续阅读

相关术语

在继续学习之前,先了解下相关术语:

SSL:SSL(Secure Sockets Layer 安全套接层),用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。

TLS:安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
truststore
Truststore and Keystore:主要用于Java中存储证书,它们之间的区别是truststore用于存储public证书,而keystore用于存储private证书

创建自签证书

可以通过以下两种方式获取SSL数字证书

  1. 创建自签证书
  2. 从CA机构获取

出于方便本例子将使用自签证书,通过java keytool命令生成,如下示例:

keytool -genkey -alias selfsigned_localhost_sslserver -keyalg RSA -keysize 2048 -validity 700 -keypass changeit -storepass changeit -keystore ssl-server.jks

简单解释下以上命令的含义:
-genkey – keytool命令,用于生成证书,事实上keytool是一个多用途和健壮的工具,支持丰富的命令参数;
-alias selfsigned_localhost_sslserver 声明证书的别名,SSL/TLS层使用;
-keyalg RSA -keysize 2048 -validity 700 –设置加密算法、秘钥大小、validity参数.
-keypass changeit -storepass changeit– truststore 和 keystore的密码;
-keystore ssl-server.jks – 存储证书、公钥私钥的文件,使用JKS格式 – Java Key Store,除了JKS外,还有其它格式可选择;

一旦我们执行以上命令,会要求我们输入证书相关信息,最终效果如下:

最终生成的证书在我们执行keytool命令的目录下,如果要查看证书内部是什么,可以使用keytool -list命令:

keytool -list -keystore ssl-server.jks

创建Spring Boot工程配置SSL

生成Spring Boot工程

生成Spring Boot最简便的方式是通过SPRING INITIALIZR网站来创建,我们选择Web和Rest依赖,并输入Maven GAV 坐标,然后选择下载,下载骨架工程,解压并导入到我们的IDE中即可;

添加RestController

出于测试考虑,我们将创建一个非常简单的RestController,代码如下:

@RestController
class SecuredServerController{

    @RequestMapping("/secured")
    public String secured(){
        System.out.println("Inside secured()");
        return "Hello user !!! : " + new Date();
    }
}

Spring boot SSL配置

首先我们需要拷贝ssl-server.jks文件到我们的resources 目录下,然后打开application.properties文件,添加如下配置:

server.port=8443
server.ssl.key-alias=selfsigned_localhost_sslserver
server.ssl.key-password=changeit
server.ssl.key-store=classpath:ssl-server.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS

配置完成,就这么简单,是不是很方便;

Demo演示

完成以上步骤后:
我们就可以通过mvn clean install命令构建工程,
通过java -jar target\ssl-server-0.0.1-SNAPSHOT.jar命令启动应用,端口为8443 ,
最后通过 https://localhost:8443/secured URL访问我们的资源;

由于我们的REST服务是GET方法,我们可以通过浏览器进行测试,访问https://localhost:8443/secured URL即可;
由于我们的证书不是受信任的颁发机构颁发的,所以我们需要添加例外,之后就可以访问了,如下图所示:

HTTP 请求跳转到HTTPS

这是一个可选的步骤,有时候我们希望全站都是安全的,就需要所有http请求都能自动跳转到https;

假设我们的HTTP端口是8080,HTTPS端口是8443,希望所有的8080端口请求都能自动跳转到8443 ,实现该功能只需要作如下配置即可:

@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(redirectConnector());
  return tomcat;
}

private Connector redirectConnector() {
  Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
  connector.setScheme("http");
  connector.setPort(8080);
  connector.setSecure(false);
  connector.setRedirectPort(8443);

  return connector;
}

最后,做个测试,访问HTTP接口 http://localhost:8080/secured ,浏览器上观察是否自动跳转到HTTPS URL了,不出意外,应该是OK的

原文文链

Site4J

原文地址:https://www.cnblogs.com/chenpi/p/9696371.html

时间: 2024-08-08 17:03:19

Spring Boot SSL [https]配置例子的相关文章

Spring Boot 全局异常配置

Spring Boot 全局异常配置,处理异常控制器需要和发生异常的方法在一个类中.使用 ControllerAdvice 注解 package com.li.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ControllerAdvice; import

Spring Boot 外部化配置(二) - @ConfigurationProperties 、@EnableConfigurationProperties

目录 3.外部化配置的核心 3.2 @ConfigurationProperties 3.2.1 注册 Properties 配置类 3.2.2 绑定配置属性 3.1.3 ConfigurationPropertiesAutoConfiguration 4.总结 3.外部化配置的核心 ????????接着上一章,<Spring Boot 外部化配置(一)> 3.2 @ConfigurationProperties 众所周知,当 Spring Boot 集成外部组件后,就可在 propertie

nginx普通配置/负载均衡配置/ssl/https配置

1.nginx普通配置 server { listen 80; server_name jqlin.lynch.com; access_log /var/log/nginx/main.log main; error_log /var/log/nginx/pay_local.error; #log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent $re

小菜鸟学习SPRING BOOT -- ssl配置

菜鸟新来,大神勿喷,些许醍醐,感激涕零.因为 我总是装幽默,是因为我想让自己快乐. ssl协议位于tcp/ip协议与各种应用协议之间,为数据通信提供安全支持. ssl协议分为两层: ssl记录协议,它建立在可靠传输协议之上,为高层协议提供数据封装.压缩.加密等基本功能支持. ssl握手协议,它建立在ssl记录协议之上,用于实际数据传输开始前,通信双方进行身份认证.协商加密算法.交换加密密钥等 基于B/S的web应用,是通过https来实现ssl的.https是http的安全版,即在http下加入

spring boot 与 vue 配置 https

一.系统环境 win10 二.spring boot 配置 https 1.keytool生成证书 打开cmd,使用keytool生成证书,keytool是jdk中的一个证书管理工具,可以生成自签名证书 keytool -genkey -alias tomcat -keyalg RSA -keystore server.keystore 生成了对应的文件,如下: 2.参数配置 将证书copy至项目中 配置application.yml server: port: 8324 http: port:

Spring boot使用keytool配置ssl

1.使用keytool生成证书 https://www.cnblogs.com/baby123/p/12698757.html 2.spring boot 复制证书放在rescurces下 spring boot修改配置添加 server.port=8443 server.ssl.key-store=classpath:test.p12 server.ssl.key-store-password=123456 server.ssl.key-alias=test server.ssl.key-pa

spring boot 系列之六:@Conditional和spring boot的自动配置

我们知道,spring boot自动配置功能可以根据不同情况来决定spring配置应该用哪个,不应该用哪个,举个例子: Spring的JdbcTemplate是不是在Classpath里面?如果是,并且DataSource也存在,就自动配置一个JdbcTemplate的Bean Thymeleaf是不是在Classpath里面?如果是,则自动配置Thymeleaf的模板解析器.视图解析器.模板引擎 那个这个是怎么实现的呢?原因就在于它利用了Spring的条件化配置,条件化配置允许配置存在于应用中

Spring Boot启用HTTPS

启用HTTPS server.port=8443 server.ssl.key-store=classpath:keystore.jks server.ssl.key-store-password=secret server.ssl.key-password=another-secret management server可以使用不同的端口,不使用HTTPS: server.port=8443 server.ssl.enabled=true server.ssl.key-store=classp

Java 集合系列16之 Spring Boot 配置文件 选项配置(一)

springboot配置选项(一) =================================================================== COMMON SPRING BOOT PROPERTIES This sample file is provided as a guideline . Do NOT copy it in its entirety to your own application. ^^^ ============================