Skip to main content

moregeek program

加解密与https(6)-多极客编程

您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~




随着成本的下降,主流网站都已经开始使用HTTPS了。但有了可信机构颁发的证书,网站就真的绝对安全了吗?以之前出现过的上大学被冒名顶替的事件为例,如果个人信息被「抓包」怎么办?

看过前面技术博客的小伙伴可能还记得,HTTPS的整体过程分为证书验证和数据传输阶段:

1、证书验证阶段

1)、浏览器发起HTTPS请求

2)、服务端返回HTTPS证书

3)、客户端验证证书是否合法,如果不合法则提示告警

2、数据传输阶段

1)、当证书验证合法后,在本地生成随机数

2)、通过公钥加密随机数,并把加密后的随机数传输到服务端

3)、服务端通过私钥对随机数进行解密

4)、服务端通过传入的随机数构造对称加密算法,对返回结果内容进行加密后传输

因为非对称加解密效率很低,而实际应用场景中端与端之间通常有大量的交互。所以,在HTTPS的场景中只有服务端保存了私钥,因此只能实现单向的加解密,所以内容传输要采用对称加密算法。

如果没有证书颁发机构,就会出现经典的「中间人攻击」:

加解密与HTTPS(6)_HTTPS


这和冒名顶替上大学如出一辙:

1、本地请求被劫持(如DNS劫持等),所有请求被发送到中间人的服务器

2、中间人服务器返回中间人自己的证书

3、客户端创建随机数,通过中间人证书的公钥对随机数加密后传送给中间人,然后凭随机数构造对称加密对传输内容进行加密传输

4、中间人因为拥有客户端的随机数,可以通过对称加密算法进行内容解密

5、中间人以客户端的请求内容再向正规网站发起请求

6、因为中间人与服务器的通信过程是合法的,正规网站通过建立的安全通道返回加密后的数据

7、中间人凭借与正规网站建立的对称加密算法对内容进行解密

8、中间人通过与客户端建立的对称加密算法对正规内容返回的数据进行加密传输

9、客户端通过与中间人建立的对称加密算法对返回结果数据进行解密

之所以出现这种状况,是因为:

1、客户端不知道自己的信息被拦截了

2、客户端完全无法验证证书的真假

所以,用了HTTPS一样会被抓包,HTTPS无法防止被抓包,只能防止用户在不知情的状态下通信被监听。

如果用户主动信任网站,那么数据一样会被「中间人」窃取。


尽管HTTPS仍然不够安全,但它至少比HTTP啥都不穿裸奔还是要强一些的。所以下面就来演示一下怎么给SpringBoot添加HTTPS服务。


先创建证书:

keytool -genkey -alias https -keyalg RSA -keysize 2048 -keystore key.p12 -validity 90

加解密与HTTPS(6)_数字证书_02


再修改SpringBoot的配置,在application.properties配置文件中加上:

server.ssl.key-store=/Users/bear/key.p12

server.ssl.key-store-password=123456

server.ssl.key-store-type=PKCS12

server.ssl.key-alias=https


然后启动SpringBoot服务。通过Postman访问,发现报错:

Bad Request

This combination of host and port requires TLS.


先导出公钥:

openssl pkcs12 -in key.p12 -clcerts -out public_key.pem

再导出私钥:

openssl pkcs12 -in key.p12 -nodes -out private_key.pem

然后再修改Postman配置:

加解密与HTTPS(6)_数字证书_03


加解密与HTTPS(6)_HTTPS_04


再次运行Postman测试,功能正常实现。




感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

©著作权归作者所有:来自51CTO博客作者湘王爱娟娟的原创作品,请联系作者获取转载授权,否则将追究法律责任

nginx 代理转发 传递真实 ip 地址-多极客编程

一、实际问题在实际的项目开发和部署中,客户端并不是直接访问到服务器的服务的,而是通过反向代理的转发,发送到服务器端实现服务访问。比如通过反向代理实现路由/负载均衡等策略。这样在服务端拿到的客户端 ip 是反向代理服务器的 ip,而不是真实的客户端 ip。问题是在实际项目中,日志记录等应用场景必须使用到客户端真实 IP 地址。二、解决办法下面就是如何在使用Nginx代理和不使用代理的情况下获取客户端

nginx代理配置只允许指定ip访问-多极客编程

在使用Nginx时,有时只想要指定的IP进行访问,其余IP都需要禁止,今天就来说一下,Nginx如何配置允许、禁止指定Ip访问location / { index index.jsp; proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header; proxy_set_he

加解密与https(5)-多极客编程

您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~咱们大学读完之后有毕业证书,并且这个证书可以在学信网查询。专业上有注会、CCIE、律师证等,可以在国家职业认证机构或委托机构的网站上查到。公司注册之后,营业执照信息也可以在天眼查或企查查上找到。从上述场景中,不难发现证书的作用:1、过往经历的证明;2、第三方信用担保;3、唯一合法性检验。在互联网上也有证书,并且还是天文数字,随便举几个例

jdk7 和jdk8的arraylist的区别对比-多极客编程

示例 public class ArrayListTest { public static void main(String[] args) { ArrayList<Object> jdk = new ArrayList<>(); jdk.add(123); } } 初始化操作 ①调用无参构造器 jdk7从无参调用有参构造器

【xml】xml解析与校验-多极客编程

Student@XmlRootElement(name = "Root")public class Student { private String id; private String name; private String age; private StdClass stdClass; @XmlElement(name = "ID") public Str

一文了解 dubbo 3 配置工作原理-多极客编程

以下是一个 Dubbo 属性配置的例子 dubbo-spring-boot-samples ## application.properties # Spring boot application spring.application.name=dubbo-externalized-configuration-provider-sample # Base packages to

nginx 代理转发 传递真实 ip 地址-多极客编程

一、实际问题在实际的项目开发和部署中,客户端并不是直接访问到服务器的服务的,而是通过反向代理的转发,发送到服务器端实现服务访问。比如通过反向代理实现路由/负载均衡等策略。这样在服务端拿到的客户端 ip 是反向代理服务器的 ip,而不是真实的客户端 ip。问题是在实际项目中,日志记录等应用场景必须使用到客户端真实 IP 地址。二、解决办法下面就是如何在使用Nginx代理和不使用代理的情况下获取客户端

nginx代理配置只允许指定ip访问-多极客编程

在使用Nginx时,有时只想要指定的IP进行访问,其余IP都需要禁止,今天就来说一下,Nginx如何配置允许、禁止指定Ip访问location / { index index.jsp; proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header; proxy_set_he

场景编程集锦-电闪雷鸣的数学联想-多极客编程

1. 场景描述电闪雷鸣总能给人许多的联想。我联想到了电闪雷鸣、暴雨倾盆、山洪爆发、洪水泛滥的灾难场景,这种现象在中国古代通常被解释为“冒犯神灵,雷神发怒”的因果关系。我联想到了著名的风筝实验。1752年,美国科学家本杰明·富兰克林用风筝和钥匙做了一次科学实验,他冒着雷击的危险用风筝把雷电引下来,证明了闪电是一种放电现象。富兰克林关于天上和人间的电是同一个东西的假说,在这次实验中得到了光辉的证实。这

jdk7 和jdk8的arraylist的区别对比-多极客编程

示例 public class ArrayListTest { public static void main(String[] args) { ArrayList<Object> jdk = new ArrayList<>(); jdk.add(123); } } 初始化操作 ①调用无参构造器 jdk7从无参调用有参构造器

场景编程集锦-懵懂的青春-多极客编程

1. 场景描述“等待着下课,等待着放学,等待游戏的童年"。当罗大佑这首耳熟能详的“童年”再度想起的时候,你和我是否都会被这个熟悉的旋律带回到那个只属我们的懵懂年代?你还记得那个“同桌的你”吗?那个周杰伦唱到的“等你下课”的人,如今身在何方?在那样一个没有手机微信和短信传递讯息的年代,你是否经历或见证过这样的场景,通过一张张“小纸条”,给那个心仪的“她/他”传递浪漫?那些曾经在课堂上冒险传递诸如:“

场景编程集锦 - 吉米的总统梦想-多极客编程

1. 场景描述   吉米是太平洋岛国一个贫苦家庭的孩子,他的梦想就是当总统,引领国家走向富强之路。   开学的第一堂课上,老师用白色的粉笔在黑板上写下了“我的梦想”,同学们都陷入了思考。大卫的梦想是当一名科学家,用奇思妙想改变世界,探索人类未知的秘密;杰克的梦想是当一名妙手回春的医生,用高超的医术解除病人的痛苦;迪娜的梦想是当一名歌手,让自己的歌声传遍世界的每一个角落;吉米的梦想是当总统,刚说到这