https原理

1、为什么要有https?

http协议被用于客户端和服务端之间传递消息,但是这个传输过程是以明文的方式发送内容,http协议不提供任何方式的数据加密。如果有人获取了浏览器和服务器之间的传输保报文,就可以直接读取其中的信息。因此,http协议不适合传输一些个人敏感信息,比如:个人账户密码、支付信息等。

由于http协议的安全缺陷,需要有一种协议来保证客户端和服务端通信的安全,于是就有了https。

2、https主要解决了什么问题?

i. 确保你想访问的对象是你希望访问的对象

网络世界里,真正决定你地址的是IP。平时我们所访问的网址如 www.baidu.com 都需要由DNS(域名转换系统)服务商将网址翻译成对应的IP地址,也就是说我们要访问的对象实际上是一个IP地址。如果中间网址到域名的转换关系被恶意的修改(也就是DNS劫持),我们的访问请求就会打到修改之后的恶意IP上,

https首先解决了身份认证的问题,即确保你要访问的对象就是你希望访问的对象。现实生活中,如果我们和某个人A交易,为了确保交易的安全性,首先需要确认A的身份。通常我们会检查A的身份证信息,资质信息等。确认了A的身份之后,我们才开始与对方交易。

https的身份认证过程也是如此。Server端上线之初,会向权威的第三方的CA(Certificate Authority, 证书颁发机构)申请证书,然后第三方会通过线上线下核查的方式确认Server的信息,核查完之后,会给Server颁发一个证书,这个证书中记录了颁发机构的信息和Server的身份信息。

初次请求https的时候,服务端首先会返回一个证书,这个证书中包含了访问对象的身份信息,客户端验证了证书之后发现,证书中的信息就是访问对象的信息,接下来就可以正常通信了。

认证过程

有的同学可能会有疑惑,如果我伪造一个证书,客户端怎么知道呢?比如我是A,但我非要在证书里写我是B,那你怎么知道呢,就像现实中伪造的各种证书一样?CA颁发的证书有个特性是不可修改。这个涉及到非对称加密的知识了,简单来说就是CA把公司的信息通过特定的摘要算法如MD5生成一段签名,再用私钥对签名进行加密。客户端拿到证书之后,根据证书中的摘要算法对证书中的信息计算出一个签名,然后用CA的公钥对密文进行解密,对比计算出的签名和解密出的签名,如果一致,就证明证书没有被修改过。

下面是 www.baidu.com的证书信息(谷歌浏览器点地址栏的那个小锁):

百度的证书

从图中可以看到百度相关的信息,签发者相关的信息,签名算法(这里的签名算法是SHA-256)以及百度的公钥。

ii. 确保通过过程中的数据安全

解决了如何证明你就是你的问题之后,就需要解决如何保证通信过程中你们的通信内容不被窃取到。

还是刚刚那个交易场景。你确认了和你交易的A的身份之后,你们开始放心的交易了。如果你们的交易内容是你想花大价钱从A受手里买一个产品的配方,有了这个配方之后,你就能财源滚滚,走上人生巅峰了,所以这个配方千万不能泄露出去。为了和网络通信的过程保持一致,我们假设你们不直接交易,而是需要一个传信的人帮你们传递这个配方。在原来http的协议下,这个配方就是明文传输的,如果有人劫持了这个信件就能获取到这个配方。所以就不能明文传递这个配方,得加密。那加密方式怎么选择呢?

对称加密:对称加密指的的是采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密
非对称加密:非对称加密算法是一种密钥的保密方法。 非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。 公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。

考虑到为了模拟真实的通信过程,你们是不能见面的,也就是说你不能通过耳语把你要用的密钥告诉A,所以你们否决了开始就用对称加密的方式,因为怎么把密钥传给对方是个问题。如果在传输密钥的过程中密钥泄露了,这就和明文传输配方没什么区别了。所以如何把密钥传给A?传输过程有以下几步:

  1. 首先生成用于对称加密的密钥s
  2. 利用证书中A传过来的公钥,对密钥s进行加密,传给A
  3. A利用自己的私钥,对传过来的密文进行解密,解密出密钥s
  4. 接下来双方通过密钥s来加密通信内容,互相传输

再回到https的通信过程中,具体流程如下图所示:

https通信过程

以上就是https原理的简介。至于如何从http升级到https,下一篇将以本博客为例,示范升级过程。


gongzhonghaopic


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!