什么是https?
https=http+SSL/TLS , SSL/TLS 是介于http层和tcp/udp层之间。
http为什么需要加密?
http以明文传送数据。说白了,就是不安全。
什么是对称加密?
只有一把钥匙,客户端和服务器都有这把钥匙,客户端加密,服务器解密,服务器加密,客户端解密。
为什么不能使用对称加密?
如果使用对称加密,意味着客户端和服务器都需要保存一把钥匙。 1 服务器给客户端的时候,容易被劫持。
2 客户端就需要保存世界上所有服务器的地址。
明显不可行。
什么是非对称加密?
非对称加密是一对儿钥匙,一个公匙,一个私匙。规定公匙加密,私匙解密,私匙加密,公匙解密。
使用非对称加密可行吗?
服务器掌管一套私匙和公匙,服务器将公共钥匙传给客户端,客户端将明文使用公共钥匙加密,然后传回给服务器,服务器使用私密钥匙解密。保证了浏览器到服务器这条路是安全的。使用同样的方法客户端也掌握一套私密钥匙和公共钥匙,也同样能保证服务器到客户端这条道是安全的。 但是这样是需要两套 私密钥匙和公共钥匙。我们都知道非对称加密算法是很耗时的性能操作。这样做的最大问题就是性能问题。
那HTTPS采用的是哪种加密方式呢?
Https采用的是对称加密和非对称加密合作的方式。 1 某网站拥有非对称加密公共钥匙A和私密钥匙A’. 2 浏览器向服务器请求,网站将A发送给客户端。 3 浏览器生成对称加密钥匙X,并且公共钥匙A加密,发送给服务器。 4 服务器使用私密钥匙A’解密该内容得到对称加密钥匙X. 5 客户端和服务器同时拥有对称加密的钥匙X,从此以后两者通讯就可以使用对称加密的方式通讯。
HTTPS是如何修复存在漏洞的?
1 如何保证公有要是A在传递到客户端的时候不被中间人攻击?
该网站需要从CA机构申请数字证书,该证书类似于给网站的公有消失颁发了一个身份证。数字证书里含有证书持有者信息、公钥信息等。
2 如何保证数字证书不被篡改?
数字证书=证书明文+数字签名(证书明文->hash->CA机构的公有钥匙加密->数字签名)
在网络传送过程中,中间人只能去修改证书明文,而不能修改数字签名,因为数字签名使用了CA机构的私有钥匙进行了加密。当到达客户端的时候,客户端会使用CA机构的公有钥匙对数字签名解密,从而得到证书明文hash过的证书明文,然后把数字证书中的证书明文也做hash,将的到内容进行对比,相同则验证通过。
3 如何能够确保数字证书不会被整个替换?
数字证书中包含了证书持有人,公有钥匙等,可以对比自己请求的和证书中提供的服务器地址是否一致,如果不一致就是被替换了。整个时候就被拒绝连接了。
4 数字签名的生成过程
证书明文Z,通过hash算法得到Z’,使用CA机构的私有钥匙加密变成数字签名W, 数字证书=Z+W.
5 为什么制作数字签名的时候需要hash一下?
最显然的是性能问题,前面我们已经说了非对称加密效率较差,证书信息一般较长,比较耗时。而hash后得到的是固定长度的信息(比如用md5算法hash后可以得到固定的128位的值),这样加解密就快很多。
6 怎么证明CA机构的公钥是可信的?
操作系统、浏览器本身会预装一些它们信任的根证书,如果其中会有CA机构的根证书,这样就可以拿到它对应的可信公钥了。
7 每次进行HTTPS请求时都必须在SSL/TLS层进行握手传输密钥吗?
服务器会为每个浏览器(或客户端软件)维护一个session ID,在TLS握手阶段传给浏览器,浏览器生成好密钥传给服务器后,服务器会把该密钥存到相应的session ID下,之后浏览器每次请求都会携带session ID,服务器会根据session ID找到相应的密钥并进行解密加密操作,这样就不必要每次重新制作、传输密钥了!
|