一、什么是HTTPS
全称hyper text transmission protocol secursocketlayer,其实就是HTTP加上SSL,但是自从SSL3.0以后就更名TLS了,所以抓到的报文基本上都是TLS的报文,目前使用最广泛的是TLS1.2,最新的版本是TLS1.3。
二、PKI体系
如A要给B发送消息
1、A先将原始数据利用hash加密为信息摘要,再利用A非对称加密的私钥将其加密为数字签名;
2、数字签名;原始信息;数字证书(含有A的公钥)三者打包并用对称加密的密钥将其加密为加密信息;
3、对称加密的密钥使用B的公钥加密为密钥信封;
4、将加密信息和密钥信封传给B;
5、B使用B非对称加密的私钥将密钥信封解密获得对称加密的公钥;
6、B利用对称加密的公钥解开加密信息获得数字签名;原始信息;数字证书
7、B从数字证书中获得A非对称加密的公钥,将数字签名解密为信息摘要;
8、B利用hash将原始信息也加密成信息摘要,观察两个是否相等以判定信息是否被修改。
三、DH密钥交换
1、A,B双方要交换密钥
2、A选择一个极大素数base交给B,B选择base的原根m;
3、A任意选择一个数x,B任意选择一个数y;
4、A计算(base的x次方)mod m交给B;
5、B计算(base的y次方)mod m交给A;
6、A计算 {[(base的y次方)mod m]的x次方}mod m=(base的yx次方)mod m;
7、B计算 {[(base的x次方)mod m]的y次方}mod m=(base的xy次方)mod m;
8、利用(base的yx次方)mod m作为以后使用的密钥。
四、RSA加密
1、A选择两个极大素数p,q;
2、A计算n=pq;
3、A计算n的欧拉函数=(p的欧拉函数)*(q的欧拉函数)=(p-1)(q-1);
4、A选择一个与(n的欧拉函数)互质并且小于(n的欧拉函数)的数e;
5、A计算出e对于(n的欧拉函数)的模反元素d;
6、自此(e,n)为公钥,(d,n)为私钥;
7、设有明文M,则加密为 (M的e次方)mod n=C 其中C为加密后的密文;
8、解密为:(C的d次方)mod n=M;
(设有两个极大素数p,q
n = p * q
φn = φp*φq = (p-1)*(q-1)
设e<φn 且e与φn互质
设φn%(d*e-1)==0(即d为φn和e的模反元素)
(d,n)为私钥,(e,n为公钥)
)
五、HTTPS的流程
1、clien用c代替,sever用s代替;
2、c与s建立三次握手;
3、c发送client hello报文,里面含有加密套件,tls版本号,随机数a和压缩方法;
4、s发送sever hello报文,里面含有加密套件,tls版本号,另一个随机数b和压缩方法和会话ID;
5、s发送certificate证明自己是可信任的,发送key exchange交换pubkey,发送hello down;
6、c验证s的certificate后,判断其是可信任的,发送key exchange交换pubkey,如果certificate中有密钥的话,则用密钥加密;
7、c发送change cipher spec改变密钥规范;
8、c发送encrypted handshake message表示一切就绪,可以进行加密通信;
9、s发送change cipher spec改变密钥规范;
10、s发送encrypted handshake message表示一切就绪,可以进行加密通信。
PS:如果是dh密钥交换,个人认为client hello中的随机数a是base,sever hello中的随机数b是mod,两个pubkey则是c和s各自想一个其他数后与a,b进行模幂运算后的值,假设c随机想的数是e,s随机想的数是f,则最后的密钥则应该是(a的ef次方)mod b,不知道对不对,求指正。