我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Springboot整合https的实例代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Springboot整合https的实例代码

1 简介

HTTP是不安全的,我们需要给它套上SSL,让它变成HTTPS。本文章将用实例介绍Springboot整合HTTPS

2 密码学基础

要谈https就要谈Security,自然就要谈安全;谈及安全,就必然涉及密码学的一些知识。

2.1 密码体制

要建立一个密码体制,需要由五个空间组成,分别是:

  • 明文M:加密前或解密后的信息;
  • 密文C:明文加密后的信息;
  • 密钥K:由加密密钥和解密密钥组成;
  • 加密E:从明文到密文的变换;
  • 解密D:从密文到明文的变换。

如图所示:

2.2 两种加密方式

2.2.1 对称加密

对称加密,或者也叫单钥加密,是指加密密钥和解密密钥相同(或者容易由一个计算出另一个)的加密方式。

对称加密的主要优势是:加密、解密运算速度快,效率高;

局限性:密钥分发复杂,密钥管理困难,保密通信系统开放性差,数字签名;

代表算法:DES算法、AES算法;

举个小例子:

明文为48,加密算法f(x)=8x+71,
则密文C=8*48+71=455
则解密算法为f(x)=(x-71)/8;
则解密后的明文M=(455-71)/8=48;

2.2.2 非对称加密

非对称加密是指加密和解密分别使用不同的密钥,并且不能由加密密钥推导出解密密钥的加密方式。

主要优势:密钥分配简单,便于管理,系统开放性好,可以实现数字签名;

局限性:加密、解密运算效率较低;

代表算法:RSA算法、ECC算法;

举个大例子:

步骤如下:

StepDescriptionFormulaNote
1找出两个质数P、Q 
2计算公共模数N=P*Q 
3计算欧拉函数φ(N) = (P-1)(Q-1) 
4计算公钥E1 < E < φ(N)E的取值必须是整数 E 和 φ(N) 必须是互质数
5计算私钥DE * D % φ(N) = 1 
6加密C = M^E mod NC:密文 M:明文
7解密M =C^D mod NC:密文 M:明文

其中,公钥=(E , N) ,私钥=(D, N),对外,我们只暴露公钥。

1.找出两个质数
随便找两个质数,我们找P=5,Q=11。

2.计算公共模数
公共模数N=P*Q=5*11=55
3.计算欧拉函数
φ(N) = (P-1)(Q-1)=4*10=40
4.计算公钥E
1 < E < φ(N),我们取E=13
5.计算私钥D
(13*D)%40=1,则取D=37
6.加密
假设要传输的明文为8,使用公钥(E,N)=(13,55)加密
通过公式C = M^E mod N=8^13%55=28
7.解密
使用密钥(D,N)=(37,55)解密
解密M =C^D mod N=28^37%55=8
另外,我们可以用私钥加密,公钥解密,
如明文为2,则用私钥(37,55)加密密文C=(2^37)%55=7
用公钥(13,55)解密M=(7^13)%55=2。

至此,整个非对称加密过程演示了一遍,希望大家能理解,特别是非对称加密,因为HTTPS使用的是非对称加密。实际的使用算法更复杂,密钥长度会更大。

2.3 证书

要使用SSL,需要有证书,这个证书文件是包含公钥密钥,也就是非对称加密中要使用的。

获取证书有两种方式:

  • 从CA(Certificate Authority)机构获取,即客户端会认可的证书,具有公信力;有免费也有收费的,收费的比较稳定比较安全。
  • 自签证书,自己制作证书,一般用于测试,浏览器不承认。

为方便起见,在本次实例中使用自签证书,两种证书整合过程并无差异。

3 Springboot整合HTTPS

3.1 先让Web跑起来

作为一个Web应用,我们先让它跑起来,然后再整合https

(1)引入Web依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

(2)配置端口:

server.port=80

(3)实现Contrlloer

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Welcome to www.pkslow.com";
    }
}

完成上面工作后,启动应用即可。

访问http://localhost/hello 得到下面结果,说明整个Web应用起来了。

3.2 生成密钥文件jks

通过命令行生成密钥文件如下:

keytool -genkey -alias localhost -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keystore localhost.jks -dname CN=localhost,OU=Test,O=pkslow,L=Guangzhou,C=CN -validity 731 -storepass changeit -keypass changeit

命令行重要参数的意义:

  • alias:密钥别名,可以随便起,不冲突就行;
  • keyalg:加密算法;
  • keysize:密钥长度,2048基本就不可能破解了;
  • keystore:keystore的文件名;
  • dname:这个很关键,特别是CN=后面要按正确的域名来写;
  • validity:cert的有效期;

执行完以上命令后,就会生成localhost.jks文件,把该文件放到classpath下即可,当然也可以放到其它位置,配置文件指定正确即可。

3.3 重新配置并重启

按照实际情况重新配置application.properties文件:

server.port=443
server.ssl.enabled=true
server.ssl.key-store-type=jks
server.ssl.key-store=classpath:localhost.jks
server.ssl.key-store-password=changeit
server.ssl.key-alias=localhost

重启后访问如下:

发现有红色警告,因为这是自签名的cert,并不被Chrome所认可,所以会校验失败。以前的Chrome版本只是警告,但还是可以访问的,现在新版本的已经不能访问了。

通过Postman来访问便可:

3.4 使用PKS12格式

如果想使用PKCS12替换JKS,命令和配置可以参考下面:

生成密钥:

keytool -genkey -alias localhost -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -storetype PKCS12 -keystore localhost.p12 -dname CN=localhost,OU=Test,O=pkslow,L=Guangzhou,C=CN -validity 731 -storepass changeit -keypass changeit

配置文件如下:

server.port=443
server.ssl.enabled=true
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:localhost.p12
server.ssl.key-store-password=changeit
server.ssl.key-alias=localhost

总结

本文简单介绍了一些密码学的基础和如何通过Springboot整合HTTPS

其实,SSL非常复杂,知识点非常多。后续文章会继续介绍密钥工具、重定向、Reactive整合、双向验证等。

详细代码从下面百度网盘获取吧!

链接: https://pan.baidu.com/s/1rVyLYG_HM1qnR6Jz0lAhlw?pwd=2iy4

提取码: 2iy4

到此这篇关于Springboot整合https原来这么简单的文章就介绍到这了,更多相关Springboot整合https内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Springboot整合https的实例代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringBoot整合JPA的实例代码

JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA 的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该
2023-05-31

Java springboot 整合 Nacos的代码实例

本篇内容主要讲解“Java springboot 整合 Nacos的代码实例”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java springboot 整合 Nacos的代码实例”吧!Naco
2023-06-14

SpringBoot整合ElasticSearch的示例代码

ElasticSearch作为基于Lucene的搜索服务器,既可以作为一个独立的服务部署,也可以签入Web应用中。SpringBoot作为Spring家族的全新框架,使得使用SpringBoot开发Spring应用变得非常简单。本文要介绍如
2023-05-31

SpringBoot整合jersey的示例代码

这篇文章主要从以下几个方面来介绍。简单介绍下jersey,springboot,重点介绍如何整合springboot与jersey。 什么是jersey 什么是springboot 为什么要使用springboot+jersey 如
2023-05-31

SpringBoot整合Minio的示例代码

这篇文章主要介绍了SpringBoot整合Minio的示例代码,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-12-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录