https原理及相关知识点

最近一个项目用到https,就研究了一下https的原理。

https原理

下图是网上用的比较多的一个图,但说的明白的不多。

这里写图片描述

(图片来自网络)

首先几个点做提前说明:

  • https简单说就是安全的http,因为http访问都是明文的,https相当于给http做了一层加密。
  • 用的协议是SSL,这是一种加密传输协议,它有很多版本,里面支持一系列的算法。在客户端与服务器握手阶段,双发确认各自支持的版本算法,如果无法匹配,连接就会断开,不在往下继续走了。后面讲的流程都是基于往下走的情况。

详细步骤

下面的数字标号和上图是对应的。

  1. 客户端(也就是浏览器)访问一个https开头的网址,这个网址对应一个服务端。

  2. 服务端收到请求后,准备证书,证书中包含后面用到的算法(比如RSA,DES等),服务端的公钥,证书有效期等。这里面最重要的东西就是公钥了,后面会详细讲到。

  3. 服务端把证书响应给客户端。

  4. 客户端收到证书后,第一步就是验证证书,注意不是直接使用,而是验证。所以这里并没有默认服务端是安全的,因为客户端和服务端之间可能会有拦截者。

    • 如何验证证书呢?要理解这个首先要知道基本的非对称的私钥签名,公钥验签原理(数字签名是个典型应用)。这个原理不多讲,否则文章太长了。
    • 服务端的这个证书就是有一个所谓的权威机构(CA,就是受信任的根证书机构,或者其二级机构)的私钥签发的。客户端就是用CA证书(公钥)来验证服务端的证书。那么问题来了,客户端哪来的CA证书呢。事实上服务端下发的证书是一个证书链。下面就来讲讲服务端证书是怎么来的。
    • 比如我(A代称)的一个网络服务要实现https,我要将自己的CSR发给一个受信任的机构B,B用自己的私钥签发证书给我,B本身是可信的,他的证书是由CA根机构签发的。这样A的证书里其实就存在了一条证书链。客户端就是利用这个证书链,一直往上找,然后从最上层往下一层层验证。

    • 验证完这一步后,再检查下有效期,名称啥的,没有问题的话证书就验证成功了。然后客户端生产一个随机数, 用服务端的公钥对这个随机数加密,然后用hash算法生成签名做成证书。

这里写图片描述

(图片来自网络)

5 客户端把自己生成的证书发给服务端,因为只有服务端有私钥,所以只能服务端来解密,这样就保证了即使其他人截获也没用。

6 服务端收到证书后,用私钥验签,并解密出来随机数。这个随机数就是后续网络传输数据使用的对称加密密钥了(是不是很巧妙,既做了验签又完成了密钥交换)。

7 后面的通信就全部用这个随机数加密传输了。

SSL证书请求文件CSR

什么是CSR

第一部分的https原理中提到了CSR,相信你也初步了解了CSR的作用。CSR(Certificate Signing Request)数字证书签名请求,其中包含了你的公钥和DN。DN指的是你的一些个人信息,比如所在地,姓名,邮箱等,这些信息也会存在证书里。

我们通过一些工具生成CSR后,把它提交给一些受信任的专业机构,有他们来签发成证书发给我们,当然这项服务肯定是要收费的。

如何生成CSR

这个太简单就不多说了,用openssl几条命令就可以搞定。

猜你喜欢

转载自blog.csdn.net/pony_maggie/article/details/53127492
今日推荐