HTTPS是在HTTP的基础上,引入了一个加密层(SSL),而HTTP是明文传输的(不安全)。
当下见到的大部分网页都是HTTPS的,这其实都是拜"运营商劫持"所赐。
关于加密,没有100%安全的加密方式,但是如果解密成本大于了要保护的数据本身的价值,这在很大程度上就是安全的。
密码学中的几个概念:
1.明文:要传输的真实的数据,要表达的实际的意思。
2.密文:针对明文加密后得到的结果,往往是不直观的,不易理解的。
明文==》密文 :加密
密文==》明文: 解密
解密的工具称为"密钥"。
加密的方式
1.对称加密:
加密和解密,使用的是同一个密钥。
2.非对称加密:
加密和解密使用两个密钥,这两个密钥,k1和k2 是成对的。可以使用 k1 来加密,此时就是 k2 来解密,也可以使用 k2 来加密,此时就是 k1 来解密。这两个密钥,一个可以公布出去,称为"公钥",另一个自己保存好,称为"私钥"。(只要一把密钥,是无法知道另一把的,这里涉及到了密码学的范畴)。
HTTPS工作过程
只要针对HTTPS的数据进行解密就可以得到HTTP格式的数据。
而HTTPS主要针对的就是header和body的加密。
一、引入对称加密
通过对称加密的方式,针对传输的数据进行加密操作。
注意事项:
1.对称加密的时候,客户端和服务器要同时使用一个密钥。
2.不同的客户端,需要使用不同的密钥。(如果所有客户端都使用一个密钥,加密形同虚设,黑客很容易拿到密钥。)
但是密钥在传输过程中很容易被黑客截获,一旦黑客截获了密钥,意味着加密操作就无意义了。
需要考虑,密钥的传输也进行加密。
二、引入非对称加密
使用非对称加密,主要目的是对传输的对称密钥进行加密,确保对称加密的安全性。
不能使用非对称加密对后续的header和body进行加密,而只对对称加密进行加密,这是因为非对称加密的加密和解密成本(消耗的cpu资源)很高,如果大规模使用,成本很大。
这时先让服务器生成公钥k1和私钥k2,然后再将公钥k2告诉给客户端,因为公钥和私钥是较为独立的两个部分(有公钥并不能算出私钥),所以即使公钥k2被黑客截获了也没关系,客户端使用公钥k2对进行对称加密的密钥key进行加密传输,当服务器拿到被公钥k2加密的密钥key并进行解密后,后续传输数据就可以使用密钥key来进行对称传输了。

但是这种情况仍然存在缺陷。
三、中间人攻击问题
服务器可以创建出一对公钥和私钥,黑客也可以按照同样的方式,创建出一对公钥和私钥来冒充自己是服务器。

如何解决上述问题:
首要问题是客户端在拿到公钥后要进行验证,验证这个公钥是不是真的。
所以引入了网络安全证书。
证书中包含了公钥,还包含了其他信息,这里列举几个重要信息:
1.服务器域名。
2.证书的有效时间。
3.服务器的公钥。
4.公证机构信息。
5.证书的签名:颁布证书的公证机构会在发布证书时,给这个证书计算出一个校验和,然后公证机构使用自己的私钥(与服务器的私钥无关)对校验和进行加密,此时就得到了证书的签名。
客户端拿到证书后,主要做这两件事:
1.按照同样的校验和算法,把证书的其他字段都计算一遍,得到校验和1.
2.使用系统中内置的公证机构公钥对证书中的签名进行解密,得到校验和2,对比校验和1和2。(因为市面上的公证机构没多少,所以windows等系统就内置了公证机构公钥)。如果一致,说明是原版证书,如果不一致,说明证书被修改过了。此时浏览器就会弹出警告页面,告诉用户访问的网页有风险!
有个问题,黑客自己的电脑也有公证机构的公钥,他可不可以解密之后进行修改证书呢?
不可以,因为:
1)如果黑客直接修改证书中的服务器公钥,不修改签名,客户端验证校验和时就会发现问题。
2)如果黑客修改证书中的服务器公钥,也尝试修改签名,由于黑客不知道公证机构的私钥,所以无法重新生成加密的签名,如果黑客使用其他私钥进行加密,客户端使用公钥进行解密就会失败,从而检测到问题。
3)黑客可不可以自己也去公证机构申请个证书来进行替换?
不可以,因为证书中还有域名等其他信息,例如域名就是唯一的,替换后客户端很容易发现问题。
4)如果黑客黑入公证机构或服务器来获取私钥呢?可以!但是这两个东西一般安全程度非常高,很难黑入。