zoukankan      html  css  js  c++  java
  • 5分钟让你知道什么是PKI

    前言

    Public Key Infrastructure(PKI),中文叫做公开密钥基础设施,也就是利用公开密钥机制建立起来的基础设施。但是如果这么解释起来,到底是个什么东西,大家想必是没办法理解的。

    现在大家的很多重要活动都是通过网络进行的,那么与之俱来的安全问题就显得非常重要。同时很多安全保障机制都是基于PKI的,如果你因为各种原因(考试?提案?好奇?)想知道各种PKI是什么。那么通过这篇文章,绝对让你5分钟知道什么是PKI。

    PKI不好理解的原因是,这个概念包括了很多不同的技术和知识,同时又因为这个概念很庞大,让人感觉无从下手。但是,这个概念其实没有看起来那么复杂,让我们开始说明吧!


    第1分钟 - PKI的核心是身份证明书的发行

    PKI的主要目的是用来发行“身份证明书”,网络上因为大家不能见面,所以伪造身份是非常容易的事情。因为要在网络上验明正身,所以这个网络身份证明书就变得很重要了。

    相互通信的时候,如果能相互确认身份证明书,那么我们就知道自己是在跟对的人通信。

     

    但是,自己做的身份证明书是不能拿来作为证明的,就像生活中,如果公民身份证可以私人合法制作的话,那么身份证也就没啥可信度了。网络世界中,我们需要一个信得过的发证机关来发行身份证明书,同时自己要好好保管自己的身份证明书,就像派出所给你发了公民身份证,自己要好好保管一样。

    PKI的世界里,这个身份证明书,被叫做“证明书”。发行“证明书”的机关叫做“认证机关”。还有一个就是统一管理证明书的证书“档案库”。这三个东西加起来,就是PKI的主要构成要素。


    第2分钟 - 构成PKI的要素只有三个

    就像之前提到的,一般来说,构成PKI的主要要素就是下面三个概念

    1. 证明书
    2. 认证机关
    3. 证书库

    CA是什么?

    CA是Certificate Authority的缩写,也叫“证书授权中心”。它是负责管理和签发证书的第三方机构,作用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改。

    所以,CA实际上是一个机构,负责“证件”印制核发。就像负责颁发身份证的公安局、负责发放行驶证、驾驶证的车管所。

     

    CA证书是什么?

    顾名思义,CA 证书就是CA颁发的证书。CA证书也就我们常说的数字证书,包含证书拥有者的身份信息,CA机构的签名,公钥和私钥。身份信息用于证明证书持有者的身份;CA签名用于保证身份的真实性;公钥和私钥用于通信过程中加解密,从而保证通讯信息的安全性。

    以上看完了还是很晕咋办?没关系,只要记得以下两点就可以了:CA是权威可信的第三方机构,是“发证机关”。CA证书是CA发的“证件”,用于证明自身身份,就像身份证和驾驶证。

     
     

    CA证书的选择

    电子合同平台的核心是CA,平台通过CA的数字认证技术和数字证书产品来实现有效的电子签名,让电子合同符合《电子签名法》,具备防篡改、抗抵赖的特性,从而拥有和纸质合同同等的法律效力。一般来说,CA必须是所有行业和所有公众都信任的、认可的。因此它必须具有足够的权威性。


    Linux 下的工具们通常使用 base64 编码的文本格式,相关常用后缀如下:
    * 证书:.crt,.pem,.cer(windows系统ca证书格式后缀)
    * 私钥:.key
    * 证书请求:.csr(证书签名请求(公钥+标识名称)。一般是生成请求以后发送给CA,然后CA会给你签名并发回证书)


    说到底,PKI指的是证明书的制作和分发的一种机制。在这个机制的保障前提下,进行可信赖的网络通信。即安全的网路通信保障机制。

     

    实际上,证明书是被存放在硬盘或者IC卡里面的。证明书的文件构造是一种叫做 X.509 的协议规定的。另一方面,认证机关也其实就是一个网络应用程序。

    证书库因为某些原因,其实也就是文件系统而已,在网络上将证书存放在一起。这些东西,可以通过下载来获取。或者,因为某些原因,证书直接分发,从而省去了证书库这个环节。


    第3分钟 - 证明书里面的密钥

    一旦利用了证明书确认了身份的同时,通信的加密也就可以实现了。为什么呢?证明书里面包含了用来加密的密钥。

    比如说,你要和一个自称比尔的男人通信。这个自称比尔的男人,会在通信的最开始,通过网络将证明书发给你,那么通过这个证明书,就证实了他就是比尔。

    然后,你用这个“证明书中的密钥”,将你要发送给比尔的内容进行加密,然后发送给比尔。

    用“证明书中的密钥”加密过的内容,只能用比尔自己才有的另一个“私人的密钥”才能解密。这样的话,如果你发送给比尔的内容被他人窃取的话,他人也无法解密。

     

    只要比尔自己好好保管好自己才有的“私人的密钥”,那么如果有人拿着比尔的“证明书中的密钥”想要胡作非为的话,那就是不可能的。因为用“证明书中的密钥”加密过的内容,只有比尔自己才有的“私人的密钥”才能解密。

    所以这么一来,PKI提供的证明书可以用来 身份确认 和 通信加密。同时实现了这两个重要的功能。


    第4分钟 - 什么是“公开密钥”,什么是“私有密钥”

    对于比尔来说,只要保证本人的那个“私人的密钥”不被盗走,包含在“证明书里的密钥”给多少人都没有关系。也就是说,想跟比尔通信的人,必须要有比尔的证明书,要用比尔“证明书里的密钥”对通信内容进行加密。为了能让其他人可以方便的获取比尔的证明书,证书库就显得有必要了。

    在PKI机制中,放在“证明书里面的密钥”可以被任意自由分发,这里的“证明书里的密钥”被叫做“公开密钥(Public Key)”。与此相对,本人保管的那个“私人的密钥”就要做“私有密钥(Private Key)”。

     

    就像前文提到的,公开密钥是放在证明书里面的,所有用什么样的方式去分发证明书都没有关系。放到U盘里给别人,或者放到网上让人任意下载,或者用邮件发送,都是可以的。


    第5分钟 - “拿什么去信任你?我的证明书”

    先前说到,用包含在证明书里的公开密钥去给通信内容加密,这个过程大家已经知道。但是PKI提供的证明书真的可以被信任吗?说到底,证明书也就是普通的文件而已。不像货币那样,本身有着特殊的材质或者物理上的防伪措施。

    这么想是完全对的,因为实际上,认证机关所用的证书生成器说到底也就是一个软件而已,如果搞到这个软件,谁都可以发行证明书。所以说,在技术上,伪造证明书是非常简单的。所谓假的证明书,比如说有一个所谓的“比尔的证明书”,但是里面含有的公开密钥是史提芬的公开密钥。那么,别人发给比尔的信息,史蒂芬可以解密,反而比尔自己不能解密。

    这样看来,这个认证机关就至关重要了,认证机关的可信度,直接与证书的可信度挂钩,也就是与整个PKI机制的可信度息息相关。

     

    关于认证机关的权威性和可信度的问题,其实是一个社会基础设施建设的话题了。
    在很多国家认证机关都是由政府在主导建设,常常被视作一个社会性基础设施的一个环节。如同建设各种社会机构,比如医院,银行,学校等等。

    (译者案:日本关于这些基础概念的文章都写的非常通俗易懂,如何去让小白都可以去理解一个非常复杂的概念,这是日本人写技术文章特别专注的,很值得大家学习)

    本文转载自:https://zhuanlan.zhihu.com/p/30136885

    总结:

    安全套接层协议是由Netscape创建的,它用来保证在WEB服务器和浏览器间的数据被安全传输。
    协议使用一个第三方的证书局(CA)来验证传输的一方或双方的身份。下面是简单的描述它如何工作:
    1. 浏览器请求一个安全的页面(通过以https://开头)
    2. WEB服务器返回它的公钥和证书
    3. 浏览检查证书是由可信的机构颁发的(通过是可信的根CA),证书仍然有效并且证书与被访问的网站相关
    4. 浏览器使用公钥来加密一个随机的对称密钥,加上加密后的URL和其它加密后的http数据一起发回至服务器。
    5. WEB服务器使用私钥解密对称密钥,并用它来解密在浏览器上加密了的URL和http数据
    6. WEB服务器使用对称密钥加密请求的HTML文档和http数据并发回至浏览器
    7. 浏览器使用对称密钥解密HTML文档和http数据并展示给用户
  • 相关阅读:
    ES6 Promise的resolved深入理解
    npm 重点小结
    nodemon 基本配置与使用
    CSS 标准发布流程
    HTML表格基础详解
    <linux/init.h>,<linux/module.h>头文件不存在等问题的解决方法
    libcstl中的list没法插入自定义数据
    Linux下C编写基本的多线程socket服务器
    Linux下C连接MySql数据库
    C++实现最基本的LRUCache服务器缓存
  • 原文地址:https://www.cnblogs.com/huhyoung/p/13623997.html
Copyright © 2011-2022 走看看