Springboot整合https原来这么简单

简介: 云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 1 简介 HTTP是不安全的,我们需要给它套上SSL,让它变成HTTPS。本文章将用实例介绍Springboot整合HTTPS。

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


1 简介

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

2 密码学基础

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

2.1 密码体制

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

明文M:加密前或解密后的信息;

密文C:明文加密后的信息;

密钥K:由加密密钥和解密密钥组成;

加密E:从明文到密文的变换;

解密D:从密文到明文的变换。

如图所示:

1

2.2 两种加密方式

2.2.1 对称加密

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

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

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

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

举个小例子:

2

2.2.2 非对称加密

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

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

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

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

举个大例子:

步骤如下:

3

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

3

2.3 证书

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

获取证书有两种方式:

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

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

3 Springboot整合HTTPS

3.1 先让Web跑起来

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

(1)引入Web依赖:

4

(2)配置端口:

5

(3)实现Contrlloer:

6

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

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

1

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文件:

2

重启后访问如下:

3

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

通过Postman来访问便可:

4

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

配置文件如下:

5

总结

本文简单介绍了一些密码学的基础和如何通过Springboot整合HTTPS。本文详细代码可在南瓜慢说公众号回复获取。

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

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-04-27
本文作者:南瓜慢说
本文来自:“掘金”,了解相关信息可以关注“掘金”

相关文章
|
3月前
|
网络协议 Java 应用服务中间件
Springboot+ubuntu+Let‘s Encrypt配置https
Springboot+ubuntu+Let‘s Encrypt配置https
38 0
|
6月前
|
Java
SpringBoot使用ProxyServlet实现HTTP反向代理
SpringBoot使用ProxyServlet实现HTTP反向代理
295 0
|
11天前
|
Web App开发 前端开发 Java
SpringBoot配置HTTPS及开发调试
在实际开发过程中,如果后端需要启用https访问,通常项目启动后配置nginx代理再配置https,前端调用时高版本的chrome还会因为证书未信任导致调用失败,通过摸索整理一套开发调试下的https方案,特此分享
19 0
SpringBoot配置HTTPS及开发调试
|
2月前
|
Java
SpringBoot配置https
SpringBoot配置https
16 1
|
5月前
|
安全 网络协议 Java
SpringBoot+阿里云配置HTTPS加密访问
SpringBoot+阿里云配置HTTPS加密访问
120 0
|
7月前
|
Java Maven Spring
spring boot项目访问外部http请求的解决方案
spring boot项目访问外部http请求的解决方案
88 1
|
8月前
|
JSON 网络协议 Java
springboot服务端接口公网远程调试 - 实现HTTP服务监听【端口映射】
前后端分离项目中,在调用接口调试时候,我们可以通过cpolar内网穿透将本地服务端接口模拟公共网络环境远程调用调试,本次教程我们以Java服务端接口为例。
64 0
springboot服务端接口公网远程调试 - 实现HTTP服务监听【端口映射】
|
8月前
|
JSON 网络协议 Java
springboot服务端接口公网远程调试 - 实现HTTP服务监听【端口映射】
springboot服务端接口公网远程调试 - 实现HTTP服务监听【端口映射】
89 0
|
8月前
|
JSON Java 数据格式
springboot服务端接口外网远程调试,并实现HTTP服务监听(二)
springboot服务端接口外网远程调试,并实现HTTP服务监听(二)
77 0
|
2月前
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
177 0