转载  https://howtodoinjava.com/spring-boot/spring-boot-ssl-https-example/

Spring Boot SSL

学习如何将Web应用程序配置为使用自签名证书在SSL(HTTPS)上运行。还要学习创建SSL证书。

SSL配置

Spring启动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证书
创建Spring-boot应用程序并
从HTTP配置SSL重定向到HTTPS

术语

在进一步讨论之前,让我们了解一些特定的术语,如SSL或TLS的含义。

SSL - 代表安全套接字层。它是通过保护在两个系统之间发送的所有敏感数据来保持互联网连接安全的行业标准协议,防止黑客读取和修改任何传输的信息。

TLS - (传输层安全性)是SSL的更新,更安全的版本。它增加了更多功能。今天,证书颁发机构提供的证书仅基于TLS。但是关于通过网络进行的安全通信,SSL这个术语仍然很常见,因为它已经很老了,并且在社区中变得很受欢迎。

当网站受SSL证书保护时,HTTPS - (超文本传输​​协议安全)出现在URL中。它是HTTP协议的安全版本。

Truststore和Keystore - 用于在Java中存储SSL证书,但它们之间没有什么区别。truststore用于存储公共证书,同时keystore用于存储客户端或服务器的私有证书。

创建自己的自签名SSL证书

要获得我们应用程序的SSL数字证书,我们有两个选择 -

  1. 创建自签名证书
  2. 要从证书颁发机构(CA)获取SSL证书,我们将其称为CA证书。

为了今天的演示目的,我们将创建由java keytool命令生成的自签名证书。我们需要keytool -genkey从命令提示符运行命令。

这是我们将使用的确切命令 -

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 - 是描述加密算法,密钥大小和证书有效性的自描述参数。
  • -keypass changeit -storepass changeit - 是我们的信任库和密钥库的密码
  • -keystore ssl-server.jks - 是将存储证书和公钥/私钥的实际密钥库。这里我们使用的是JKS fromat - Java Key Store,还有其他格式的密钥库。

一旦我们执行上述命令,它将询问某些信息,最后这将是这样的。

keytool生成证书

关于认证生成,这就是我们所需要的。这将生成ssl-server.jks包含我们自签名证书的密钥库文件,该文件位于执行keytool命令的目录中。

要查看此密钥库中的内容,我们可以再次使用该keytool -list命令。

 
keytool -list -keystore ssl-server.jks

password为空 直接回车

keytool -list选项

创建Spring-boot项目并配置SSL

生成春季启动项目

创建从一个弹簧引导工程SPRING INITIALIZR网站有依赖性WebRest Repositories。选择依赖关系并给出正确的maven GAV坐标后,我们将获得压缩格式的下载选项。下载骨架项目,解压缩然后在eclipse中导入为maven项目。

Spring启动项目生成

添加REST端点

出于测试目的,我们将使用一个简单的REST端点。为此,打开已经生成的Spring引导应用程序类,@SpringBootApplication并添加此代码。这将/secured在服务器中公开一个具有相对URL的休息端点。

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

这就是我们在应用程序中添加Web内容所需的全部内容。您可以添加更多内容,例如添加页面,图像以创建功能齐全的Web应用程序。

Spring启动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

这就是我们启用https所需的全部内容。这很简单,对吧?感谢弹簧靴,让一切都变得非常轻松。

演示

现在是时候通过命令进行最终的maven构建mvn clean install并按命令启动应用程序java -jar target\ssl-server-0.0.1-SNAPSHOT.jar。这将在localhost 8443端口启动我们的安全应用程序,我们的端点url将是https://localhost:8443/secured

由于我们的REST端点是通过GET公开的,因此我们只能通过浏览器进行测试。转到https://localhost:8443/secured,您将收到一些浏览器警告,例如证书未从可信证书颁发机构颁发,在浏览器中添加例外,您将从刚创建的HTTPS服务器获得响应。

浏览器输出

将HTTP请求重定向到HTTPS

如果您要将HTTP流量重定向到HTTPS,这是一个可选步骤,以便整个站点变得安全。要在spring boot中执行此操作,我们需要在8080端口添加HTTP连接器,然后我们需要设置重定向端口8443。因此,8080通过http的任何请求,它将自动重定向到8443和https。

要做到这一点,您只需要添加以下配置。

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

按命令执行最终的maven构建mvn clean install并启动应用程序。测试http://localhost:8080/secured。它会自动重定向到HTTPS安全URL。

@Configuration
public class HttpsConfig { //如果没有使用默认值80
@Value("${http.port:8443}")
Integer httpPort; //正常启用的https端口 如443
@Value("${server.port}")
Integer httpsPort; // springboot2 写法
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@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(httpPort);
connector.setSecure(false);
connector.setRedirectPort(httpsPort);
return connector;
}
}

按命令执行最终的maven构建mvn clean install并启动应用程序。测试http://localhost:8080/secured它会自动重定向到HTTPS安全URL。

摘要

所以今天我们了解到,我们如何在Spring启动应用程序中启用HTTPS,并且我们已经看到了如何将HTTP流量重定向到HTTPS。我们还学会了创建自签名SSL证书。

请在评论部分将您的问题提交给我。

Spring Boot SSL的更多相关文章

  1. Spring Boot SSL [https]配置例子

    前言 本文主要介绍Spring Boot HTTPS相关配置,基于自签证书实现: 通过本例子,同样可以了解创建SSL数字证书的过程: 本文概述 Spring boot HTTPS 配置 server. ...

  2. spring boot / cloud (五) 自签SSL证书以及HTTPS

    spring boot / cloud (五) 自签SSL证书以及HTTPS 前言 什么是HTTPS? HTTPS(全称:Hyper Text Transfer Protocol over Secur ...

  3. Https系列之二:https的SSL证书在服务器端的部署,基于tomcat,spring boot

    Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...

  4. spring boot (2):spring boot 打包tomcat、tomcat 部署多个项目、服务器部署项目SSL 设置(阿里云)

    一.spring boot 内置tomcat配置https: 关于自签名证书可以看下上一篇 spring boot1 更详细的可以看转载 https://www.jianshu.com/p/8d4ab ...

  5. spring boot 添加整合ssl使得http变成https方法

    1. https出现的背景:(1)都知道http传输协议是裸漏的,明文传输的,极易被黑客拦截,因此,(2)人们想出的使用加密,也就是 对称加密 例如aes,不过这个由于因为对称加密需要每个客户端和服务 ...

  6. 第一个Spring Boot Web程序

    需要的环境和工具: 1.Eclipse2.Java环境(JDK 1.7或以上版本)3.Maven 3.0+(Eclipse已经内置了) 写个Hello Spring: 1.新建一个Maven项目,项目 ...

  7. Spring boot配置文件 application.properties

    http://www.tuicool.com/articles/veUjQba 本文记录Spring Boot application.propertis配置文件的相关通用属性 # ========= ...

  8. 在Spring Boot中使用Https

    本文介绍如何在Spring Boot中,使用Https提供服务,并将Http请求自动重定向到Https. Https证书 巧妇难为无米之炊,开始的开始,要先取得Https证书.你可以向证书机构申请证书 ...

  9. 自制Https证书并在Spring Boot和Nginx中使用

    白话Https一文中, 介绍了Https存在的目的和工作原理,但多是偏向于原理性的介绍,本文介绍如何一步一步自制一个能够通过浏览器认证的Https证书,并讲解在Spring Boot环境和Nginx环 ...

随机推荐

  1. java集合树状结构及源码

    java集合树状结构及源码 最近一直想看一下java集合的源码,毕竟平时用的比较多,但总是感觉是跟着习惯new出来一个对象,比如ArrayList,HashMap等等,所以就简单的看了一下,了解了一下 ...

  2. 微信小程序tab栏切换

    Wxml代码:<view class="body"> <view class="nav bc_white"> <view clas ...

  3. udp重发

    最近在处理框架通讯方面的问题,通过积累的开发经验,其实在很多情况(尤其是实时大数据量),udp是占有很多优势的:不需要连接,只管发送,理论上要快很多; 另外在穿墙上占有很大优势: 但是最大的一个问题就 ...

  4. python基础内容目录

    一  python基础 二  python基础数据类型 三  python文件操作及函数初识 四  python函数进阶 五  python装饰器 六  python迭代器与生成器 七  python ...

  5. related_name

    定义表Apple: class Apple( models.Model): origin_level = models.ForeignKey(AppleLevel) new_level = model ...

  6. Django整理1

    基本结构 │ db.sqlite3 ----------sqlie3数据库 │ manage.py │ ├─logres │ │ admin.py 后台,可以用很少量的代码就拥有一个强大的后台. │ ...

  7. python-day2列表、元祖、字典;编码;字符串

    @导入模块时,会先搜索目前路径的同名py文件,再去全局环境变量找 @看模块的环境变量 import sys print(sys.path) @site-package存放第三方库,可以把自己建的拷贝在 ...

  8. ucos之互斥信号量及优先级反转

    在ucos常使用共享资源来作为任务之间的通信方式,其中有:消息队列,信号量,邮箱,事件.信号量中又分二值信号,多值信号,互斥信号.这次主要讲二值信号与互斥信号之间区别和使用. 首先了解一下ucos的任 ...

  9. JAVA Freemarker + Word 模板 生成 Word 文档 (普通的变量替换,数据的循环,表格数据的循环,以及图片的东替换)

    1,最近有个需求,动态生成 Word 文当并供前端下载,网上找了一下,发现基本都是用 word 生成 xml 然后用模板替换变量的方式 1.1,这种方式虽然可行,但是生成的 xml 是在是太乱了,整理 ...

  10. 注解@Transactional(rollbackFor = Exception.class) 的用法

    由于业务需求要求,在一个Service的一个方法A中有一个for循环,每次循环里面的业务逻辑有可能发生异常,这个时候就需要将这个循环内的所有数据库操作给回滚掉,但是又不能影响到之前循环里数据的更改,并 ...