这个是根据查阅别人的博客,并结合自己的思想总结的,发出来是对自己的检验也希望可以帮到大家;如有错误欢迎指出
HTTP和HTTPS是计算机网络中很重要的知识点,面试的时候很容易被问他们的区别,可能每个人都会有自己理解;
HTTP是明文传输的,传输过程中容易被拦截、修改或者伪造请求;HTTPS则是在HTTP基础上进行进行了一些信息保护,相比HTTP来说更为安全。
这是一个简单的回答,但是比较笼统,如果想要找到好的工作,中间的很多细节还是需要我们去仔细研究的。
HTTP是什么:HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol)
协议,它是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
HTTP的原理:
HTTP的缺点:
HTTPS如何解决HTTP的问题:
完整
的传输到服务端,保证用户发的是什么,服务器接收的就是什么。HTTPS的原理:
区别:
SSL是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”,其出现就是为了解决HTTP传输不安全的问题;到了1999年,SSL被标准化,标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”,所以这两者其实就是同一种协议,只不过是在不同阶段的不同称呼。
SSL协议是位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持,可分为两层:
所以,SSL协议提供的服务有:
认证用户和服务器,确保数据发送到正确的客户端和服务器;
加密数据以防止数据中途被窃取;
维护数据的完整性,确保数据在传输过程中不被改变。
细心的同学可能会发现,这不还是HTTPS解决HTTP的那几个问题吗?对,还是实现加密处理、认证机制和完整性保护这三点,由此也可以看出SSL协议的重要性,这也是HTTP和HTTPS之间的主要区别。
在上面HTTPS的原理部分也提到了加密, 这里我们就来说一下加密,通常加密分为对称加密、非对称加密和混合加密。
优点:
算法公开、计算量小、加密速度快、加密效率高
缺点:
常见的对称加密算法有: DES、3DES、Blowfish、IDEA、RC4、RC5、RC6 和 AES
与对称加密算法不同,非对称加密算法需要使用两个秘钥:公开秘钥、私有秘钥;
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:
甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。
优点:安全
缺点:速度比较慢
常见的非对称加密算法有: RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)
结合对称加密和非对称加密的优缺点,混合使用两种加密算法而产生混合加密,TLS中也是使用的这种加密方式;
实现过程:
首先,使用非对称加密,用来传输对称加密的秘钥,以此可解决对称加密传输过程不安全的问题;然后用随机数产生对称算法使用的,再用公钥加密。对方拿到密文后用私钥解密,取出会话密钥。这样,双方就实现了对称密钥的安全交换。
Hash算法特别的地方在于它是一种单向算法,用户可以通过hash算法对目标信息生成一段特定长度的唯一hash值,却不能通过这个hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
可能有人会疑惑为什么要用单向的?因为双向的话也存在安全问题,比如说我们常用的支付宝,我们支付宝的密码和支付密码在数据库存储之前的加密算法一定是单向不可逆的,否则可能会出现程序员拿到加密后的密码把他们再进行还原,如果是这样的你还能放心使用支付宝吗。
其实我们可以把Hash算法理解成一种特殊的压缩算法,它能够把任意长度的数据压缩成一种固定长度的字符串,这就好像是给数据加了一把锁。
常见的摘要算法有: MD2、MD4、MD5、HAVAL、SHA
有人可能会对MD5产生疑惑,因为网上有些网站中可以将MD5加密后的密码还原,其实,这是因为MD5这种加密算法用的比较多,一些网站就把一些常用的MD5原文和密文进行了保存,它的还原只是在数据库中查找出来的,对于比较麻烦的密码采用MD5加密后去网站还原是还原不出来的。
如何确定你自己的唯一性呢?我们在上面的叙述过程中出现过公钥加密,私钥解密的这个概念。提到的私钥只有你一个人所有,能够辨别唯一性,所以我们可以把顺序调换一下,变成私钥加密,公钥解密。使用私钥再加上摘要算法,就能够实现数字签名
,从而实现认证。
到现在,综合使用对称加密、非对称加密和摘要算法,我们已经实现了加密、数据认证、认证,那么是不是就安全了呢?非也,这里还存在一个数字签名的认证问题。因为私钥是是自己的,公钥是谁都可以发布,所以必须发布经过认证的公钥,才能解决公钥的信任问题。
发布的公钥必须是让 CA(Certificate Authority
,证书认证机构) 颁布具有认证过的公钥,才能解决公钥的信任问题。