1:简介
HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使得开发和部署是那么的直截了当。
HTTP(超文本传输协议)被用于在Web浏览器和网站服务器之间,以明文方式传递信息,不提供任何方式的数据加密,因此使用HTTP协议传输隐私信息(如:银行卡号、密码等支付信息)非常不安全。
为了解决这一安全缺陷,网景公司设计了SSL(Secure Sockets Layer)协议,在HTTP的基础上加入了SSL(Secure Sockets Layer)协议,SSL依靠SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。从而诞生了HTTPS(安全套接字层超文本传输协议)。
简单来说,**HTTPS协议=”SSL/TSL+HTTP协议”**构建的可进行加密传输、身份认证的网络协议,是HTTP的安全版。
2:SSL/TSL
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
2-1:相关概念
- 密码学(cryptography):目的是通过将信息编码使其不可读,从而达到安全性。
- 明文(plain text):发送人、接受人和任何访问消息的人都能理解的消息。
- 密文(cipher text):明文消息经过某种编码后,得到密文消息。
- 加密(encryption):将明文消息变成密文消息。
- 解密(decryption):将密文消息变成明文消息。
- 算法:取一个输入文本,产生一个输出文本。
- 加密算法:发送方进行加密的算法。
- 解密算法:接收方进行解密的算法。
- 密钥(key):只有发送方和接收方理解的消息
- 对称密钥加密(Symmetric Key Cryptography):加密与解密使用相同密钥。
- 非对称密钥加密(Asymmetric Key Cryptography):加密与解密使用不同密钥。
2-1-1:对称加密
在对称加密中,发送端和接收端使用相同的密钥进行通信。发送端使用共享的密钥发送报文,然后将密文发送到接收端。接收端使用相同密钥解密密文,恢复原始数据。
2-1-2:非对称密钥加密
非对称加密也称为公开密钥加密技术,就是使用不同密钥进行通信的加密技术。
非对称加密技术使用了不同的密钥进行通信,在发送端使用公钥对报文进行加密(公钥就是所用人都可以获取到的密钥),然后在接收端使用私钥对加密的密文进行解密。常见的非对称加密技术是RSA技术。
2-1-3:数字签名
数字签名是附加在报文上的特殊加密校验码。数字签名可以防止报文被篡改,如果有恶意攻击在传输过程篡改了报文,那么校验的时候校验和就不再匹配,因此可以确认报文被篡改了。
数字签名的加解密过程:
- 发送端将报文通过算法(比如通过HASH函数)提取为定长的摘要;
- 发送端将摘要应用签名算法,以私有密钥作为参数生成一个签名;
- 计算得出签名后,将签名附加在报文末端发送给接收方;
- 接收端收到报文后,对签名进行检查。接收端通过公开密钥解码签名。然后比对报文生成的摘要是否与签名一致便可判断报文是否被篡改。
2-1-4:数字证书
数字证书是由权威机构给某网站颁发的一种认可凭证。它主要包含一些认证信息,比如:对象的名称(服务器、组织、个人等)、过期时间、证书颁发者、来自证书发布者的数字签名。
3:工作流程
3-1:HTTP工作流程
客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:
服务器接到请求后,给予相应的响应信息,其格式为:
3-2:HTTPS工作流程
- TCP 三次同步握手
- 客户端验证服务器数字证书
- DH 算法协商对称加密算法的密钥、hash 算法的密钥
- SSL 安全加密隧道协商完成
- 网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
4:HTTPS原理
图片来自HTTP 与 HTTPS 的区别
步骤如下:
4-1:客户端发起HTTPS请求
输入网址,然后连接到server的443端口
4-2:服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。
这套证书其实就是一对公钥和私钥,可以这么理解,公钥就是一把锁头,私钥就是这把锁的钥匙,锁头可以给别人对某个东西进行加锁,但是加锁完毕之后,只有持有这把锁的钥匙才可以解锁看到加锁的内容。
4-3:传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
4-4:客户端解析证书
这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
4-5:传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
4-6: 服务段解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(非对称加密,服务端和客户端利用非对称加密实现了身份认证和密钥协商),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和随机值通过某种算法混合在一起,这样除非知道随机值,不然无法获取内容,而正好客户端和服务端都知道这个随机值,所以只要加密算法够彪悍,随机值够复杂,数据就够安全。
4-7:传输加密后的信息
这部分信息是服务段用随机值加密后的信息,可以在客户端被还原
4-8:客户端解密信息
客户端用之前生成的随机值解密服务段传过来的信息,于是获取了解密后的内容(对称加密,用于传输数据)。整个过程第三方即使监听到了数据,也束手无策。
这里有两个问题
- 如何保证公钥不被篡改。
将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。 - 为什么不用公钥加密?
公钥加密计算量太大,耗用时间太多。而每一次对话(session),客户端和服务器端都生成一个”对话密钥”(session key),用它来加密信息。由于”对话密钥”是对称加密,所以运算速度非常快,而服务器公钥只用于加密”对话密钥”本身,这样就减少了加密运算的消耗时间。
5:相同之处
大多情况下,HTTP和HTTPS是相同的,因为都是采用同一个基础的协议,作为HTTP或HTTPS客户端(浏览器),设立一个连接到Web服务器指定的端口。当服务器接收到请求,它会返回一个状态码以及消息,这个回应可能是请求信息、或者指示某个错误发送的错误信息。
系统使用统一资源定位器 URI 模式,因此资源可以被唯一指定。整个过程中,唯一不同的只是一个协议头(HTTPS)的说明,其他都是一样的。
6:不同之处
HTTPS和HTTP的区别主要如下:
- 连接端口:HTTP标准端口是80,而HTTPS的标准端口是443。
- 传输方式:HTTP是超文本传输协议,信息是明文传输,而HTTPS是SSL加密传输协议。
- 工作耗时:HTTP耗时=TCP握手,而HTTPS耗时=TCP握手+SSL握手。
- 显示形式:HTTP的URL以
http://
开头,而HTTPS的URL以https://
开头。 - 费用:HTTP无需费用,而HTTPS需要到CA申请证书。
- 安全性:HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。