0x00HTTP的悲剧明文传输数据,容易嗅探数据完整性不验证,容易篡改不验证网站身份,容易被仿冒HTTPS由此诞生。0x01什么是HTTPSHTTP+SSL/TLSTLS是SSL的升级版两张图值一千字:功能:防嗅探,防篡改,身份认证0x02https握手过程建立https连接(明文),然后使用对称加密传输数据。TCP三次握手C->S:[clienthello]C向S发送hello消息(协议版本、随机数c、加密组件列表等),请求建立SSL会话。S->C:[serverhello]返回响应(确认加密组件、随机数s等)。S->C:[certificate]返回响应证书(网站证书)。S->C:[serverkeyexchange]指定密钥协商(交换)协议(keyagreementmethod),将密钥协商(交换)算法的公钥发送给C。S->C:[serverhellodone]发送服务器hellodone开始C的密钥协商。C->S:[clientkeyexchange]C生成密钥协商(交换)算法的公钥和私钥,并将公钥发送给S。此时C和S可以协商相同的密钥premastersecret。现在C和S可以通过c,s,pre掌握三个随机数来计算对称加密的密钥。(这里我也看到了一个版本,C生成一个premastersecret,然后用keyexchange/negotiationalgorithm加密后发给S,我觉得没必要发,S发的是用自己发来的key协商出来的publickeyC和一个自己生成的随机密钥,这个数xs可以自己算出premastersecret,还有一个版本的对称加密密钥是C用S的证书公钥加密,用S的私钥解密,这里我觉得c,s也可以得到这个对称密钥S,premaster自己生成,不需要C发送)C->S:[changecipherspec]通知S这个消息,C会在一种加密的方式。C->S:C用生成的对称密钥加密所有之前的握手消息哈希,并将它们发送给S解密和验证哈希。S->C:[changecipherspec]将此消息通知C后,S以加密方式发送数据。S->C:S用对称密钥加密所有之前的握手消息哈希,并将它们发送给C进行解密和验证哈希。开始对称加密数据传输...(ApplicationData)0x03抓包分析https握手过程以浏览器打开https://www.52pojie.cn为例1.dns分析和tcp三次握手2.clienthello:可以看到浏览器将支持的协议版本TLS1.2、32字节随机数c、加密分量cipher等信息发送给了S。3.serverhello:可以看出S选择了TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384加密分量,解释为如下:密钥交换算法用于确定如何对客户端和服务器之间的握手进行认证。使用的算法有RSA、Diffie-Hellman、ECDH、PSK等,这里选择ECDHE。加密算法,用于对消息流进行加密,通常后跟两个数字,表示密钥长度和初始向量长度,如DES56/56、RC256/128、RC4128/128、AES128/128,AES256/256。此处选择AES。MessageAuthenticationMessageCode(MAC)算法,用于创建消息摘要,保证消息的完整性(不被篡改),算法包括MD5、SHA等,这里选择SHA384。PRF(Pseudo-RandomFunction),用于生成“mastersecret”。S还发送一个32字节的随机数s。4.证书:第一个cert是52pojie网站的证书,第二个cert是发行方trustasia的证书。这里可以得到证书的详细信息5.serverkeyexchange和serverhellodone:可以看出使用ECDH密钥交换算法,指定椭圆曲线secp256r1,将DH算法协商好的公钥发送给C。6.Clientkeyexchange和clientchangecipherspec:这里C将DH算法协商好的公钥发送给S,并将握手报文加密给S验证。7.serverchangecipherspec:服务器使用Ticket来存储会话状态,在ServerChangeCipherSpec之前需要发送NewSessionTicket消息,这部分不再赘述。这里S将握手报文加密后发给C验证。8、应用数据:这里可以看到,双方握手完成后,所有后续消息都会对称加密,再也看不到明文了。0x04其他由于握手过程,https比http慢。我觉得它带来的安全感更重要。虽然速度较慢,但??用户几乎感觉不到,并且有很多优化措施来提高速度。https的可用性并不能完全保证网站的安全性。安全是多因素、多环节的。即使有https,也能成为一个网站的“短板”,而https本身也不安全,比如著名的Heartbleed漏洞。HTTPS并不能绝对防止MITM,比如伪造证书,导出明文密码等。0x05结论总之,能用https就用https。
