https、数字证书、签名到底是什么?

前段时间整理了关于数字证书和数字签名的一些内容,今天整理一下发出来。

我们都知道 HTTP 协议都是明文传输内容,为了保证数据传输的安全,HTTPS 协议就应运而生了,但它其实并不是一个全新的协议,而是HTTP 协议基本之上 再加上SSL/TLS 协议。

因此当你访问一个支持 https 的网站时,是需要先进行 SSL/TLS 握手建立连接的。

SSL/TLS 握手的目的是为了 安全 地协商出一份对称加密的密钥,有了这个密钥之后,后续的数据全部使用这个密钥进行加密。

这个过程其实挺有趣的,涉及到的知识点,专业名词也很多,比如对称加密,非对称加密,信息摘要,数字签名,数字证书,公钥和私钥。本篇文章,会详细地介绍这些极易混淆的专业名词。

在讲解之前,我先给你提出几个摸底问题,如果你已经还不能够熟练回答,那么本篇文章会给你答案:

  1. 对称加密和非对称加密,各有什么优缺点?
  2. 对称加密和非对称加密,是排他关系吗?是否可以搭配使用?
  3. 摘要和加密有什么区别?有了摘要算法为什么还要有加密算法?
  4. 如何在通信时同时做到保密性、高效性?
  5. 如何申请数字证书?证书分为哪几种?SSL 证书如何部署?
  6. 完整说下证书申请、证书签发、证书下发客户端、客户端验证证书、数据加密传输的整个流程?

1. 对称加密与非对称加密

对称加密

对称加密是通信双方共同拥有一把密钥。

这把密钥可以把明文加密(encryption)成密文,也可以把密文解密(decryption)成明文。

常见的对称加密算法有AES、DES、RC4,其中最常用的是AES。

对称加密的优点是:速度快。

同时也有一个缺点,就是不那么安全,一旦你的密钥被别人窃取了,所有的数据就会在网络的世界里裸奔。

非对称加密

与 对称加密相对的是 非对称加密。

通信双方持有不同的密钥。

服务端的密钥,称之为 私钥(private key),客户端的密钥,称之为 公钥 (public key)。> >

他们二者的区别是:

1、私钥应仅在服务端保存,绝不可泄露。而公钥可以存在于任何的客户端,即使黑客拿到了也没有关系。

2、公钥加密的密文只有相对应的私钥才能解密

3、私钥加密的内容,所有与之相对应的公钥都能解密。

4、私钥通常用来生成签名,公钥用来验证签名。

5、公钥和私钥是相对的,两者本身并没有规定哪一个必须是公钥或私钥。这意味着,公钥只要不对外公开,那就可以做为私钥,私钥公开后也可以做为公钥。

典型的非对称加密算法有 RSA 。

非对称加密的优点,就是安全系数特别高。缺点就是速度会慢一些。

对称与非对称加密结合

当客户端收到的公钥是准确的时候,通信就是安全的。

因为用正确公钥加密过的密文,只有服务端的私钥能解。

那么如何保证,客户端收到正确的公钥呢?

答案是:通过非对称加密来协商对称加密的密钥,服务端一旦把正确的公钥安全地送达到客户端后,后续的通信,为了保证高效通信,再采用对称加密来加密数据。

具体的过程,后面会更加详细的阐述这一过程。

2. 摘要、签名、证书是啥?

信息摘要

一段信息,经过摘要算法得到一串哈希值,就是摘要(dijest)。

常见的摘要算法有MD5、SHA1、SHA256、SHA512等。

关于摘要,有几点需要你明白的:

1、摘要算法,是把任意长度的信息,映射成一个定长的字符串。

2、摘要算法,两个不同的信息,是有可能算出同一个摘要值的。

3、摘要算法与加密算法不同,不存在解密的过程。

4、摘要算法不用于数据的保密,而是用于数据的完整性校验。

数字签名

摘要经过私钥的加密后,便有了一个新的名字 -- 数字签名。

签名 是在发送方,这是一个加密的过程。

验签 是在接收方,这是一个解密的过程。

那搞懂数字签名的意义是什么?只要回答下面两个问题即可。

第一个问题,有了信息摘要,为何还要有数字签名?

答:信息摘要,虽然也不可逆,但却容易却被伪造。所以信息摘要只用于校验完整性,而要保证信息摘要的正确性,就要依靠数字签名啦。

数字签名的签名和验签是非对称加密,其他人除非拿到私钥,不然没法伪造。

第二个问题,为什么不对内容直接加密,而是对摘要进行加密。

答:由上面我们知道了非对称加密的速度非常慢,如果传输的数据量非常大,那这个加密再解密的时间要远比网络传输的时间来得长,这样反而会得不偿失。

如果我们对传输的内容只有完整性要求,而安全性没有要求(意思是传输的内容被人知道了也没关系)。那就可以对摘要进行加密,到客户端这里解密后得到摘要明文,再用这个摘要明文与传输的数据二次计算的摘要进行比较,若一致,则说明传输的内容是完整的,没有被篡改。

数字证书

(解决了公钥是否安全的问题!!!)
在数字签名那里,不知道你有没有发现一个问题?

数字签名是非对称加密,服务端有一个私钥,客户端一个公钥,只有这两个对上了验签。

那假如说你(客户端)拿到的公钥并不是服务端给的呢,而是黑客塞给你的呢?而你却把这个假公钥当成真的,那么当你使用这个假公钥加密一些敏感信息时,黑客就可以截取你的这段信息,由于这信息是用黑客自己的公钥加密的,这样一来,黑客拿自己的私钥就能解密得到你的敏感信息。

这就是问题所在。

数字证书就应运而生了。

要理解数字证书,同样只要搞懂两个问题即可。

数字证书是什么东西?其实它就是一个 .crt 文件

数字证书是谁颁发的?由权威证书认证机构颁发,一般我们简称为 CA 机构

数字证书如何申请的?或者说如何颁发的?

为了让你理解这一过程,我画了下面这张图:

1、在自己的服务器上生成一对公钥和私钥。然后将域名、申请者、公钥(注意不是私钥,私钥是无论如何也不能泄露的)等其他信息整合在一起,生成.csr 文件。

2、将这个 .csr 文件发给 CA 机构,CA 机构收到申请后,会通过各种手段验证申请者的组织信息和个人信息,如无异常(组织存在,企业合法,确实是域名的拥有者),CA 就会使用散列算法对.csr里的明文信息先做一个HASH,得到一个信息摘要,再用 CA 自己的私钥对这个信息摘要进行加密,生成一串密文,密文即是所说的 签名。签名 + .csr 明文信息,即是 证书。CA 把这个证书返回给申请人

要解决这个问题,其实只要保证『公钥』是可信的。只有服务端发给你的公钥你才能拿,而坏人给你的公钥,你要懂得识别并丢弃它。

3. 数字证书(Certificate)

在HTTPS的传输过程中,有一个非常关键的角色--数字证书,那什么是数字证书?又有什么作用呢?

所谓数字证书,是一种用于电脑的身份识别机制。由数字证书颁发机构(CA)对使用私钥创建的签名请求文件做的签名(盖章),表示CA结构对证书持有者的认可。(通俗来讲就是告诉浏览器对服务端的身份的肯定)

3.1 数字证书拥有以下几个优点

  • 使用数字证书能够提高用户的可信度;

  • 数字证书中的公钥,能够与服务端的私钥配对使用,实现数据传输过程中的加密和解密;

  • 在认证使用者身份期间,使用者的敏感个人数据并不会被传输至证书持有者的网络系统上;

4. TLS/SSL 保证信息的安全

在信息安全性问题中,我们常常要做到三点才能保证信息的安全:

信息的保密性

信息的完整性

身份识别

将这三者结合起来,就是 TLS/SSL 做的事情

1、客户端(浏览器)向服务端发出请求,服务端返回证书给客户端。

2、客户端拿到证书后,把证书里的签名与及明文信息分别取出来,然后会用自身携带的CA机构的公钥去解密签名,然后信息摘要1,然后再对明文信息进行HASH,得到一个信息摘要2,对比信息摘要1 和信息摘要2,如果一样,说明证书是合法的,也就是证书里的公钥是正确的。

以上采用的是非对称加密(CA的公钥和私钥),保证了客户端接收到服务端正确的公钥,有了服务端的公钥后,后面的信息加密都可以使用这个公钥,而用这个公钥加密过后的密文,只有服务端的私钥能解,就算黑客拿到了也没法解开。

完整地址

posted on 2023-03-12 16:48  京鸿一瞥  阅读(367)  评论(0编辑  收藏  举报