首先知道http
和https
有什么区别?
http
使用端口80,https
使用端口443http
运行在TCP
协议上,所传输的内容那个都是明文,https
运行在SSL/TLS
上,SSl/TLS
是运行在TCP
上,所传输的内容是经过加密的https
需要在CA(数字证书认证机构) 购买证书http
+ 加密 + 认证 + 完整性保护 =https
- HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
- 在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 工作在传输层
https建立的过程
1.客户端请求 HTTPS 网址,然后连接到 server 的 443 端口 (HTTPS 默认端口,类似于 HTTP 的80端口)。
2.采用 HTTPS 协议的服务器必须要有一套数字 CA (Certification Authority)证书,证书是需要申请的,并由专门的数字证书认证机构(CA)通过非常严格的审核之后颁发的电子证书 (当然了是要钱的,安全级别越高价格越贵)。颁发证书的同时会产生一个私钥和公钥。私钥由服务端自己保存,不可泄漏。公钥则是附带在证书的信息中,可以公开的。证书本身也附带一个证书电子签名,这个签名用来验证证书的完整性和真实性,可以防止证书被篡改。
3.服务器响应客户端请求,将证书传递给客户端,证书包含公钥和大量其他信息,比如证书颁发机构信息,公司信息和证书有效期等。Chrome 浏览器点击地址栏的锁标志再点击证书就可以看到证书详细信息。
4.客户端解析证书并对其进行验证。如果证书不是可信机构颁布,或者证书中的域名与实际域名不一致,或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。就像下面这样:
5.客户端把加密后的随机码 KEY 发送给服务器,作为后面对称加密的密钥。
6.服务器在收到随机码 KEY 之后会使用私钥B将其解密。经过以上这些步骤,客户端和服务器终于建立了安全连接,完美解决了对称加密的密钥泄露问题,接下来就可以用对称加密愉快地进行通信了。
7.服务器使用密钥 (随机码 KEY)对数据进行对称加密并发送给客户端,客户端使用相同的密钥 (随机码 KEY)解密数据。
8.双方使用对称加密愉快地传输所有数据
该过程既使用了 对称加密也使用了非对称加密。在交换密钥期间都是使用非对称加密,建立之后使用对称加密。
- 对称加密:加密和解密都使用同一把密钥
- 非对称加密:一把叫作私有密钥,另一把叫作公开密钥,通过公钥加密的数据只能用私钥进行解密
由于https
会消耗大量资源,网络负载会变慢,所以只有包含个人信息等敏感信息才会使用https
进行通信。
CA机构解决了一个什么问题?
【信任链条问题】
- 对称加密算法:双方需要事先知道加密解密的规则
- 非对称加密算法:主要包括公钥和密钥,公钥加密,私钥解密,公钥不能被公钥解密(私钥加密,公钥解密)
【加密过程】:客户端申请请求,服务器发送公钥给客户端,客户端拿到公钥去给自己要传输的数据加密,讲加密后的数据传送到服务器,服务器用自己的密钥解密。
【可能出现的问题】:中间的不法分子,可以截取服务器发送给你的公钥,然后,伪造一个他自己的公钥传输给你,此时,你用假公钥封装了数据,传输后,他就可以用自己的密钥解开你的数据。这样你的数据就泄露了。
【CA机构解决】:其实就是用自己的私钥对服务器的公钥再次加密,生成新的ca机构的公钥,也就是证书,然后,将ca机构自己的公钥,直接内嵌到操作系统中
二次加密+CA公钥嵌入操作系统
ca机构用自己的私钥对数据进行了二次加密
客户端从操作系统获取到CA证书中的公钥,然后进行解密 - 数字证书签发过程
- 网站生成密钥对,将私钥自己保存,公钥和网站域名等信息提交给CA
- CA把证书签发机构(自己)、证书有效期、网站的公钥、网站域名等信息以明文形式写入到一个文本文件
- CA选择一个指纹算法(一般为hash算法)计算文本文件的内容得到指纹(也可理解成证书编号),用CA的私钥对指纹和指纹算法(生成指纹或者证书编号的方法)进行加密得到数字签名,签名算法包含在证书的明文部分
- CA把明文证书、指纹、指纹算法、数字签名等信息打包在一起得到证书下发给服务器
- 此时服务器拥有了权威CA颁发的数字证书以及自己的私钥
- 证书验证过程
- 浏览器以HTTPS协议请求服务器的443端口
- 服务器下发自己的数字证书给浏览器
- 浏览器先校验CA、有效期、域名是否有效,如果无效,则终止连接(服务器此时不可信任)
- 如果有效,则从操作系统取出证书颁发机构的公钥,根据签名算法对数字签名解密得到证书指纹和指纹算法
- 浏览器用解密得到的指纹算法计算证书的指纹(用指纹算法重新进行计算得到一份证书指纹),与解密得到的证书指纹进行比对,如果一致,证书有效,公钥也安全拿到了
- 浏览器此时已经和真实的服务器进行通信了,中间人无法得知通信内容,因为中间人没有网站私钥
tcp和udp的区别
借鉴文章