• 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
    
    • 1

    命令含义:

    • 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
    
    • 1
    • 2
    • 3
    • 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;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
  • 相关阅读:
    Spring Framework 黑马程序员-学习笔记
    .NET轻松实现支付宝服务窗网页授权并获取用户相关信息
    minio文件服务器开启https
    深度学习入门
    LeetCode-1757. 可回收且低脂的产品_SQL
    Qt开发流程
    日常渗透刷洞的一些小工具
    FFmpeg 6.1 发布,7.0时代即将来临
    【SpringBoot笔记14】SpringBoot框架之RestTemplate对象及其常用方法
    CTF网络安全大赛简单web题目:eval
  • 原文地址:https://blog.csdn.net/usa_washington/article/details/132828057