本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1、HTTP和HTTPS协议的区别?
-
连接,安全: HTTP协议连接很简单,是无状态的;HTTPS协议是由SSL和HTTP协议构建的可进行加密传输,身份认证的网络协议,比HTTP更加安全。
-
传输: HTTP协议是超文本传输协议,信息是明文传输的;HTTPS是具有安全性SSL加密的传输协议。
-
费用: HTTPS协议需要CA证书,费用较高;HTTP协议不需要。
-
端口: HTTP端口是80,HTTPS端口是443
2、HTTPS协议是什么?
HTTPS是由HTTP协议+SSL/TLS加密来组成,HTTPS超文本传输安全协议是一种通过计算机网络进行安全通信的传输协议,主要目的是提供对网站服务器的身份认证,保护交换数据的隐私和完整性。关于HTTP协议,可查看,HTTP协议
HTTP协议采用明文传输信息,存在信息窃听,信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证,信息加密,完整性校验的功能,可以避免此类问题的发生。
1. 加密方式:
-
对称加密:一个Key负责加密和解密
- 客户端请求,服务器端发送给客户端key,现在客户端和服务器端都有key;
- 客户端使用key加密,发送给服务器端,服务器端使用key解密。
- 这就是对称加密,这种方法,单独使用是不安全的,因为在传送过程中,可以进行劫持,先劫持了key,再劫持传输的数据,使用Key解密获取数据。
-
非对称加密:一对key,比如key私钥,pubkey公钥,用一个加密后,只能用另一个解密
- 客户端请求,服务器端发送pubkey公钥给客户端,
- 客户端使用pubkey公钥加密,将加密后的数据传送给服务器端,
- 服务器端使用key私钥解密。
- 这种方法是安全的,在这过程中,如果黑客劫持,只能劫持到pubkey公钥,加密后的数据,但是劫持不到key私钥,不能解密,获取不到解密后的数据。
-
对称加密和非对称加密同时使用:HTTPS同时使用
- 客户端请求,服务器端发送pubkey公钥给客户端,
- 客户端使用pubkey公钥加密,例如加密随机码‘abc’,将加密后的数据传送给服务器端
- 服务器端使用key私钥解密,得到随机码‘abc'。现在客户端,服务器端都有‘abc’,这样就可以用‘abc’作为key进行传输。
- 客户端与服务器端都使用随机码‘abc’进行加密解密
在传输过程中,如果黑客将pubkey替换了,这样在客户端使用pubkey加密后,传送的加密数据,再被劫持就可以用黑客自己的key进行解密,这个过程叫中间人攻击。
解决方法是:通过第三方机构来申请key,pubkey
- 服务器端向第三方机构申请key,pubkey,返回给客户端证书信息;
- 客户端验证证书信息是否合法,不合法的话给用户提示等操作,合法的话进行非对称+对称加密的操作。
2、TLS/SSL的工作原理?
TLS/SSL全称安全传输层协议(Transport Layer Security),介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,所以使用HTTPS基本上不需要对HTTP页面进行太多的改造。
TLS/SSL功能主要依赖的三类基本算法:
- 散列函数hash: 验证信息的完整性
- 对称加密: 采用协商秘钥对数据加密
- 非对称加密: 实现身份认证和秘钥协商
(1)散列函数hash
常见的散列函数有MD5、SHA1、SHA256。该函数的特点是单向不可逆,对输入数据非常敏感,输出的长度固定,任何数据的修改都会改变散列函数的结果,可以用于防止信息篡改并验证数据的完整性。
特点: 在信息传输过程中,散列函数不能实现信息防篡改,由于传输是明文传输,中间人可以修改信息后重新计算信息的摘要,所以需要对传输的信息和信息摘要进行加密。
(2)对称加密
对称加密的方法是,一个Key负责加密和解密。对称加密这种方法,单独使用是不安全的,因为在传送过程中,可以进行劫持,先劫持了key,再劫持传输的数据,使用Key解密获取数据。
常见的对称加密算法有AES-CBC、DES、3DES、AES-GCM等。相同的秘钥可以用于信息的加密和解密。掌握秘钥才能获取信息,防止信息窃听,其通讯方式是一对一。
特点: 对称加密的优势就是信息传输使用一对一,需要共享相同的密码,密码的安全是保证信息安全的基础,服务器和N个客户端通信,需要维持N个密码记录且不能修改密码。
(3)非对称加密
非对称加密的方法是,一对key,比如key私钥,pubkey公钥,用一个加密后,只能用另一个解密。公钥是公开的,私钥是保密的。用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密。我们可以将公钥公布出去,任何想和我们通信的客户, 都可以使用我们提供的公钥对数据进行加密,这样我们就可以使用私钥进行解密,这样就能保证数据的安全了。但是非对称加密有一个缺点就是加密的过程很慢,因此如果每次通信都使用非对称加密的方式的话,反而会造成等待时间过长的问题。
常见的非对称加密算法有RSA、ECC、DH等。秘钥成对出现,一般称为公钥(公开)和私钥(保密)。公钥加密的信息只有私钥可以解开,私钥加密的信息只能公钥解开,因此掌握公钥的不同客户端之间不能相互解密信息,只能和服务器进行加密通信,服务器可以实现一对多的的通信,客户端也可以用来验证掌握私钥的服务器的身份。
特点: 非对称加密的特点就是信息一对多,服务器只需要维持一个私钥就可以和多个客户端进行通信,但服务器发出的信息能够被所有的客户端解密,且该算法的计算复杂,加密的速度慢。
综合上述算法特点,TLS/SSL的工作方式就是客户端使用非对称加密与对称加密结合的方式,这样就解决了两个方法各自存在的问题。
3、数字证书是什么?
使用一种 Hash 算法来对公钥和其他信息进行加密,生成一个信息摘要,然后让有公信力的认证中心(简称 CA )用它的私钥对消息摘要加密,形成签名。最后将原始的信息和签名合在一起,称为数字证书。
当接收方收到数字证书的时候,先根据原始信息使用同样的 Hash 算法生成一个摘要,然后使用公证处的公钥来对数字证书中的摘要进行解密,最后将解密的摘要和生成的摘要进行对比,就能发现得到的信息是否被更改了。
这个方法最要的是认证中心的可靠性,一般浏览器里会内置一些顶层的认证中心的证书,相当于我们自动信任了他们,只有这样才能保证数据的安全。
4、HTTPS是如何保证安全的?
- 服务器端向 第三方 机构申请key,pubkey,返回给客户端证书信息;
- 客户端 验证证书信息 是否合法,不合法的话给用户提示等操作
- 合法的话进行 非对称+对称加密 的操作。
3、HTTPS通信(握手)过程?
HTTPS握手:
-
首先由客户端向服务器端发送使用的协议的版本号、一个随机数和可以使用的加密方法。
-
服务器端收到后,确认加密的方法,也向客户端发送一个随机数和自己的数字证书。
-
客户端收到后,首先检查数字证书是否有效,如果有效,则再生成一个随机数,并使用证书中的公钥对随机数加密,然后发送给服务器端,并且还会提供一个前面所有内容的 hash 值供服务器端检验。
-
服务器端接收后,使用自己的私钥对数据解密,同时向客户端发送一个前面所有内容的 hash 值供客户端检验。
-
这个时候双方都有了三个随机数,按照之前所约定的加密方法,使用这三个随机数生成一把秘钥,以后双方通信前,就使用这个秘钥对数据进行加密后再传输。
4、HTTPS的特点?
优点:
-
使用HTTPS协议可以认证用户和服务器,确保数据发送到正确的客户端和服务器;
-
使用HTTPS协议可以进行加密传输、身份认证,通信更加安全,防止数据在传输过程中被窃取、修改,确保数据安全性;
-
HTTPS是现行架构下最安全的解决方案,虽然不是绝对的安全,但是大幅增加了中间人攻击的成本;
缺点:
-
HTTPS需要做服务器和客户端双方的加密个解密处理,耗费更多服务器资源,过程复杂;
-
HTTPS协议握手阶段比较费时,增加页面的加载时间;
-
SSL证书是收费的,功能越强大的证书费用越高;
-
HTTPS连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本;
-
SSL证书需要绑定IP,不能再同一个IP上绑定多个域名。