http和https的区别
在理解https相关同时需要了解2个ssl/tls和ca是什么
ssl中文叫做“安全套接层”原先互联网上使用的 HTTP 协议是明文的,存在很多缺点——比如传输内容会被偷窥(嗅探)和篡改。ssl 协议就是为了解决这些问题
ssl标准化之后的名称改为 TLS 中文叫做“传输层安全协议”
ca证书就是也拥有一个证书(内含公钥)和私钥 利用公钥生成一个私钥传输 进行双方加解密(详情可查看《加解密》文章)
http封装的信息是明文的,通过抓包工具可以分析其信息内容,如果其信息系包含密码等敏感数据 就需要用到https
htts的端口是443 http的端口是80
http是普通超文本协议,无状态的 而https就是安全超文本传输协议,需要证书和提供安全连接。
http信息是明文传送,https是嵌套了SSL加密的http连接,其内容会由SSL先加密,然后再传送
在http(应用层)和tcp(传输层)之间插入一个ssl/协议就是https,工作流程基本分为三个阶段:
1、认证服务器。浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。
2、协商会话密钥。客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。
3、加密通讯。此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性。
(
client 发出请求
server 收到请求,并自己生成一对密钥,即 公钥S 和 私钥S
server 把生成的 公钥S 传递给 client (除了 公钥S ,还有很多额外信息)
client 收到 公钥S 后进行判断,若无效,弹出警告,否则生成一串随机数,我们称之为 私钥C ,然后 client 用 server 传
过来的 公钥S 对该随机数加密,形成【私钥C】
client 把【私钥C】传递给 server
server 收到【私钥C】,用 私钥S 把【私钥C】解密成 私钥C,然后把需要传递的数据用 私钥C 进行加密
server 把【数据】传递给 client
client 收到【数据】,用 私钥C 解密,完成一波收割
)
总结:
https简单讲是http的安全版。即http下加入ssl层,HTTPS的安全基础是SSL,因此加密的详细内容就需要ssl,SSL依靠ca证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
事实上Https就是Http跑在SSl或者TLS上,所以本文讨论的原理和流程其实是SSL和TLS的流程,对于其它使用SSL或者TLS的应用层协议,本文内容一样有效。
客户端验证服务端,服务端也可以给客户端颁发证书并验证客户端,做双向验证,但应用没有那么广泛,原理类似。
由于采用了加密通讯,Https无疑要比Http更耗费服务器资源,这也是很多公司明明支持Https却默认提供Http的原因。