Java网络编程之https协议和证书(加密传输+三把钥匙+证书确认)

本文详细介绍了HTTP协议的报文结构、请求和响应,以及HTTPS协议如何通过对称加密和非对称加密(包括公钥、私钥和证书)确保数据安全。特别强调了密钥管理和证书在HTTPS中的关键作用。
摘要由CSDN通过智能技术生成

目录

1.http协议

1.1 http的报文结构

1.2 http请求

1.3 http响应

2.https协议(安全传输)

2.1 引入对称加密

2.2 非对称加密(三把钥匙,公钥,私钥,密钥)

2.3 引入证书


1.http协议

1.1 http的报文结构

http是一个文本格式的协议,可以使用Fiddler工具抓包,从而分析http协议的细节。

Fiddler工具下载链接 https://www.telerik.com/fiddler

抓包工具的原理就相当于是浏览器访问网页(以sogou 为例)时,会先将http请求发送给Fiddler,再把请求发送给该网页所在服务器(sogou)。当sogou服务器返回数据时,Fiddler拿到返回数据,再把数据交给浏览器。

1.2 http请求

以下是一个请求的结果:

接下来我们来分析这个http请求

首行: GET+url+http的版本号

Header:一般是请求的属性,每一组属性之间都用\n来分割,当遇到空行的时候,代表Header部分结束。

Body:是http请求的第三部分,在空行之后的内容都是Body,如果Body存在的话,那么在Header中会有一个Content-Length属性来表示Body的长度。

1.3 http响应

首行:【版本号】+【状态码】+【状态】

第二行:Header,请求的属性,使用冒号分割的键值对来表示。

第三部分:Body是空行之后的内容,如果服务器返回了一个html那么html就会在body中,就像上图的乱码一样(这是有用的信息,只不过需要对信息进行解密,所以显示出来是乱码)。

这一部分就是http协议的基本内容,但是由于在传输的过程中为了保证传输数据的安全,现在大多数网站都使用https协议来保证传输内容的安全性。

2.https协议(安全传输)

 https是一个应用层协议,是在http的基础上引入了一个加密层。

http协议内容都是按照文本的方式明文传输的,这就会导致在传输过程中存在一些被篡改的情况。

因此https就引入了以下机制来保证任务传输的安全性。

2.1 引入对称加密

当引入对称加密之后,黑客即使获取到了传输内容,也不知道传输的具体内容是什么。

但是事情有这么简单吗?答案是并没有。

因为一个服务器并不是给一个客户端服务的,因此黑客可以伪装成客户端发起请求,从而获取到密钥。为了解决这个问题,服务器就要维护给每一个客户端不同的密钥,但是这样做的话对服务器的资源也有很大的压力。所以这件事是一个很麻烦的事情。

而比较理想的做法就是在传输之前客户端和服务器建立连接确定好这次通信的密钥是什么,这是一个比较合理的做法。

由上图可以看出,当密钥被黑客解惑时,此时黑客也知道了密文的具体内容,所以要保证安全传输,密钥的传输也必须使用加密传输。这时候就需要使用到非对称加密。

2.2 非对称加密(三把钥匙,公钥,私钥,密钥)

非对称加密需要使用两个密钥,一个是公钥,一个是私钥。他俩是相互配对的,但是缺点就是运算的速度非常慢,比对称加密要慢得多。 

. 客户端在进行传输时先生成密钥,再通过公钥加密,从而发送给服务器。

. 由于中间的黑客没有私钥,因此即使截获了数据,也无法知道密钥的具体内容,也就无法获取到密钥。

. 服务器通过私钥解密,还原出密钥,并且使用这个密钥加密给客户端的返回数据。

. 后续的通信过程使用密钥加密即可。

那么接下来的问题就是:

如何让客户端获取到公钥?

客户端怎么知道这个公钥不是黑客伪造的?

2.3 引入证书

在客户端和服务器刚开始建立连接的时候,服务器会给客户端发送一个证书。证书中就包含了刚才所说的公钥,也包含了网站的身份信息。证书就相当于是一个人的身份证,作为这个网站的标识。

那么客户端拿到这个证书以后会怎么样确定这个证书是否是黑客伪造的呢?

. 判断证书是否过期(身份证是否过期)

. 判断证书的发行机构是否是正常机构(类似于判断是否是公安局发的身份证)

. 验证证书是否被篡改:

可以想象证书是由两部分组成的:证书内容签名(是使用证书发布机构的私钥进行加密所得到的)。因为这种知名的机构,在操作系统被安装的时候,就已经在我们的计算机中植入了这些机构的公钥。验证证书的完整性和篡改的流程如下:

1. 从系统中获取证书发布机构的公钥。

2.使用公钥对证书中的签名进行解密,得到一个哈希值(hash1).

3.对证书的内容进行哈希计算得到一个哈希值(hash2)

4. 当两个哈希值一样时,说明没有被篡改,否则就是被篡改过的。

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值