问题

  • 什么是https,与http的关系
  • 为什么需要https
  • https是怎么防止DNS劫持和钓鱼网站的
  • https是怎么进行通信的
  • 什么是证书,证书的作用

概念

tcp,http

网络协议:设备通信的规则集合

tcp:传输层协议,规定数据传输的方式,有连接的全双工通信,与udp对比,三次握手

http:应用层协议,规定传输内容的格式,请求→响应的通信模式

数据通信,信息加解密 信息摘要 编码

数据通信:数据信息经由网络在设备之间的传递

保密通信:只有通信双方可以获取传递的信息

加密:(https加密,md5加密,base64加密)信息加密(明文 密文),信息摘要,编码的区别

举例:信息加密(替换法加密,换位法加密,秘钥);信息摘要(md5,签名);编码(base64编码,url编码)

对称加密和非对称加密

对称加密:加密和解密的秘钥相同,加密是解密的逆过程

非对称加密:加密和解密的秘钥不同

关于https

场景:网络数据通信要解决的问题——保密 & 信任

保密:为保证两人之间的网络通信内容不为外人所知,信息发送方要对信息加密,接收方解密

信任:确保网络信息发送者就是生成的那个人

对称加密无法解决这两个问题

解决方法:公钥密码系统

公钥密码系统使用非对称加密的加密方法

公钥和私钥:公钥加密信息必须对应的私钥解密,私钥加密信息必须对应的公钥解密

解决保密问题:如果使用对称加密算法,秘钥的可靠传递是一个问题。使用公钥密码系统可以很好地解决这个问题,如果甲要向乙发送保密信息,甲可以用乙的公钥加密信息,然后发送给乙,乙用自己的私钥就可以解密信息,由于别人没有乙的私钥,所以信息的原文不会被别人看到。所以为了确保通信的保密性,信息都是使用公钥加密,私钥解密

解决信任问题:如果甲想要给其他人发送信息,可以先用自己的私钥加密消息。这样,信息的接收方可以用甲的公钥解密,这就保证了信息不被篡改,因为如果信息被别人篡改,使用甲的公钥就无法成功解密

举例:git的ssl

https原理

https协议中使用了公钥加密系统,但并不是使用非对称加密方法直接对通信信息直接加密,而是利用非对称加密算法传递对称加密算法的秘钥。更具体地说,使用https进行通信的客户端和服务器的主要通信过程是这样的

  • 服务器维护自己的私钥,服务器将自己的公钥发送给客户端
  • 客户端用服务器的公钥加密对称加密的秘钥,并发送给服务器
  • 服务器用私钥解密信息,得到对称加密的秘钥,之后客户端和服务器使用对称加密秘钥进行保密通信

为什么要这么做呢?

首先,由于非对称加密秘钥的可靠传递问题,我们不能直接使用非对称加密进行通信

如果使用非对称加密,通常的思路是,客户端和服务器各维护自己的私钥,建立连接时,客户端发送给服务器自己的公钥,服务器再把自己的公钥用客户端公钥加密传递给客户端,这样就建立好了连接,客户端和服务器之间可以用服务器的公钥-私钥进行保密通信。如果在建立连接阶段被中间人劫持,连接不会正常被建立,在建立好连接之后,则被劫持到数据包也无法解析出明文。但是,非对称加密相对对称加密性能较低,因此我们不能直接使用非对称加密进行通信

因此,https实际的通信使用了比较巧妙的方法,即实际通信还是使用对称加密。使用非对称加密对对称加密秘钥进行可靠传递

秘钥传递的时机:在tcp握手时进行传递,这样可以在连接建立后,就做好了进行保密通信的准备,这样,如果能成功建立tcp连接,就成功建立了ssl通道

https通信流程

1. 约定非对称加密算法及hash算法

①客户端→服务器

客户端将自己支持的一套加密规则(包括对称加密算法和hash算法)发送给服务器

②服务器→客户端

选定对称加密和hash算法

服务器将选定的算法公钥发送给客户端

2. 传递非对称加密秘钥

③客户端→服务器

生成随机数秘钥(对称加密秘钥),并用公钥加密,得到加密后的随机数

计算握手消息

用随机数对握手消息加密,得到加密后的握手消息

用约定好的hash算法计算握手消息,得到hash后的握手消息

客户端将加密后的随机数加密后的握手消息hash后的握手消息发送到服务器

④服务器→客户端

用私钥解密随机数

用随机数解密握手消息

验证hash后的握手消息与客户端发来的hash是否一致

用随机数加密一段握手消息

用hash加密握手消息

服务器将加密后的握手消息hash后的握手消息发送给客户端

⑤客户端→服务器

客户端解密握手消息并验证hash一致

客户端用随机数加密握手消息

用hash加密握手消息

客户端将加密后的握手消息hash后的握手消息发送给服务器

握手结束,客户端开始向服务器发送通信信息(使用随机数进行通信)

证书

信任问题,网络通信中的信任问题主要是客户端对服务器的信任问题,即客户端希望保证它访问的服务器就是它想访问的服务器(服务器对客户端的信任问题则无关痛痒)。

之前已经提到,使用公钥加密系统可以解决信任问题。

由于私钥加密的密文只有公钥可以解密,假设客户端有某个服务器的公钥,那么如果加密的信息能够使用公钥解密,说明这条信息是由该服务器发出的。

客户端如何保证自己拿到的服务器的公钥就是这个服务器的公钥,而不是攻击者盗用的公钥呢?

这一点通过权威的第三方证明来保证,就像淘宝平台如何解决买家对卖家的信任问题?答案是借助淘宝这个权威第三方平台。服务器需要向证书的颁发机构申请证书,通过证书来证明自己的身份,这就是ssl证书的作用,下面简称证书。

证书提供了公钥-私钥对,和域名与公钥绑定关系的证明。

服务器安装了证书后,就可以证明自己的身份了,在https通信时,客户端接收到服务器发送的证书后会去验证证书的绑定域名是否与当前访问域名一致,一致则可以确认网站身份。

回答问题

什么是https,与http的关系

https是一个基于http的保密通信协议,它在http基础上增加了一个安全套接层,https由于需要在通信过程中进行加密解密,因此性能低于http,当然安全性高于http。在https网页中发送http的ajax请求将会被浏览器block,因为浏览器认为这是不安全的操作,而在http网页中发送https请求是被允许的。

为什么需要https

https保证数据以更保密的方式传输,并增加对服务器身份验证,这可以使我们的数据传输更安全,有效防止数据的泄露和篡改

https是怎么防止DNS劫持和钓鱼网站的

DNS劫持,即将用户访问的域名指定到攻击者的服务器的攻击方法。如果正常的网站使用https,那么客户端会验证证书,而由于证书审核很严格并且较难伪造,所以攻击者的服务器不太可能会有一个权威机构颁发的证书,因此无法和浏览器建立连接

钓鱼网站,即仿冒正常网站的网站,目的是欺骗用户,获取敏感信息。钓鱼网站也很难获得合法的证书,因此不容易仿冒使用https的网站

https是怎么进行通信的

见上一小节。

什么是证书,证书的作用

ssl证书是一个文件,是数字证书的一种

它部署在服务器上,可以给服务器提供进行https通信的支持,提供公钥和私钥用于保密通信,并提供身份认证确保服务器可信。