最近HTTP协议,HTTPS协议,SSL协议,数字签名这些老是在眼前跳,但是很多都忘记了,重温了一把,总结一下
1.HTTP协议
HTTP协议是超文本传输协议,端口为80,属于应用层协议,由请求和响应构成,永远都是客户端发送请求,服务端回送响应。这样就限制了使用HTTP协议无法实现在客户端没有发起请求的时候,服务端把消息推送给客户端。
HTTP协议的动作过程:
- 浏览器打开一个tcp连接
- 浏览器发送http请求到服务器
- 服务器发送http响应到浏览器
- tcp连接关闭
http请求由三部分组成:请求行,消息报头,请求正文
http响应由三部分组成:状态行,消息报文,响应正文
常用的请求方式:GET用于获取数据,POST一般用于将数据发送给服务器,常用于提交表单。
HTTPS协议是基于安全套接字的超文本传输协议,端口为443,也是应用层协议。
HTTPS协议=HTTP协议+SSL协议。
和HTTP协议相比可以解决信任主机问题和数据安全问题。而这两点都是靠SSL协议完成的,下边会对SSL协议进行详解。在说SSL协议之前得普及一个已经普及了但是容易忘记的东西,加密。
3.对称加密和非对称加密
对称加密算法:加解密的秘钥是一样的,优点是算法公开计算量小,加密速度快,加密效率高。缺点是安全性不高,每对用户都需要唯一的秘钥,秘钥管理负担大,广泛使用的对称加密算法有:DES,IDEA,AES.
非对称加密算法:加解密秘钥不一样,公钥可以公开,私钥自己保留,优点是安全性高,可以用来做认证,和其他用户交流自己只用一套公钥和私钥,秘钥管理简单。缺点是加密花费时间长,速度慢,广泛使用的非对称加密算法有:RSA,DES。
Hash算法(摘要算法)常用在不可还原的密码存储,信息完整性校验,常用的hash算法有MD2,MD4,MD5,SHA
4.SSL协议
SSL协议可以实现加密和认证,过程大致如下所示:(可以实现客户端和服务端双向认证,但是这里只认证服务端)
- 客户端发送连接请求。
- 服务端发送自己的数字证书和公钥给客户端。
- 客户端通过数字证书验证服务端的身份,并生成一个对称加密的秘钥,并且使用服务端的公钥去加密这个对称秘钥发送给服务方。
- 服务方用自己的私钥解密,得到那个对称秘钥,并使用该秘钥去加密明文得到密文发送给客户端。
- 客户端使用对称秘钥解密该密文,并且加密其他数据发送给服务端。。。。。。
5.HTTP协议和HTTPS协议的区别
首先是端口号不一样一个是80一个是443,http://和https://的区别,HTTPS用到数字证书需要钱。。。,HTTP简单快速,HTTPS复杂但是安全,HTTP和HTTP+SSL的区别,一个传输明文且无法认证,一个传输密文并且可以认证。
6.附加赠送数字签名
这里说的是对签名内容有保密机制的数字签名。
发送方(一个加密签名内容的对称秘钥,接收方的公钥,自己的私钥):
- 使用对称秘钥对签名内容加密得到密文。
- 使用接收方的公钥加密对称秘钥,并将它附在1中得到的密文中。
- 使用hash算法得到2中密文的报文摘要,再用自己的私钥加密该摘要形成数字签名。
- 把2和3中得到的密文通过网络发送给接收方。
- 使用发送方的公钥对数字签名解密得到一个报文摘要。
- 使用相同的摘要算法,从接收到的报文密文中计算出一个报文摘要。
- 如果两个摘要一致的话说明密文没有被篡改,发送方的签名匹配。
- 使用自己的私钥解密出对称秘钥。
- 使用对称秘钥解密出签名内容。