内容简介:在第一篇 和第二篇 中我们学到了 使用对称加密加密信息,非对称加密配送密钥,使用散列确认文件没有被篡改,使用消息认证码确保知晓密码的才能发送消息,使用数字签名来证明消息的发送者。那么,如果我们在互联网上访问一个网站进行通信的时候,使用非对称加密进行密钥配送时,怎么确保对方就是对方呢?也就是说,怎么确认我们收到的所谓的答案是,对公钥使用数字签名。
在第一篇 和第二篇 中我们学到了 使用对称加密加密信息,非对称加密配送密钥,使用散列确认文件没有被篡改,使用消息认证码确保知晓密码的才能发送消息,使用数字签名来证明消息的发送者。
那么,如果我们在互联网上访问一个网站进行通信的时候,使用非对称加密进行密钥配送时,怎么确保对方就是对方呢?也就是说,怎么确认我们收到的所谓的 Alice
的公钥就真的是 Alice
的公钥呢?
答案是,对公钥使用数字签名。
证书
因为大家都有公钥,于是世界上各大商家就形成了一个组织,这个组织负责对公钥进行签名。只要是这个组织签名过的公钥我们都信任。这个组织就叫 CA(Certification Authority)
。
举个例子,如果 Alice
要向 Bob
发送密文,那么首先 Bob
将它的证书发送给 Alice
。
首先证书有两部分组成:
-
Bob
的公钥 -
CA
使用CA
的私钥生成的数字签名
Alice
接收到证书之后,首先使用 CA
的公钥对数字签名进行确认,如果发现没有问题,确实
是 CA
签发的证书,那么接下来,就是用 Bob
的公钥对消息进行加密,然后发送给 Bob
。 Bob
再使用自己的私钥进行解密,就可以得到 Alice
发出的明文。
如果全世界只有一个 CA
,由它来签发所有的证书,那么它肯定忙不过来,而且也会由于处于垄断地位而搞各种幺蛾子,因此, CA
组织一般都是树状结构,是分层的,而最顶层的 CA
就叫 根证书(Root CA)。
TLS
TLS 就是我们之前学到的几种密码 工具 的组合,举个例子,我们日常所使用的HTTP协议,他是明文协议,HTTP请求大概长这样:
GET / HTTP/1.1 Host: www.example.com
而响应大概长这样:
HTTP/1.1 200 OK Date: Mon, 23 May 2005 22:38:34 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 138 Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux) ETag: "3f80f-1b6-3e1cb03b" Accept-Ranges: bytes Connection: close <html> <head> <title>An Example Page</title> </head> <body> <p>Hello World, this is a very simple HTML document.</p> </body> </html>
可以看到,他们其实就是人类可读的字符,所以对HTTP协议进行中间人攻击,就可以获取所传输的一切,因此我们 需要一种能够兼容HTTP协议(HTTP应用这么广,不可能一下子把它废掉),但是又能进行加密的技术,它就是TLS。
TLS详细可以参考这里: https://en.wikipedia.org/wiki/Transport_Layer_Security
TLS的工作流程是:
ClientHello ServerHello
可以发现
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。