HTTPS原理(证书验证+数据传输)+SpringBoot配置https

HTTPS协议相关的概念有SSL、非对称加密、CA证书等

  • 为什么用了HTTPS就是安全的?
  • HTTPS底层原理如何实现?
  • 用了HTTPS就一定安全吗?

HTTPS实现原理

HTTPS在内容传输上的加密使用的是对称加密,证书验证阶段使用非对称加密
在这里插入图片描述
在这里插入图片描述

中间人攻击的具体过程:

首先我们假设不存在认证机构,任何人都可以制作证书,这带来的安全风险便是经典的“中间人攻击”问题。
在这里插入图片描述
在这里插入图片描述

浏览器是如何确保 CA 证书的合法性?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本地随机数被窃取怎么办?

证书验证是采用非对称加密实现,但是传输过程是采用对称加密,而其中对称加密算法中重要的随机数是由本地生成并且存储于本地的,HTTPS 如何保证随机数不会被窃取?

其实 HTTPS 并不包含对随机数的安全保证,HTTPS 保证的只是传输过程安全,而随机数存储于本地,本地的安全属于另一安全范畴,应对的措施有安装杀毒软件、反木马、浏览器升级修复漏洞等。

用了 HTTPS 会被抓包吗?

HTTPS 的数据是加密的,常规下抓包工具代理请求后抓到的包内容是加密状态,无法直接查看。

但是,正如前文所说,浏览器只会提示安全风险,如果用户授权仍然可以继续访问网站,完成请求。因此,只要客户端是我们自己的终端,我们授权的情况下,便可以组建中间人网络,而抓包工具便是作为中间人的代理。通常 HTTPS 抓包工具的使用方法是会生成一个证书,用户需要手动把证书安装到客户端中,然后终端发起的所有请求通过该证书完成与抓包工具的交互,然后抓包工具再转发请求到服务器,最后把服务器返回的结果在控制台输出后再返回给终端,从而完成整个请求的闭环。

既然 HTTPS 不能防抓包,那 HTTPS 有什么意义?

HTTPS 可以防止用户在不知情的情况下通信链路被监听,对于主动授信的抓包操作是不提供防护的,因为这个场景用户是已经对风险知情。要防止被抓包,需要采用应用级的安全防护,例如采用私有的对称加密,同时做好移动端的防反编译加固,防止本地算法被破解。

在这里插入图片描述
在这里插入图片描述

SpringBoot配置https

如果使用了 nginx 或者 tomcat 的话,https 也可以发非常方便的配置,从各个云服务厂商处申请到 https 证书之后,官方都会有一个详细的配置教程,一般照着做,就不会错了。

一、Https证书

需要有一个 https 证书,可以从各个云服务厂商处申请一个免费的。
不过自己做实验没有必要这么麻烦,我们可以直接借助 Java 自带的 JDK 管理工具 keytool 来生成一个免费的 https 证书

进入到 %JAVVA_HOME%\bin 目录下,执行如下命令生成一个数字证书:

keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048  -keystore D:\javaboy.p12 -validity 365

命令含义:

  • genkey 表示要创建一个新的密钥
  • alias 表示 keystore 的别名
  • keyalg 表示使用的加密算法是 RSA ,一种非对称加密算法
  • keysize 表示密钥的长度
  • keystore 表示生成的密钥存放位置
  • validity 表示密钥的有效时间,单位为天

在这里插入图片描述

命令执行完成后 ,我们在 D 盘目录下会看到一个名为 javaboy.p12 的文件。如下图:
在这里插入图片描述

二、项目中引入 https

将上面生成的 javaboy.p12 拷贝到 Spring Boot 项目的 resources 目录下。然后在 application.properties 中添加如下配置:

server.ssl.key-store=classpath:javaboy.p12
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=111111
  • key-store表示密钥文件名
  • key-alias表示密钥别名
  • key-store-password就是在cmd命令执行过程中输入的密码

配置完成后,就可以启动 Spring Boot 项目了,此时如果我们直接使用 Http 协议来访问接口,就会看到如下错误:
在这里插入图片描述
改用 https 来访问 ,结果如下:

在这里插入图片描述
这是因为我们自己生成的 https 证书不被浏览器认可,不过没关系,我们直接点击继续访问就可以了(实际项目中只需要更换一个被浏览器认可的 https 证书即可)
在这里插入图片描述

三、配置类进行请求转发

Spring Boot 不支持同时启动 HTTP 和 HTTPS ,为了解决这个问题,我们这里可以配置一个请求转发,当用户发起 HTTP 调用时,自动转发到 HTTPS 上

@Configuration
public class TomcatConfig{
	
	@Bean
	TomcatServletWebServerFactory tomcatServletWebServerFactory() {
		
		TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(){
			
			@Override
			protected void postProcessContext(Context context){
				SecurityConstraint constraint = new SecurityConstraint();
				constraint.setUserConstraint("CONFIDENTIAL");
				
				SecurityCollection collection = new SecurityCollection();
				collection.addPattern("/*");
				
				constraint.addCollection(collection);
				context.addConstraint(constraint);
			}
		};
		factory.addAdditionalTomcatConnectors(createTomcatConnector());
		return factory;
	}

	/**
		配置了 Http 的请求端口为 8081,所有来自 8081 的请求,将被自动重定向到 8080 这个 https 的端口上
	*/
	private Connector createTomcatConnector(){
		Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8081);
        connector.setSecure(false);
        connector.setRedirectPort(8080);
        return connector;
	}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现Spring Boot Vue传输的数据加密,可以采用以下步骤: 1. 在Spring Boot中使用Spring Security框架来实现数据加密。可以使用Spring Security提供的加密算法,如AES、DES等。 2. 在Vue中使用加密算法对数据进行加密。可以使用Vue提供的加密库,如CryptoJS等。 3. 在Spring Boot中配置跨域访问,以便Vue可以访问Spring Boot的API。 4. 在Vue中使用axios库来发送请求,并在请求头中添加加密后的数据。 5. 在Spring Boot中解密请求数据,并进行相应的处理。 通过以上步骤,就可以实现Spring Boot Vue传输的数据加密。 ### 回答2: 要实现Spring Boot和Vue传输的数据加密,可以采取以下步骤: 1. 使用Spring Security进行身份验证和授权,确保只有经过身份验证的用户才能访问受保护的接口。可以使用Spring Security的基本身份验证、表单身份验证或令牌身份验证。 2. 在后端Spring Boot应用程序中,使用HTTPS协议来加密数据的传输。通过配置SSL证书,可以确保通信的安全性。可以使用自签名证书或从受信任的证书颁发机构获取证书。 3. 在前端的Vue应用程序中,可以使用axios库来发送HTTPS请求。确保所有的请求都是通过HTTPS协议发送,以保证数据的传输安全。 4. 在后端Spring Boot应用程序中,可以使用加密算法对敏感数据进行加密,例如使用AES加密算法。可以编写自定义的加密和解密工具类,在处理敏感数据时使用这些工具类进行加密和解密操作。 5. 在前端的Vue应用程序中,可以使用加密算法对敏感数据进行加密,例如使用CryptoJS库提供的加密算法。确保在发送数据之前对敏感数据进行加密,接收数据后对加密数据进行解密。 6. 使用消息摘要算法对数据进行签名,以确保数据的完整性和验证数据来源的真实性。可以在后端和前端分别使用相同的签名算法进行数字签名和验证。 通过以上步骤,可以实现Spring Boot和Vue之间传输数据的加密。同时要注意在安装证书和设置HTTPS时的安全最佳实践,以确保数据传输的安全性和完整性。 ### 回答3: 实现Spring Boot和Vue传输的数据加密主要可以通过以下步骤来实现: 1. 前后端建立安全连接:确保前后端之间的通信通过HTTPS进行加密传输,可以在服务器上配置SSL证书来启用HTTPS连接。 2. 在Spring Boot中使用加密算法:可以使用Spring Security框架来实现对数据的加密和解密操作。通过引入相应的依赖包,配置相应的加密算法,使用指定的密钥对数据进行加密和解密操作。 3. 在Vue中使用加密算法:在前端页面中引入加密算法的JavaScript库,例如CryptoJS。根据数据的加密算法和密钥,使用相应的方法对数据进行加密和解密操作。 4. 对敏感数据进行加密:在传输敏感数据之前,将其进行加密处理。例如,在后端使用Spring Boot将数据加密后,将加密后的数据传输给Vue前端进行显示和处理。 5. 加密相关的数据传输约定:在前后端之间约定好加密和解密的算法、密钥和加密方式。确保前后端都按照相同的约定进行加密和解密操作,保证数据的一致性和安全性。 综上所述,实现Spring Boot和Vue传输的数据加密需要建立安全连接,配置加密算法,使用相应的加密库进行加密和解密操作,并对传输的敏感数据进行加密处理。同时,还需要定义加密相关的数据传输约定,确保前后端按照相同的方式进行加密和解密操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值