http、https、三次握手
Q:为什么要进行三次握手,一次行不行,两次行不行?
A:只有经过三次握手,通信双方(客户端和服务器)才能确认自己和对方具有接收信息和发送信息的能力。
归纳起来需要满足一下条件:
- 客户端确认自己具备收发能力
- 客户端确认服务器具备收发能力
- 服务器确认自己具备收发能力
- 服务器确认客户端具备收发能力
几个关键点: - 第一次握手: 服务器确认客户端具备发送信息的能力,服务器确认自己具备接收信息的能力
- 第二次握手:客户端确认服务器具备发送信息的能力,客户端确认服务器具备接收信息的能力,客户端确认自己具备接收信息的能力,客户端确认自己具备发送信息的能力
- 第三次握手:服务器确认客户端具备接收信息的能力,服务器确认自己具备发送信息的能力
参考资料:https://www.jianshu.com/p/27862635c077
image.png
Q:为什么要进行四次挥手,为什么是四次?
image.pngimage.png
HTTPS确切的的说不是一种协议,而是HTTP + SSL (TSL)的结合体。HTTP报文经过SSL层加密后交付给TCP层进行传输。SSL(安全套接层)主要采取的是RSA(非对称加密)与AES(对称加密)结合的加密方式。先通过RSA交换AES的密钥,然后通过AES进行报文加密和解密
https://www.cnblogs.com/ludashi/p/6237715.html
image.png至此第一部分关于HTTPS的原理介绍已经结束了,总结一下:
HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
https://www.jianshu.com/p/67bcb140d804总结
https在通信时使用的是对称秘钥,也就是客户端和服务器使用的秘钥是相同的,但是客户端怎么才能把秘钥给服务器呢?万一在传输的时候被三方窃取了呢?所以引入了非对称秘钥,非对称秘钥的作用就是用来安全的传输对称秘钥的,那么非对称秘钥怎么把自己的公钥给客户端呢?万一出现攻击者拦截公钥,然后用自己的伪公钥给客户端呢?所以出现了数字证书(向CA申请),服务器把数字证书交给客户端时,客户端可以验证数字证书的合法性,防止中途公钥被篡改。
okhttp是支持访问https的,前提是数字证书是向合法机构购买的,如果是自己生成的自签名证书,okhttp是没法访问的。
参考:https://blog.csdn.net/lmj623565791/article/details/48129405
https的握手参考:
https://www.cnblogs.com/franson-2016/p/5530671.html
windows 怎样查看计算机本地安装的证书:
开始运行中输入certmgr.msc
双向认证:https://www.jianshu.com/p/64172ccfb73b
https中使用的对称加密算法和密钥是客户端发送给服务器的,不能反着来,首先这里要明确对称加密算法使用的秘钥和加密算法都是保密的,而非对称加密算法使用的公钥和加解密算法是公开的,私钥是保密的,如果说是对称加密算法由服务器发送给客户端将会产生什么后果呢?所有持有公钥的客户端都可以拿到对称加密算法的秘钥;如果有客户端发送给服务器就不同了,客户端使用公钥加密后,只有私钥能解密,即使第三方劫持到也无法解密