参考链接:https://www.jianshu.com/p/0e153f62fe32,https://www.jianshu.com/p/f98f8c4d1476
参考了两篇文章,总结一下自己对https的理解,可能还不够完善或者有偏差,请大佬指点~~
复制粘贴一下概念:
http与https一个s的差别,其实就是多了SSL/TLS协议,https=http+ssl/tls,至于SSL/TLS协议自行百度。
贴图看一下S层的分布:
说下http为什么不安全的理解:
http是以明文的方式传输信息的,最简单的例子就是你用户名密码登录一个网站,用户名跟密码都是能用抓包工具抓下来的,别人一看就把你的个人信息获取了,那万一是身分钟,银行卡密码,这就相当的不安全了。
https为什么安全:
(1)对数据进行加密,保证了数据隐私性,内容经过对称加密,每一个连接生成一个唯一的加密密钥,建立一个信息安全通道,来保证传输过程中的数据安全,并且数据具有完整性,内容传输经过完整性校验。
(2)对网站服务器进行真实身份认证。(第三方无法伪造服务端(客户端)身份)
http与https的优缺点:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,速度会很快。https则是具有安全性的ssl加密传输协议,所以过程繁琐,传输时间会比http长。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的(请求之间互不干扰);HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
https的加密方式:
1、对称加密
加密解密使用同一种“密钥”或者说“规则”,称之为对称加密。
简单粗暴的说就是,一个电脑的文件夹,统一用密码数字密码加密,输入123,然后一个公司的人都是用数字密码123加密文件夹。
比如我们对某一个文件使用密码123进行压缩。接着再对其使用密码123进行解压缩。密码123,就是一种“密钥”,一种“规则”。
贴图:
2、非对称加密
加密和解密,使用两种密钥,两种规则。
例如用户A持有一对密钥如下所示
公钥,用来加密的。私钥,用来解密的。这一对公钥私钥拥有以下特点:
公钥加密,私钥解密。
私钥加密,公钥认证。
https对称加密+非对称加密贴图:
数字签名:
数字签名安全警告
造成这个警告的原因是,发布这个软件,提供这个信件的用户,没有给这个软件附上一个数字签名。
那么数字签名究竟是啥?
上面我们提到了SSL的加密解密方式:对称加密+非对称加密
但是这些只是对信息安全性做了一定程度上的保证。
假设,中途邮递员,将信件的部分内容遗失,或者损坏了又该怎么办呢?作为用户我们如何得知,这封信件的内容已经被遗失/损坏了呢?
为了解决这个问题,我们就要靠数字签名来判断数据的完整性。
举例来说:
A在写信时,首先对信件内容调用hash函数,生成了一个信息的摘要。A把这个摘要内容通过私钥加密后,附在信件里随信寄出。
用户B收到信件后,通过之前拿到的公钥对这封信进行认证。
于是,用户B通过公钥解密得到了摘要内容。接下来用户B再对用户A信件的正文调用hash函数,然后将通过公钥解密得到的摘要内容的hashcode和正文调用hash函数产生的hashcode进行对比。
若一致,则说明信件的内容是完整的,无损的。
https传输过程:
客户端(A)->服务端(B): 请求开始进行一次SSL通信
服务端(B)->客户端(A): B服务器收到请求,将准备好的公钥(自己有私钥,因为公钥私钥是成对出现)返回给A
客户端(A)->服务端(B): A得到送过来的公钥后,将密钥“123”,用公钥加密。加密后的文字不可读。就像这样:54%$#I0X87FE00&*。加密后,再将本串文字,发送给B(123就是对称加密密钥,加密后是:54%$#I0X87FE00&*)
服务端(B)->客户端(A): B收到公钥加密信息(“54%#I0X87FE00&”),使用自己的私钥对公钥解密,得到密码123,通知A准备工作完成(私钥才能解公钥)
客户端(A)->服务端(B): 从此,开始使用密码123对信息进行加密和服务器进行交流
但是这样看视很安全,其实是不安全的,破解方式:
客户端(A)->骇客(C): 请求开始进行一次SSL通信
骇客(C)->服务端(B): C将请求转发给B
服务端(B)->骇客(C): B收到C的请求误以为是A发过来的,将公钥返回给A
骇客(C)->客户端(A): C拿到B发过来的公钥后,私藏起来,自己计算了个公钥(自己有私钥),发给A
客户端(A)->骇客(C): A收到C的公钥误以为是B发过来的,用C给的公钥对称加密,密钥(密码123),把密钥发给B(其实是发给C)
骇客(C)->服务端(B): C拿到A发过来的公钥对称密钥,使用自己的私钥解密,得到密钥(密码123),再用私藏起来B发过来的公钥对称加密,把密钥发给B
服务端(B)->骇客(C): B收到C的公钥密钥误以为是A发过来的,用自己的私钥解密,得到密码123,然后通知A准备工作完成,之后就用密码123
进行通信。。。
骇客(C)->客户端(A): C通知A之后用密码123来通信
这样客户端A与服务端B的通信就都被骇客C窃取了,这种叫做“中间人攻击”。
贴图:
电子证书的由来:为了解决“中间人攻击”,就需要有电子证书来判断A拿到的是B发过来的公钥,于是就发明了一种证书,来证明某公钥属于某个人。
在实际的计算机通信中,我们就是采用这种“公证人方式”,来进行SSL通信安全认证的。
所谓的公证人,其实就是CA啦,全名为“数字证书认证机构”,英文全称叫做“Certificate Authority”。 就是它来充当这个“公证人”的角色。
一般的网站运营商,都会提前向CA申请一个电子证书。CA会通过自己的私钥将网站的公钥和网站的各种相关信息,比如域名等等进行加密。加密后形成电子证书,颁发给申请者。申请者,会把这个电子证书部署到服务器上。
对于权威的CA来说,他们的公钥,都会由操作系统内置。比如微软的windows就内置了几十个不同的CA的公钥。客户端收到服务器发来的电子证书以后,会对通过内置的CA公钥,对证书进行认证(私钥加密,公钥认证)。若认证成功,则代表是本次来自服务器的响应,是可信的。
所以,SSL通信,除了加密解密,数字签名以外,应该还要包括对电子证书的验证。
客户端(A)->服务端(B): 请求开始进行一次SSL通信
服务端(B)->客户端(A): 服务器收到请求,将电子证书,回送给客户端A
客户端(A)->服务端(B): 判断(私钥认证)电子证书,若可信,则从证书中提取出服务器公钥,对密码123加密发送给服务器
服务端(B)->客户端(A): 收到公钥加密信息,使用私钥解密,得到密码123,通知客户端准备工作完成
客户端(A)->服务端(B): 从此,开始使用密码123对信息进行加密和服务器进行交流
若服务器响应的电子证书是由不受信任的机构颁发的,浏览器会出现以下安全警报:
电子证书不受信任警告
若服务器响应的电子证书上记载的各种所属信息,和你将要浏览的网站的信息不一致的话,
则会出现电子证书冒用警告
总结
1、https通信是指htttp+ssl.
2、ssl的加密解密方式是非对称加密与对称加密的结合
3、数字签名,是为了保证数据完整性的一种手段。
4、电子证书是通过第三方权威机构,结合非对称加密系统,对双方身份的一种认证,是为了保证数据的安全性。
结语:只是单纯记录一下看过的东西,大部分用于自己理解,不适合用于对概念理解。