http和https是什么?
* 首先,我们的url分为通信协议和域名 域名很好理解,不同的域名对应的就是不同的网页地址,所以今天我们一起解析一下通信协议
![](https://img.kancloud.cn/8e/d4/8ed4c1feaa54020fcbd5cd91f0c99a8e_558x114.png)
### 1、 http
```
我们先看http,HTTP协议是一种使用明文数据传输的网络协议。无
法验证报文的完整性,不知道是否中途被串改,一直以来都是都是
最主流的网络传输协议,但是因为我们的传输是明文传输,所以
如果我们在线上填入银行卡号和密码的时候,我们因该怎么办呢?
引入https,加密协议
```
![](https://img.kancloud.cn/61/32/613243cf68cd9dc0b9215556c4ab48c0_311x227.png)
### 2、 https
```
https是在http的基础上进行了加密处理,在进行数据传入前对数据进
行加密处理,接收方进行解密,所以传入的过程中是一串看不懂的鬼
东西,
```
![](https://img.kancloud.cn/a0/0f/a00f069f07903df4b47dfe46cf5a3392_303x270.png)
* http 这个是未加密的 如部分的小型网站
![](https://img.kancloud.cn/77/57/7757606ac59b1046bbeeee93c9cd24fa_528x115.png)
* https 这个是加密的,如京东 百度 看云等
![](https://img.kancloud.cn/f4/0f/f40f8d7376966761f525d2a99345f790_354x143.png)
`http+加密+认证+完整性保护=https`
https并非应用层的一种新协议,只是http通信接口部分用ssl/tls协议代替而已。通常http直接和tcp通信,当使用ssl时则演变成先和ssl通信,再由ssl和tcp通信。
* 那什么是SSL/TLS呢
SSl是‘Secure Sockets Layer’的缩写 ,中文名叫做安全套接层(90年代中期,由网景公司设计)
* 那为什么需要发明SSL呢
因为http是明文传输的,存在着很多的缺点,比如传输的过程中容易被偷窥(嗅探)和篡改,所以SSL就是解决这个问题的1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。
注意:两者其实就是同一种协议,只不过是在不同阶段的不同称呼。
SSL协议是基于TCP/ IP的应用层的,为数据传输提供安全·
* SSL可分为两层:
SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
### 对称加密和非对称加密
对称密钥加密,又称私钥加密,
即信息的发送方和接收方用同一个密钥去加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。
非对称密钥加密,
又称公钥加密,它需要使用一对密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。
从功能角度而言非对称加密比对称加密功能强大,但加密和解密速度却比对称密钥加密慢得多。
非对称密钥通信过程
![](https://img.kancloud.cn/84/df/84dfda63430f806a8cc38bee88f84388_627x292.png)
* 什么是私钥和秘钥
* 使用私钥加密的内容,使用公钥解密,反之,使用公钥加密的内容,使用私钥解密
* 服务器生成公钥和私钥,私钥自己保存,公钥对外公开
* 客户端发送请求之前,使用公钥进行加密——由于私钥是服务器私有,即使被截获也无法解密
* 反过来,服务器发送响应之前:
* 对消息执行hash算法,生成摘要
* 对摘要使用私钥加密,生成数字签名
* 将消息和数字信息一起发送到客户端
* 客户端用公钥解密数字签名,得到摘要
* 客户端对消息执行hash算法,与摘要比对,验证消息的真伪
* 如果消息被截获,摘要被解密,由于没有私钥,也就无法生成能用公钥解密的摘要,这样就保证了消息的正确性、完整性,以及服务器的真实性。
* 该过程的漏洞在于:如何防止有人篡改公钥,也就是如何保证公钥的真实性
* 解决:通过CA(数字证书认证),将服务器公钥、用到的hash算法、CA机构信息等,通过CA的私钥加密成数字证书
* 之后服务器发送的消息,都附上数字证书
* 浏览器收到数字证书,用CA的公钥解密,拿到服务器的公钥
* 再将机构信息与本机机构列表比对,验证公钥的真实性
* 如果有人伪造公钥,甚至获得了CA的私钥,其证书中的信息、hash算法等内容也很难与真实网站完全一致。
### SSL的工作原理
SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密,但是这里有两个问题:
(1)、如何保证公钥不被篡改?
解决方法:将公钥放在数字证书中,只要证书是可信的,公钥就是可信的。
(2)、公钥加密计算量太大,如何减少耗用的时间?
解决方法:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。
因此,SSL/TLS协议的基本过程是这样的:
1. 客户端向服务器端索要并验证公钥。
2. 双方协商生成“对话密钥”。
3. 双方采用“对话密钥”进行加密通信。
爱丽丝和鲍勃实例
![](https://img.kancloud.cn/63/59/63596cc61cc4887d481edfc79753073f_760x773.png)
第一步,爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法,具体的加密方法可参考[SSL证书背后的加密算法](https://www.cnblogs.com/cioliuguilan/p/5518798.html)。
第二步,鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。
第三步,爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。
第四步,鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。
第五步,爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程
### 如何获取SSL证书
网站要实现HTTPS访问,首选你需要申请一张[SSL证书](https://www.baidu.com/s?wd=SSL%E8%AF%81%E4%B9%A6&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),然后将[SSL证书](https://www.baidu.com/s?wd=SSL%E8%AF%81%E4%B9%A6&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)部署到[服务器端](https://www.baidu.com/s?wd=%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),开启[443端口](https://www.baidu.com/s?wd=443%E7%AB%AF%E5%8F%A3&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),就可以实现HTTPS访问了。另外,如何获得[SSL证书](https://www.baidu.com/s?wd=SSL%E8%AF%81%E4%B9%A6&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)呢?可以到[CA机构](https://www.baidu.com/s?wd=CA%E6%9C%BA%E6%9E%84&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)申请付费和免费的SSL证书,目前一些机构推出了免费SSL证书,如[沃通CA](https://www.baidu.com/s?wd=%E6%B2%83%E9%80%9ACA&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)推出了3年期多域名免费SSL,可以进行免费申请。如何部署SSL证书了,在申请的时候,有相应的部署指导手册。
![](https://img.kancloud.cn/96/62/9662879822cf1a29bc24bfe28a9a99db_441x368.png)
过程:填写申请资料--生成CSR--域名验证--审核通过
## Https协议验证过程
很多人说ca证书很贵,那有没有办法可以不用付费的证书呢?答案是有的,我们可以自己和自己颁布一个证书吗,但是在浏览器上还是会提示不安全,因为浏览器的
* 关于自颁布证书的缺点
1\. 自签证书最容易被假冒和伪造,而被欺诈网站所利用。
2\. 自签证书最容易受到SSL中间人攻击。
3\. 自签证书支持不安全的SSL通信重新协商机制。
4\. 自签证书支持非常不安全的SSL V2.0协议。
5\. 自签证书没有可访问的吊销列表。
6\. 自签证书使用不安全的1024位非对称密钥对。
7\. 自签证书证书有效期太长。
公网SSL信任证书是由合法的签发机构颁发的,他具有一定的合法性与手续办理,相当于您的身份证在中国被认可一样,而您自己办理的身份证只能自己用,自己相信自己。合法的SSL证书可以淘宝Gworg获取
- git-第一天
- Git-第二天
- git-第三天
- http-基础
- HTTP构成和状态码
- 浏览器输入URL,经历的过程
- TCP/IP 详解三次握手 四次挥手
- http-DNS系统
- http与https之间的区别
- HTTPS握手和HTTP握手
- HTTP小试牛刀
- Tcp初探
- TCP报文格式
- HTML5
- HTML基础
- Mock
- css 选择器
- css 动画
- css 定位
- position/display/float/z-index第一课时
- 行内、块、脱标 三种状态下的元素如何实现、水平、垂直居中
- clientHeight/offsetHeight/scrollHeight
- js 数据类型
- 变量提升
- 堆栈关系