【JavaEE】网络原理: HTTPS协议相关内容

目录

HTTPS 是什么

HTTPS 的工作过程

对称加密

非对称加密

引入证书

理解数据签名

通过证书解决黑客攻击


HTTPS 是什么

HTTPS也是一个应用层协议, 是在HTTP协议的基础上引入了一个加密层
HTTP协议内容都是按照文本的方式明文传输的, 这就导致在传输过程中出现一些被篡改的情况. 
 

HTTPS 的工作过程

既然要保证数据安全,就需要进行"加密".

网络传输中不再直接传输明文了,  而是加密之后的"密文".

加密的方式有很多,但是整体可以分成两大类: 对称加密和非对称加密
 

对称加密

对称加密其实就是通过同一个"密钥" , 把明文加密成密文, 并且也能把密文解密成明文.

假设明文a= 1234, 密钥key = 8888
则加密 a^key 得到的密文b为 9834.
然后针对密文 9834 再次进行运算b ^ key, 得到的就是原来的明文1234.
(对于字符串的对称加密也是同理, 每一个字符都可以表示成一个数字)
当然,按位异或只是最简单的对称加密.  HTTPS中并不是使用按位异或.

引入对称加密之后,即使数据被截获,  由于黑客不知道密钥是啥,  因此就无法进行解密,  也就不知道请求的真实内容是啥了.
但事情没这么简单, 服务器同一时刻其实是给很多客户端提供服务的. 这么多客户端, 每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了,黑客就也能拿到了). 因此服务器就需要维护每个客户端和每个密钥之间的关联关系,这也是个很麻烦的事情~

比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定这次的密钥是啥

但是如果直接把密钥明文传输, 那么黑客也就能获得密钥了,  此时后续的加密操作就形同虚设了.
因此密钥的传输也必须加密传输! 

但是要想对密钥进行对称加密,就仍然需要先协商确定一个"密钥的密钥". 这就成了 "先有鸡还是先有蛋" 的问题了.

此时密钥的传输再用对称加密就行不通了, 就需要引入非对称加密.
 

非对称加密

非对称加密要用到两个密钥,  一个叫做 "公钥",  一个叫做 "私钥".
公钥和私钥是配对的.  最大的缺点就是运算速度非常慢,比对称加密要慢很多.

  • 通过公钥对明文加密, 变成密文
  • 通过私钥对密文解密, 变成明文

也可以反着用

  • 通过私钥对明文加密, 变成密文
  • 通过公钥对密文解密, 变成明文

  • 客户端在本地生成对称密钥,通过公钥加密,发送给服务器.
  • 由于中间的网络设备没有私钥,即使截获了数据, 也无法还原出内部的原文,也就无法获取到对称密
  • 服务器通过私钥解密, 还原出客户端发送的对称密钥. 并且使用这个对称密钥加密给客户端返回的响应数据.
  • 后续客户端和服务器的通信都只用对称加密即可.  由于该密钥只有客户端和服务器两个主机知道, 其他主机/设备不知道密钥即使截获数据也没有意义.
     

由于对称加密的效率比非对称加密高很多,因此只是在开始阶段协商密钥的时候使用非对称加密, 后续的传输仍然使用对称加密.

上述操作下, 仍然存在重大的安全漏洞, 黑客仍然是有办法获取到对称密钥key

服务器可以创建出一对公钥和私钥, 黑客也可以按照同样的方式, 创建出一对公钥和私钥, 冒充自己是服务器.

要想解决上述问题, 最关键的一点, 客户端拿到公钥的时候, 要能有办法验证这个公钥是否是真的, 而不是黑客伪造的. 

引入证书

服务端在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性

这个证书可以理解成是一个结构化的字符串,里面包含了以下信息:

  • 证书发布机构的信息
  • 证书有效期
  • 服务器的公钥
  • 服务器的域名
  • 证书所有者
  • 证书的签名
  • .......

需要注意的是:申请证书的时候,需要在特定平台生成查,会同时生成一对密钥,即公钥和私
钥。这对密钥对就是用来在网络通信中进行明文加密以及数字签名的。
 

理解数据签名

当服务端申请CA证书的时候,CA机构会对该服务端进行审核,并专门]为该网站形成数字签名,过程如下:

  1.  CA机构拥有非对称加密的私钥A和公钥A'
  2.  CA机构对服务端申请的证书明文数据进行hash,形成数据摘要
  3. 然后对数据摘要用CA私钥A'加密,得到数字签名S

服务端申请的证书明文和数字签名S共同组成了数字证书,这样一份数字证书就可以颁发给服务端了
 

通过证书解决黑客攻击

在客户端和服务器刚一建立连接的时候,服务器给客户端返回一个证书.
这个证书包含了刚才的公钥,也包含了网站的身份信息.

当客户端获取到这个证书之后,会对证书进行校验(防止证书是伪造的).

  • 判定证书的有效期是否过期
  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
  • 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥,对签名解密,  得到一个hash值(称为数据摘要), 设为hash1.  然后计算整个证书的hash值,设为hash2.  对比hash1和hash2是否相等. 如果相等, 则说明证书是没有被篡改过的.

黑客有没有可能篡改该证书?

黑客篡改了证书的明文: 由于他没有CA机构的私钥所以无法hash之后用私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名

● 如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不一致,则说明证书已被篡改, 证书不可信,从而终止向服务器传输信息,防止信息泄露给黑客

黑客如果掉包整个证书呢?

● 因为黑客没有CA私钥,所以无法制作假的证书(为什么? ) 所以黑客只能向CA申请真证书,然后用自己申请的证书进行掉包, 这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。

● 永远记住: 黑客没有CA私钥,所以对任何证书都无法进行合法修改,包括自己的.

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏微凉.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值