Https原理详解

Http 超文本传输协议
Https 安全套接字超文本传输协议

Https用到了ssl加密技术,了解ssl需要先了解加密相关的知识。
有关知识为什么是对称加密,什么是非对称加密?什么是数字摘要?什么是数字签名?

1.对称加密和非对称加密

1、对称加密(也叫私钥加密),是指加密和解密使用相同的密钥的加密算法。有时又叫传统加密算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥或者单密钥算法,常见的对称加密有DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、RC4、IDEA。
2、非对称加密,是指和甲酸算法不同,非对称加密算法有两个密钥:公开密钥(public key)和私有密钥(private key);并且加密密钥和解密密钥是成对出现的。非对称加密算法在加密和解密过程使用了不同的密钥,非对称加密也称公钥加密,在密钥对中,其中一个密钥是对外公开的,所有都可以获取到,称为公钥,其中一个密钥是不公开的称为私钥。非对称加密算法对加密内容的长度有限制,不能超过公钥长度。常见的非对称加密RSA、DSA/DSS等。

2.数字摘要

数字摘要是采用单项Hash函数将需要加密的明文"摘要"成一串固定长度(128位)的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文摘要必定一定。“数字摘要”是https能确保数据完整性和防篡改的根本原因。常用的摘要主要有MD5、SHA1、SHA256等。

3.数字签名

数字签名技术就是对"非对称密钥加解密"和"数字摘要"两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接受者。接受者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原因产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输的过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
数字签名的过程:

明文——>hash运算——>摘要——>私钥加密——>数字签名

数字签名的两种功效:

1、能确定消息确实由发送方签名并发出来的,因为别人假冒不了发送方的签名。
2、数字签名能确定消息的完整性。

注意:
数字签名只能验证数据的完整性,数据本身是否加密不属于数字签名的控制范围

4、数字证书
对于请求方来说,它怎么能确定它所得到的公钥一定是从目标主机哪里发送的,
而且没有被篡改过呢?亦或者请求的目标主机本身就是从事窃取用户信息的不正当行为呢?这时候,我们需要一个权威的值得信赖的第三方机构(一般是由政府机构审核并授权的机构)来统一对外发送主机机构的公钥,只要请求方这种机构获取公钥,就避免了上述问题

(1)数字证书的颁发过程:
用户首先产生自己的密钥对,并将公共密钥及部分个人身份信息传送给认证中心。认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来,然后,认证中心将发送给用户一个数字证书,该证书内包含用户的人信息和他的公钥信息,同时还附有认证中心的签名信息(根证书私钥)签名。用户就可以使用自己的数字证书进行相关的各种活动。数字证书由独立的证书发行机构发布,数字证书各不相同,每种证书可提供不同级别的可信度。
(2)证书包含哪些内容

1、证书颁发机构的名称
2、证书本身的数字签名
3、证书持有者的公钥
4、证书签名用到的Hash算法

(3)验证证书的有效性
浏览器默认都是会内置CA跟证书,其中根证书包含了CA的公钥

防伪造证书1:如果证书颁发机构是伪造的,浏览器不认识,直接认为是危险证书
防伪造证书2:证书颁发机构是的确存在的,于是根据CA名,找到对应内置的CA根证书、CA的公钥。用CA的公钥,对伪造的证书的摘要进行解密,发现解密不了,认为是危险证书
防篡改:对于篡改的证书,使用CA的公钥对数字签名进行解密得到摘要A,然后再根据签名的Hash算法计算出证书的摘要B,对比A与B,若相等则正常,若不相等则是被篡改过的。
防过期失效验证:正式课在其过期前辈吊销,通常情况是该证书的私钥已经失密。较新的浏览器如果Chrome、Firefox、Opera和Internet Explored 都实现了在线证书的状态协议(OCSP)以排除这种情况:浏览器将网站提供的证书序列号通过OCSP发送给证书颁发机构,后者会告诉浏览器证书是否还是有效的。

4.Https传输的过程
HTTPS在传输的过程中会涉及到三个密钥:

服务器端的公钥和私钥,用来进行非对称加密

客户端生成的随机密钥,用来进行对称加密

一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。
1.客户端向服务器发起HTTPS请求,连接到服务器的443端口

2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。

3.服务器将自己的公钥发送给客户端。

4.客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

7.然后服务器将加密后的密文发送给客户端。

8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

总体再梳理一下:
1.首先用户生成自己的密钥对:用户公钥和用户私钥,然后整理个人信息发送到“证书认证中心CA”;
2.“证书认证中心CA”有自己的密钥对:CA公钥和CA私钥,认证中心使用CA私钥加密用户公钥及个人信息生成“CA证书”;
CA证书包括:

1、证书颁发机构的名称
2、证书本身的数字签名
3、证书持有者的公钥
4、证书签名用到的Hash算法
其中“证书本身的数字签名”是由“用户公钥的内容”经过Hash算法生成的数字摘要用“CA私钥”加密的数据
即:证书本身的数字签名=“用户公钥的内容”+“Hash算法”+“CA私钥”

3.客户端client默认都是会内置CA跟证书,其中根证书包含了“CA公钥”;
4.客户端client向服务器server发送https请求
5.服务器server将"CA证书"发送给客户端client
5.客户端client收到“CA证书”,先查找本地内置CA证书是否包含该证书,如果不包含,证明该CA证书不是权威证书颁发机构发布的证书,是不被信任的,https连接断开;如果包含,则使用本地根证书的“CA公钥”对“证书本身的数字签名”进行解密,会得到由“用户公钥的内容”经过Hash算法生成的数字摘要,这是的数字摘要先把它叫做hash1,然后使用CA证书中的“用户公钥”并通过相同的hash算法,再生成一个数字摘要叫hash2,如果hash1=hash2,则证明数据未被篡改。这时候客户端生成一个随机数产生一个对称加密的私钥秘钥,使用“用户公钥”进行加密。
6.客户端client将使用“用户公钥”进行加密的“私钥秘钥”发送给服务器server
7.服务器server收到并使用“用户私钥”解密得到“私钥秘钥”
8.服务器使用“私钥秘钥”加密数据通过对称加密进行数据通信

整个过程用的秘钥:

1.CA认证机构的:CA公钥:CA私钥
2.用户生成的非对称加密 密钥对:用户公钥:用户私钥
3.clien客户端生成的对称加密 秘钥:私钥密钥
ps:CA证书中只包含“用户公钥”

参考链接:
OKHttp源码解析(二):“前戏”——HTTP的那些事
HTTPS系列干货(一):HTTPS 原理详解
HTTPS理论基础及其在Android中的最佳实践

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值