在开发中我们经常使用到 http 协议和 https 协议,那他们之间有什么区别呢?
他们的基本概念是什么呢?我们今天来学习一下。
详细解析 HTTP 与 HTTPS 的区别
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。为了解决 HTTP 协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议 HTTPS,为了数据传输的安全,HTTPS 在HTTP的基础上加入了 SSL 协议,SSL 依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTP和HTTPS的基本概念
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW 服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP下 加入SSL层,HTTPS 的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS 协议的主要作用可以分为两种:
- 建立一个信息安全通道,来保证数据传输的安全。
- 确认网站的真实性。
HTTP与HTTPS有什么区别
- https 协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
- http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http 的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
数据传输安全的意思?
- 客户端和服务器之间的通信只能又自己看得懂,第三方拿到数据也看不懂这些信息的真实含义。
- 第三方虽然看不懂,但是可以对数据篡改,因此客户端和服务端必须有能力判断数据是否被修改过。
- 客户端必须避免中间人攻击,即除了真正的服务器,任何第三方都无法冒充服务器。
怎么加密信息?
使用对称秘钥和非对称秘钥进行加密,对称秘钥是加密和解密都用相同的秘钥进行。非对称秘钥有两个秘钥,一个公钥和一个私钥。公钥加密的内容只有通过私钥才能解密,私钥加密的内容只有通过公钥进行解密。使用对称加密一般比非对称加密快得多,对服务器的运算压力也小。
对称秘钥怎么传输?
服务器明文传输对称秘钥是不安去的,如果监听者拿到对称秘钥,以后的通信内容就被破解了。所以不能明文传输对称秘钥,而且不能用一个新的对称秘钥来加密原来的对称秘钥,否则新的对称秘钥同样无法传输,就是鸡生蛋,蛋生鸡的驳论。
这里我们采用非对称加密的方式,非对称加密的特性决定了服务器用私钥加密的内容并不是真正的加密,因为公钥所有人都有,所以服务器的密文能被所有人解析,但是私钥只掌握在服务器手上,这就带来了两个好的优势:
- 服务器下发的内容不能被伪造,因为别人都没有私钥,只有服务器有,所以无法加密。强行加密的后果是客户端使用公钥都无法完成解密。
- 任何人用公钥加密的内容都是绝对安全的,因为私钥只有服务端有,也就是只有真正的服务器可以看到加密的原文
所以传输对称秘钥的问题就迎刃而解了:秘钥不是由服务器下发的,而是由客户端生成并主动高数服务器。所以当引入非对称加密后,HTTPS的握手流程依然是两部,不过细节略有变化:
客户端:你好,我要发起一个HTTPS的请求,这是我的秘钥(用公钥加密后的)
服务端:好的,我知道你的秘钥了,后续就用它来传输。
公钥怎么传输?
对公钥进行加密,每一个HTTPS服务器都必须去专门的证书机构注册一个证书,证书中存储了用权威机构私钥加密的公钥。这样客户端用权威机构的公钥解密就可以了。
现在HTTPS协议握手阶段变成四步:
- 客户端:你好,我要发起一个HTTPS请求,请给我公钥
- 服务器:好的,这是我的证书,里面有加密后的公钥
- 客户端:解密成功以后告诉服务器,这是我的对称秘钥
- 服务器:好的,我知道了你的秘钥了,后续就用它来传输吧。
那么权威机构的公钥怎么传输呢?
这个公钥不用传输,会直接内置在各大操作系统或者浏览器的出厂设置里。之所以不把每个服务器的公钥内置在电脑里,一方面服务器太多,存不过来。另一方面操作系统也不信任你,凭什么你说你这个就是百度的证书呢。所以各个公司先去权威机构认证,申请证书,然后操作系统只会存储权威机构的公钥。因为权威机构数量有限,所以操作系统厂商相对来说容易管理。如果这个权威机构不够权威,胡乱发证书,就会取消他的资格,比如可怜的沃通。
怎么知道证书没有被篡改?
将信息哈希值随着信息一起传递。为了保证证书没有篡改,我们可以在传递证书的同时传递的哈希值。由于第三者无法解析数据,只能胡乱改,那么修改后的数据在解密后,就不能通过哈希。