HTTP:
表示超文本传输协议。该协议定义了如何格式化和传输消息,以及Web服务器和浏览器应采取什么操作来响应各种命令。
通信过程:
万维网服务器端有一个服务器进程,不断的监听TCP的80端口,以发现是否有浏览器发起的连接请求,一旦监听到连接建立请求后,建立TCP连接,浏览器发起请求,服务器端响应,两者的交互按照规定的格式和遵循一定的规则
特点
- 信息是明文传输
- 使用80端口
HTTPS:
HTTP+SSL/TLS 加密通信
作用:
内容加密(建立一个信息安全通道,来保证数据传输的安全)
身份认证(确认网站的真实性)
数据完整性(防止内容被第三方冒充或者篡改)
特点
- CA申请证书(用于服务器端,验证服务器的安全性比如 阿里云的CA证书申请https://yundun.console.aliyun.com/?spm=a2c4g.11186623.2.11.26a74d90fl3reU&p=cas&accounttraceid=511feb51442142e2b77b0ed530f40da0xwat#/overview/cn-hangzhou)
- 使用433端口
图片来自:详解https是如何确保安全的http://www.wxtlife.com/2016/03/27/%E8%AF%A6%E8%A7%A3https%E6%98%AF%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%E5%AE%89%E5%85%A8%E7%9A%84%EF%BC%9F/
SSL在握手完全阶段依赖数字证书(非对称加密算法)建立安全会话(对应下的123过程)
在传输阶段使用对称加密算法(密钥只有一个)对报文加密(对应下述的4过程)
实际的HTTPS通信过程:
为了防止出现中间人伪造服务器发送的公钥,采用第三方CA认证保证服务器公钥的合法性。
(1)传输服务器的公钥(CA认证证书,保证公钥合法性)给客户端
(2)客户端使用服务器端的公钥加密报文(可能包含相应的密码信息,下面为随机数3),发送给服务器端
(3)客户端和服务器端从而建立起一套对称密钥
(4)后续使用这套对称密钥传输数据
- 蓝色的部分,可以看出来,这是tcp链接。所以https的加密层也是在tcp之上的。
- 客户端首先发起clientHello消息。包含一个客户端随机生成的random1 数字,客户端支持的加密算法,以及SSL信息。
- 服务器收到客户端的clientHello消息以后,取出客户端法发来的random1数字,并且取出客户端发来的支持的加密算法, 然后选出一个加密算法,并生成一个随机数random2,发送给客户端serverhello
- 让客户端对服务器进行身份校验,服务端通过将自己的公钥通过数字证书的方式发送给客户端
- 客户端收到服务端传来的证书后,先从 CA 验证该证书的合法性,验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,再用服务端公钥非对称加密 Random3 生成 PreMaster Key。并将PreMaster Key发送到服务端,服务端通过私钥将PreMaster Key解密获取到Random3,此时客户端和服务器都持有三个随机数Random1 Random2 Random3,双方在通过这三个随即书生成一个对称加密的密钥.双方根据这三个随即数经过相同的算法生成一个密钥,而以后应用层传输的数据都使用这套密钥进行加密.
- Change Cipher Spec:告诉客户端以后的通讯都使用这一套密钥来进行.
区分非对称加密、对称加密及数字签名
非对称加密:
公钥加密,加密方和解密方使用不同的密码
‘
公钥对外公开,私钥保密(无私钥解不开)
数字签名:
3点:报文鉴别、报文完整性(有私钥才能加密发送)、不可否认
上述的密文可以被公开的公钥解析出明文,但是不能篡改
如下为具有保密性的数字签名:(以上的非对称加密和数字签名的结合)
对称加密:
加密和解密方使用同一套密码’
事先约定(需要高度安全的密钥分配中心增加成本)、或者信使传递(大型计算机网络中明显不合适)
注意的:
websocket:
创建需要在客户端和服务之间双向通信(例如,即时消息和游戏应用)的web应用
建立在TCP协议之上:基于TCP的一种应用层网络协议
- 持久连接
- 使用8080端口
一张很好的图比较两者的区别:
参考:阮一峰的网络日志https://www.ruanyifeng.com/blog/2017/05/websocket.html
websoket服务器框架:Netty, Undertow, Jetty, Spray-websocket, Vert.x, Grizzly 和 Node.js 七种框架
MQTT和websoket区别
MQTT:基于TCP的Pub/Sub协议,为物联网优化的特性:适应不同网络的QoS、层级主题、遗言等
比如利用HTML5应用来作为MQTT的客户端,也即是采用MQTT over WebSocket
Socket:
socket是一套完成TCP,UDP协议的接口,对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),IP地址和端口号构成套接字
SOCKS:
主要用于客户端与外网服务器之间通讯的中间传递
SOCKS是会话层的协议,位于表示层与传输层(TCP/UDP)之间。
有SOCKS代理服务器
参考资料:
【1】使用四种框架分别实现百万websocket常连接的服务器https://colobu.com/2015/05/22/implement-C1000K-servers-by-spray-netty-undertow-and-node-js/
【2】https://www.zhihu.com/question/21816631
【3】https://www.ruanyifeng.com/blog/2017/05/websocket.html
【4】计算机网络