密码学应用-HTTPS

客户端Client对服务器端Server进行通讯或者中断通讯,需要用到三次握手和四次挥手。
在这里插入图片描述
三次握手:
客户端发报文:SYN标识位=1,seq序号=x
服务器回报文:SYN=1,ACK标识位=1,seq=x,ack确认号=x+1
客户端回报文:ACK=1,seq=x+1,ack=y+1
四次挥手:
客户端发报文:FIN=1,seq=x
服务器回报文:ACK=1,seq=Y,ack=x+1
客户端回报文:FIN=1,ACK=1,seq=z,ack=x+1
服务器回报文:ACK=1,seq=x+1,ACK=z+1
HTTPS
由HTTP加上TLS/SSL协议构建的可进行行加密传输,身份认证的网络协议,主要通过数字证书,加密算法,非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。
SSL证书是数字证书的一种,因为配置在服务器上也称为服务器SSL证书。是遵守SSL协议,由受信任的数字证书颁发机构CA(如景安)在验证服务器身份后颁发的一种数字证书。
用户通过http协议访问网站时,浏览器和服务器之间时明文传输的。服务器安装SSL证书后,使用Https加密协议访问网站,可激活客户端浏览器到网站服务器之间的”SSL加密信道“(SSL协议)。下面是通讯步骤:
1.客户端发报文:Client Hello
2.服务器回报文:Server Hello
3.客户端发公钥:公钥(我们后面就用对称加密,这是密钥和算法)
4.服务器端私钥:改成对称加密(好的)
5.客户端对称密钥:对称加密后的密文(请求信息)
6.服务端对称密钥:对称加密后的密文(相应内容)
在第3步时,客户端说:(我们后面就用对称加密,这是密钥和算法)这段话用公钥加密,然后传给服务器。服务器收到信息后,服务器用私钥解密,提取出对称加密算法和对称密钥,但是会遇到的一系列问题:

  • 客户端如何获得公钥?
  • 如何确认服务器是真实的不是黑客假冒的?
    怎么获取公钥?公钥到底是谁的就成了关键问题。接下来进行如下操作:
  • 客户端发送Clinet Hello,包含如下信息:

SSL/TSL version:1.2(协议版本)
Cipher Suites:(支持加密解密算法族)
Random:(客户端生成的随机数random_client)
Session ID:(如果之前已经建立过https链接并且服务器返回又SID,则发送时会有值)
Extensions:(扩展数据,例如:Server Name :www.google.com etc)

  • 服务端相应的Server Hello

Random:服务端生产的随机数random_Server
Session ID:服务端对SID又三种情况:
1.恢复session ID:我们之前在client hello里已将提到,如果client hello里面的session ID在服务端有缓存,服务端会尝试恢复这个session;
2.新session ID:这里又分两种情况,第一种是client hello里面的session ID 是空值,此时服务端会给客户端一个新的session ID,第二种情况是client hello里面的session ID此服务器并没有找到对应的缓存,此时也会回一个新的session ID给客户端。
3.NULL:服务端不希望此session被恢复,因此session ID为空。
Cipher Suite:(在client hello里面,客户端给出了多种加密族Cipher,而在客户端所提供的加密族中,服务端挑选了“TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256”)
1.TLS为协议,RSA为密钥交换算法;
2.AES_256_CBC是对称加密算法(其中256是密钥长度,CBC是分组方式)
3.SHA是哈希的算法。这就意味着服务端会使用ECDHE-RSA算法进行密钥交换,通过AES_128_GCM对称加密算法来加密数据,利用SHA256哈希算法来确保数据完整性。
Server Certificate:服务端证书。
Server Key Exchange:Server返回给Client用于生成key(对称加密密钥)的信息。
Certificate Request:要求Client发送证书。
ServerHelloDone:表示Server已经结束Hello过程。

  • 客户端验证证书真伪性如需则发送客户端证书

Client Certificate:(客户端证书)
Client Key Exchange:(client提交给Server自己用于生成key(对称加密密钥)的信息)

  • 对称加密密钥交换

1.首先,客户端利用CA数字证书实现身份认证,利用非对称加密协商对称密钥。
2.客户端会向服务器传输一个“pubkey_client”随机数,服务器收到之后,利用特定算法生成另外一个“pubkey_client”随机数,服务器收到后,利用特定算法生成另一个“pubkey_server”随机数,客户端利用这两个“pubkey”随机数生成一个pre-master随机数。
3.客户端利用自己在client hello里面传输的随机数random_C,以及收到的server hello里面的随机数random_S,外键pre-master随机数,利用对称密钥生成算法生成对称密钥enc_key:enc_key=Fuc(random_C,random_S,Pre-Master)

  • 客户端通知服务端发送加密数据和结束握手

ChangeCIpherSpec:客户端通知服务端发送加密数据
Client Finished:结束握手

  • 服务端通知客户端发送加密数据和结束握手

ChangeCIpherSpec:服务端通知客户端发送加密数据
Client Finished:结束握手

  • 利用对称密钥加解密传输数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值