HTTPS加密过程解析

前言

用Ngnix配置SSL证书,从而实现可以用https访问的任务。虽然以前计算机网络也学过,但是也是一知半解,很是费解为什么https就要比http安全呢,所以找了很多资料进行学习,最后把学习的结果记录一下,写在这里与大家共享。

一、HTTPS简介

1.什么是HTTPS

HTTPS(全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,简单讲是HTTP的安全版。

2.为什么需要加密?

因为http的内容是明文传输的,明文数据会经过中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,传输的内容就会完全暴露。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击。所以我们才需要对信息进行加密。最容易理解的就是对称加密。

3.HTTPS与HTTP的区别在哪里?

1、HTTPS协议需要到CA申请证书
2、HTTP是明文传输,HTTPS是具有安全性的SSL加密传输
3、HTTP和HTTPS使用的端口不同,前者是80,后者是443
4、HTTPS可进行加密传输、身份认证,比HTTP安全

在这里插入图片描述

二、基本概念介绍

1.SSL&TLS

SSL:Secure Sockets Layer 安全套接字层
TLS:Transport Layer Security 传输层安全
TLS与SSL在传输层之上对网络连接进行加密,保障网络通信安全及数据完整性。
疑问:SSL和TLS到底是什么关系?
SSL目前版本是3.0,最新版本的TLS1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL3.0协议规范之上,是SSL3.0的后续版本,两者差别极小。所以,很多资料都说TLS是SSL的继任者。

2.对称加密算法

客户端和服务器公用一个密匙用来对消息加解密。客户端和服务器约定好一个加密的密匙。客户端在发消息前用该密匙对消息加密,发送给服务器后,服务器再用该密匙进行解密拿到消息。
在这里插入图片描述
对称加密的优点:
对称加密解决了http中消息保密性的问题。

对称加密的缺点:
对称加密虽然保证了消息保密性,但是因为客户端和服务器共享一个密匙,这样就使得密匙特别容易泄露。
因为密匙泄露风险较高,所以很难保证消息来源的可靠性、消息的完整性和准确性。

3.非对称加密算法

客户端和服务端均拥有一个公有密匙和一个私有密匙。公有密匙可以对外暴露,而私有密匙只有自己可见。使用公有密匙加密的消息,只有对应的私有密匙才能解开。反过来,使用私有密匙加密的消息,只有公有密匙才能解开。
在这里插入图片描述
非对称加密的优点:
使得私有密匙泄露的风险降低。
较大程度上保证了消息的来源性以及消息的准确性和完整性。

非对称加密的缺点:
非对称加密比较消耗系统资源,性能相对对称加密来说会慢上几倍甚至几百倍。
如果公玥泄露,容易遭受中间人攻击。对于什么是中间人攻击呢?可以通过下面的图来了解一下:
在这里插入图片描述 我个人觉得 这个一个很有意思的过程,这个中间人扮演了一个伪装者的角色,而且手段很高明。首先这个攻击者在客户端与服务器端开启嗅探模式,等待时机,当目标出现的时候,就开始自己的伪装行为,冒充服务器与客户端通信,然后反过来又伪装成客户端与服务器进行通信。
具体的过程可以看一下上面这个图:首先客户端向服务器发送https请求,服务器有私玥:k1 公玥:k2 。接到请求后向客户端发送自己的公玥k2,中间人劫持公玥并保存,然后伪造自己的私玥pk1 pk2,将自己的公玥发送给客户端客户端。客户端收到公玥之后,因为也没有什么审核的措施,你发给我我就加密了给你发呗,宝宝也不乐意,但是宝宝没办法啊。然后客户端将自己的数据用中间人的公玥pk2加密,得到了data1发送给服务器。在传输过程中,中间人又劫持了加密信息,因为此时的加密信息是用中间人的公玥pk2加密,所以中间人很轻易的就可以用私玥解密,得到原始信息data,之后就可以对data进行篡改,得到data2。最后用劫持保存的服务器端公玥k2加密得到data3,发送给服务器。服务器收到之后,发现可以用私玥解开,便不再生疑。

4.数字证书

CA:CA是证书的签发机构,它是公钥基础设施(Public Key Infrastructure,PKI)的核心。CA负责签发证书、认证证书、管理已颁发证书。
数字证书:CA 证书就是CA颁发的证书。包含证书拥有者的身份信息,CA机构的签名,公钥和私钥。身份信息用于证明证书持有者的身份;CA签名用于保证身份的真实性;公钥和私钥用于通信过程中加解密,从而保证通讯信息的安全性。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明“该公钥对应该网站”。
怎么证明数字证书是可信的?
操作系统、浏览器本身会预装一些它们信任的根证书,如果其中会有CA机构的根证书,这样就可以拿到它对应的可信公钥了。
拿到公玥之后对数字证书进行解密,如果可以成功解密,说明证书可信,进行是否被篡改的验证;如果无法成功解密,说明证书不可信。
怎么保证数字证书不被篡改呢?
我们把证书原本的内容生成一份“签名”,比对证书内容和签名是否一致就能判别是否被篡改。这就是数字证书的“防伪技术”,这里的“签名”就叫数字签名。
数字签名的制作和验证过程如下图:
在这里插入图片描述
数字签名的制作过程:
CA机构拥有非对称加密的私钥和公钥。
CA机构对证书明文数据T进行hash。
对hash后的值用私钥加密,得到数字签名S。
浏览器验证过程:
拿到证书,得到明文T,签名S。
用CA机构的公钥对S解密(由于是浏览器信任的机构,所以浏览器保有它的公钥),得到S’。
用证书里指明的hash算法对明文T进行hash得到T’。
显然通过以上步骤,T’应当等于S‘,除非明文或签名被篡改。所以此时比较S’是否等于T’,等于则表明证书可信。

三、加密过程解析

1.SSL建立连接的过程

具体的连接过程参照下面这个图,参照后面的文字注释理解。
在这里插入图片描述
服务端的配置:采用HTTPS协议的服务器必须要有一套数字证书,一般要向权威CA组织申请,包含一对公玥和私玥,申请之后部署到服务器上。
1、客户端发起握手请求,以明文传输请求信息,包含版本信息、加密套件候选列表、压缩算法候选列表、随机数、扩展字段等信息
2、服务端返回协商的信息结果,包括选择使用的协议版本、选择的加密套件、选择的压缩算法 、随机数等。
3、服务器向客户端发送CA证书。
4、客户端验证证书的合法性,包括颁发机构可信性、过期时间、摘要和根证书等等。验证通过,会生成一个48位随机数(预主密钥),不通过抛出异常。
5、组装会话密钥(主密钥、对称密钥)。
用随机数1、随机数2和预主密钥组装成会话密钥。
6、将预主密钥用公玥加密传输给服务器。
7、服务器用私玥解密得到预主密钥。
8、服务器用随机数1、随机数2和预主密钥组装会话密钥。
9、用会话密钥双方发送握手信息,验证连接是否成功。

2.HTTPS通信过程

通信过程如下图所示:
在这里插入图片描述
这里就没什么好说的了,前面的过程都和前面是一致的,只有一个地方需要说明,那就是通过了SSL握手之后,服务器和客户端协商出了相同的会话密钥,之后进行信息交互的过程中,大家用的都是对称加密的方式,这是为啥呢?用非对称加密不是更安全么?
答案是:因为非对称加密算法复杂,比较消耗系统资源,性能相对对称加密来说会慢上几倍甚至几百倍。基于此,选择在确保安全的前提下,采用对称加密进行数据传输。

总结

这就是我要分享的东西啦,希望对大家有所帮助,有不清晰的地方,欢迎大家评论区指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值