数字证书是什么

CA

数字证书是一种在网络世界中用来验证身份的数字标识,个人,组织,机构在网络上进行交易或者提交账号密码时,需要认证对方是不是真的是你想要进行交流的对象,而不是骇客假冒的,从而避免交易信息,账号密码信息等被骇客窃取

概述

数字证书(CA)是什么

数字证书从本质上来说是一种电子文档,由证书授权中心(以下简称为CA中心所颁发的一种较为权威与公正的证书

用于确定网络上的个人,计算机和其它实体的真实身份,是在互联网通讯中标识通讯各方身份信息的一个数字认证,由于互联网的虚拟性,你无法确定和你进行交易的对象是否是你想要交易的对象,而不是黑客假冒的,举个栗子:

比如有人盗了你朋友的QQ号,假装你的朋友向你借钱,由于你无法确定对话那头是你朋友还是盗号的人,所以你可能会选择视频或者语音的方式来确认他的身份,从而知道向你借钱的不是你的朋友,而是黑客

Fake_Sever

其中,数字证书的作用就和你通过视频或者语音的方式来确认对方身份时的作用一样,用来确保对方的真实身份,不同的是,现实世界是通过身份证,长相,声音进行判断,网络则是通过数字证书进行判断

因此,简单来说数字证书就是“网络实体”的身份证,是用来在网络世界向对方证明 “你是谁” 的凭证

先对证书长什么样有个大概印象:

Win_Certification

正如首句所说,本质上是一种具有规定格式和内容的电子文档,此文档具有公信力,(举个栗子这么说)可以通过数字证书证明此Windows是微软公司的产品,不是别人假冒编写的盗版,也不是经过别人修改过的版本,是正规的。

(其实你每次下载的软件安装包也会包含它自己的数字证书和数字签名,如果数字签名正常就说明软件安装包正常,没有被黑客修改过,栗子往下看)

数字证书的原理

预备知识:密码学、数字签名

数字证书在你和你所拥有的公/私钥对之间建立了一种联系,即数字证书可以通过你所拥有的密钥对来唯一确定你的身份,也就是说,只要你有自己的数字证书,就可以用这个数字证书来证明是你自己。

这里面有个很重要的点,就是数字证书的颁发机构可以有很多,甚至你自己就可以成为CA中心,如果你需要具有公信力,人们都承认公正的数字证书,就要向国家认可的权威,可信,公正的第三方机构申请数字证书;如果只是小范围团体内传播信息,可以自己设立自己的CA中心(前提是你懂得如何发布数字证书),但是颁发的CA证书在社会上就不具有公信力,只在团体内部交流时使用

那么CA中心是如何颁发数字证书的呢后面会提到加密证书颁发方式

用户先自己生成密钥对,将公钥以及部分个人信息传送给一家CA认证中心,认证中心在确认是用户本人的请求之后之后,制作并颁发数字证书给用户,证书内包含了用户公钥,用户基本信息和其它一些基础信息,同时还附有认证中心的数字签名,当用户想证明自己公开密钥的合法性(即证明这个公钥是不是自己的)时,就可以提供这一数字证书

(证书的产生:认证中心把用户证书的基本信息做哈希算法,然后用自己的私钥对哈希值进行加密,生成签名,最后形成一个具有如下格式的电子文档)

![数字证书](./数字证书是什么/digital certificate.webp)

显然,到这里数字证书就生成了,但是有一个问题,按道理数字证书的格式应该都是一样的,那么CA中心的数字证书由谁来进行颁发和认证呢?

这种采用证书中的公钥对应的私钥进行签名的证书被称为自签名证书,意思是签名者和证书拥有者为同一人。您自己可以成为CA并颁发自己的证书,这些证书称为自签名证书,但出于商业目的,您的自签名证书将不受信任。只有已建立且知名的CA自签名证书才是可信的。CA的根证书始终是自签名的。

数字证书的作用

​ 是 为 了 安 全 !!

电子商务

​ 代表性的栗子就是 电子商务 ,基于互联网的电子商务系统技术使网上购物的顾客可以轻松获得 商家和企业的信息,但同时也增加了对某些敏感或有价值的数据被盗取和滥用的风险,比如最简单的账号密码订单等等。

​ 买方和卖方都必须对于在因特网上进行的一切金融交易运作都是真实可靠的,并且要使顾客、商家和企业等交易各方都具有绝对的信心,因而因特网(Internet)电子商务系统必须保证具有十分可靠的安全保密技术

​ 人们在感叹电子商务的巨大潜力的同时,不得不冷静地思考,在人与人互不见面的计算机互联网上进行交易和作业时,怎么才能保证交易的公正性和安全性,保证交易双方身份的真实性。那就是建立安全证书体系结构数字安全证书(CA)提供了一种在网上验证身份的方式。安全证书体制主要采用了公开密钥体制,其它还包括对称密钥加密、数字签名、数字信封等技术

​ 使用数字证书,通过运用对称和非对称密码体制等密码技术建立起一套严密的身份认证系统,从而保证:信息除发送方和接收方外不被其它人窃取;信息在传输过程中不被篡改;发送方能够通过数字证书来确认接收方的身份;发送方对于自己的信息不能抵赖。

​ CA中心采用的是以数字加密技术为核心的数字证书认证技术,通过数字证书,CA中心可以对互联网上所传输的各种信息进行加密、解密、数字签名与签名认证等各种处理,同时也能保障在数字传输的过程中不被不法分子所侵入,或者即使受到侵入也无法查看其中的内容。

简而言之,确保在网上进行交易时,交易的对象是真实存在的并且是你想要进行交易的对象,而不是假冒的,由CA中心来为你担保,持有CA证书的人就是你交易的对象

验证网站是否可信(仅针对HTTPS)

通常,我们如果访问某些敏感的网页(比如用户登录的页面),其协议都会使用 HTTPS 而不是 HTTP。因为 HTTP 协议是明文的,一旦有坏人在偷窥你的网络通讯,他/她就可以看到网络通讯的内容(比如你的密码、银行帐号、等);而 HTTPS 是加密的协议,可以保证你的传输过程中,坏蛋无法偷窥。
  但是,千万【不要】以为,HTTPS 协议有了加密,就可高枕无忧了。俺再举一个例子来说明,光有加密是不够滴。假设有一个坏人,搞了一个假的网银的站点,然后诱骗你上这个站点。假设你又比较单纯,一不留神,就把你的帐号,口令都输入进去了。那这个坏蛋的阴谋就得逞鸟。
  为了防止坏人这么干,HTTPS 协议除了有加密的机制,还有一套证书的机制。通过证书来确保,某个站点确实就是某个站点。
  有了证书之后,当你的浏览器在访问某个 HTTPS 网站时,会验证该站点上的 CA 证书(类似于验证介绍信的公章)。如果浏览器发现该证书没有问题(证书被某个根证书信任、证书上绑定的域名和该网站的域名一致、证书没有过期),那么页面就直接打开;否则的话,浏览器会给出一个警告,告诉你该网站的证书存在某某问题,是否继续访问该站点?为了形象起见,下面给出 IE 和 Firefox 的抓图:

IE_Certification

Firefox_Certification

大多数知名的网站,如果用了 HTTPS 协议,其证书都是可信的(也就不会出现上述警告)。所以,今后你如果上某个知名网站,发现浏览器跳出上述警告,你就要小心啦!

验证某文件是否可信(是否被篡改)

证书除了可以用来验证某个网站,还可以用来验证某个文件是否被篡改。具体是通过证书来制作文件的数字签名。制作数字签名的过程太专业,咱就不说了。后面专门告诉大家如何验证文件的数字签名。考虑到大多数人用 Windows 系统,俺就拿 Windows 的例子来说事儿。
  比如,俺手头有一个 Firefox 的安装文件(带有数字签名)。当俺查看该文件的属性,会看到如下的界面。眼神好的同学,会注意到到上面有个“数字签名”的标签页。如果没有出现这个标签页,就说明该文件没有附带数字签名。

Firefox_Setup_Files

选择该标签页,看到如下界面。
  顺便说一下,某些数字签名中没有包含“邮件地址”,那么这一项会显示“不可用”;同样的,某些数字签名没有包含“时间戳”,也会显示“不可用”。不要紧张,这里显示的“不可用”跟数字签名的有效性【没关系】。

Firefox_Setup_more

一般来说,签名列表中,有且仅有一个签名。选中它,点“详细信息”按钮。跳出如下界面:
  通常这个界面会显示一行字:“该数字签名正常”(图中红圈标出)。如果有这行字,就说明该文件从出厂到你手里,中途没有被篡改过(是原装滴、是纯洁滴)。

Firefox_Setup_normal_Certification

如果该文件被篡改过了(比如,感染了病毒、被注入木马),那么对话框会出现一个警告提示“该数字签名无效”(图中红圈标出)。界面如下:

Firefox_Setup_innormal_Certification

不论签名是否正常,你都可以点“查看证书”按钮。这时候,会跳出证书的对话框。如下:

Certification

Certification_more

从后一个界面,可以看到俺刚才说的证书信任链。图中的信任链有3层:
第1层是根证书(Thawte Premium Server CA)
第2层是 Thawte 专门用来签名的证书
第3层是 Mozilla 自己的证书

  目前大多数知名的公司(或组织机构),其发布的可执行文件(比如软件安装包、驱动程序、安全补丁),都带有数字签名。你可以自己去看一下。
  建议大伙儿在安装软件之前,都先看看是否有数字签名?如果有,就按照上述步骤验证一把。一旦数字签名是坏的,那可千万别装。

数字证书由谁颁发

数字证书由证书授权中心(CA中心)或者认证中心的“下级认证CA中心”颁发,CA中心是能向用户签发数字证书以确认用户身份的管理机构,也是数字证书发行的唯一机构,它在数字证书发行中充当担保的角色(认证中心的公共密钥必须是可靠的,认证中心必须公布其公共密钥或由更高级别的认证中心提供一个电子凭证来证明其公共密钥的有效性,后一种方法导致了多级别认证中心的出现)

当需要确认身份时,由他们来说,“是的,这个人就是他们所说的人,而我们,CA,验证,担保”

CA中心可以是民间团体,也可以是政府机构,由具有权威性和公正性的第三方信任机构担当,它的作用就像我们现实生活中颁发证件的公司,比如护照办理机构,也就是说CA中心不止有一个,可以有多个,但必须都是具有公信力的机构,被人们所信任

其实所有的公司都可以发布证书,我们自己也可以去注册一家公司来专门给别人发布证书。但是很明显,我们自己的专门发布证书的公司是不会被那些国际上的权威机构认可的,人家怎么知道你是不是个狗屁皮包公司?因此微软在它的操作系统中,并不会信任我们这个证书发布机构,当应用程序在检查证书的合法信的时候,一看证书的发布机构并不是操作系统所信任的发布机构,就会抛出错误信息。也就是说windows操作系统中不会预先安装好我们这个证书发布机构的证书,不信任我们这个发布机构。

不受信任的证书发布机构的危害

为什么一个证书发布机构受不受信任这么重要?我们举个例子。假设我们开了一个狗屁公司来为别人发布证书,并且我和微软有一腿,微软在他们的操作系统中把我设置为了受信任的证书发布机构。现在如果有个小公司叫Wicrosoft 花了10块钱让我为他们公司申请了一个证书,并且公司慢慢壮大,证书的应用范围也越来越广。然后有个奸商的公司JS Company想冒充Wicrosoft,于是给了我¥10000,让我为他们颁布一个证书,但是证书的名字(Subject)要写Wicrosoft,假如我为了这¥10000,真的把证书给了他们,那么他们以后就可以使用这个证书来冒充Wicrosoft了。

如果是一个优秀的证书发布机构,比如你要向他申请一个名字叫Wicrosoft的证书,它会让你提供很多资料证明你确实可以代表Wicrosoft这个公司,也就是说他回去核实你的身份。证书发布机构是要为他发布出的证书负法律责任的。

到这里,你可能会想,TMD,那我们自己就不能发布证书吗?就一定要花钱去申请?当然不是,我们自己也可以成立证书发布机构,但是需要通过一些安全认证等等,只是有点麻烦。另外,如果数字证书只是要在公司内部使用,公司可以自己给自己生成一个证书,在公司的所有机器上把这个证书设置为操作系统信任的证书发布机构的证书(这句话仔细看清楚,有点绕口),这样以后公司发布的证书在公司内部的所有机器上就可以通过验证了(在发布证书时,把这些证书的Issuer(发布机构)设置为我们自己的证书发布机构的证书的Subject(主题)就可以了)。但是这只限于内部应用,因为只有我们公司自己的机器上设置了信任我们自己这个所谓的证书发布机构,而其它机器上并没有事先信任我们这个证书发布机构,所以在其它机器上,我们发布的证书就无法通过安全验证。

数字证书的内容

下图显示了X.509版本3证书的内容:

单层数字证书

X.509版本3证书支持自X.509版本1以来支持的以下字段:

  • ***主题***:提供CA颁发证书的计算机,用户,网络设备或服务的名称。主题名称通常使用X.500或轻量级目录访问协议(LDAP)格式表示。

  • ***序列号***:为CA颁发的每个证书提供唯一标识符。

  • ***颁发者***:为颁发证书的CA提供专有名称。发行者名称通常使用X.500或LDAP格式表示。

  • ***有效自***:提供证书生效的日期和时间。

  • ***有效收件人***:提供证书不再有效的日期和时间。应用程序或服务评估证书的日期必须介于证书的Valid From和Valid To字段之间,以使证书有效。

  • ***公钥***:包含与证书关联的密钥对的公钥。

  • ***签名算法***:用于签署证书的算法。

  • ***签名值***:包含数字签名的位串。

除版本1字段外,X.509版本3证书还包括为证书提供附加功能和功能的扩展。这些扩展是可选的,并不一定包含在CA颁发的每个证书中:

  • 主题替代名称:主题可以以多种不同的格式呈现。例如,如果证书必须包含LDAP专有名称,电子邮件名称和用户主体名称(UPN)格式的用户帐户名,则可以通过添加证书中的电子邮件名称或UPN包含这些附加名称格式的主题备用名称扩展名。
  • CRL分发点(CDP): 当用户,服务或计算机提供证书时,应用程序或服务必须确定证书是否在其有效期到期之前被撤销。CDP扩展提供一个或多个URL,应用程序或服务可以从中检索证书吊销列表(CRL)。
  • 授权信息访问(AIA): 在应用程序或服务验证证书后,还必须评估颁发证书的CA的证书(也称为父CA)的撤销和有效性。AIA扩展提供一个或多个URL,应用程序或服务可以从中检索颁发的CA证书。
  • 增强型密钥用法(EKU): 此属性包括可用于证书的每个应用程序或服务的对象标识符(OID)。每个OID都是来自全球注册机构的唯一数字序列。
  • 证书策略: 描述组织在颁发证书之前验证证书请求者身份所采取的措施。OID用于表示验证过程,并且可以包括策略限定的URL,该URL完整地描述了验证身份所采取的措施。

数字证书的结构

CA在结构上是分层的。通常有三种类型的层次结构,它们由层数表示,也有三层以上的,至于为什么要这么多层,无非是安全和方便管理CA

单层/单层层次结构

单层数字证书

单层层次结构由一个CA组成。单个CA既是根CA又是颁发CA. 根CA是PKI的信任锚的术语。信任根CA的任何应用程序,用户或计算机都信任CA层次结构颁发的任何证书。颁发CA是向最终实体颁发证书的CA. 出于安全原因,这两个角色通常是分开的。使用单层层次结构时,它们将合并在一起。

两层层次结构

两层数字证书

双层层次结构是最常见的。在某些方面,它是一层和三层等级之间的折衷。在此设计中,有一个脱机的根CA,以及一个在线的从属颁发CA. 由于根CA和颁发CA角色是分开的,因此安全级别会提高。但更重要的是,根CA处于脱机状态,因此可以更好地保护根CA的私钥免受攻击。它还提高了可扩展性和灵活性。这是因为可以存在多个从根CA到CA的颁发CA. 这可以让你有CA在不同的地理位置,以及与不同的安全级别。

三层层次结构

三层数字证书

具体而言,两层层次结构之间的区别在于第二层位于根CA和颁发CA之间。此CA的放置可能有几个不同的原因。第一个原因是将第二层CA用作策略CA,换句话说,策略CA配置为向 “颁发CA” 颁发证书,该证书受其颁发的证书类型的限制。策略CA也可以仅用作管理边界。换句话说,您只从“策略CA”的下属颁发某些证书,并在颁发证书之前执行某种级别的验证,但该策略仅从管理而非技术角度强制执行。

添加第二层的另一个原因是,如果由于密钥泄露而需要撤销多个CA,则可以在第二层级别执行它,从而使其他“从根分支”可用。应该注意的是,此层次结构中的第二层CA可以像Root一样保持脱机状态。

信任链

由于CA的多层结构,会产生信任链

当您从商业CA(也就是要求具有公信力的CA中心)获得公钥证书时,您的证书将与证书链相关联,或者有时称为信任链。链中的证书数量取决于CA的层次结构。下图显示了双层CA的证书链。所有者/用户证书由颁发CA签名,颁发CA证书由根CA签名。根CA的证书是自签名的。

信任链

在用户通过浏览器或程序验证证书期间,浏览器需要通过查找上一个颁发CA或中间CA的公钥来验证签名。该过程将继续,直到达到根证书。根CA是自签名的,最后必须由浏览器信任。浏览器将所有知名的CA根证书保存在其信任库中。

浏览器的信任库中只会存有知名的根CA,颁发CA或者中间CA不会放在信任库中,因此浏览器在验证时,由下自上一直找到根CA,确保根CA是可信任的即可验证安全

其实多层次的CA结构中,颁发CA或中间CA的出现是为了根CA的安全和方便CA的管理,有了颁发CA或者中间CA,根CA可以脱机管理,从而保证根CA的私钥安全

验证终端实体证书

看一个浏览器验证终端数字证书的过程

终端实体证书(要验证的数字证书)的信任从证书路径回溯,通过从属 CA 直到根 CA。向 Web 浏览器或其他客户端呈现了终端实体证书时,它会尝试构建信任链。例如,它可能会检查证书的颁发者可分辨名称主题可分辨名称 是否与颁发 CA 证书的相应字段匹配。匹配将在层次结构上的每个后续级别继续进行,直到客户端到达其信任存储中包含的受信任根。

信任存储是浏览器或操作系统包含的受信任 CA 的库。对于私有 PKI,组织的 IT 部门必须确保每个浏览器或系统之前已将私有根 CA (即私人团体和组织自建的CA中心的自签名数字证书)添加到其信任存储中。否则将无法验证证书路径,导致客户端错误。

下图显示了在向浏览器提供终端实体 X.509 证书时,浏览器遵循的验证路径。请注意,终端实体证书缺乏签名颁发机构,仅用于对拥有该证书的实体进行身份验证。

信任链

浏览器检查终端实体证书。浏览器发现证书提供了来自从属 CA(级别 3)的签名作为其信任凭证。从属 CA 的证书必须包含在同一 PEM 文件中。或者,它们也可以位于包含构成信任链的证书的单独文件中。找到这些内容后,浏览器会检查从属 CA(级别 3)的证书,并发现它提供了来自从属 CA(级别 2)的签名。接下来,从属 CA(级别 2)提供了来自根 CA(级别 1)的签名作为其信任凭证。如果浏览器发现其信任存储中预装的私有根 CA 证书的副本,它会确认终端实体证书可信

通常,浏览器还会根据证书吊销列表 (CRL) 检查每个证书。已过期、已吊销或配置错误的证书将被拒绝,验证失败

数字证书的分类

1
从证书的用途来看,数字证书可分为**签名证书****加密证书**。签名证书主要用于对用户信息进行签名,以保证信息完整性和行为的不可抵赖;加密证书主要用于对用户传送信息进行加密,以保证信息的机密性。

签名证书

签名时使用,仅仅用来验证身份使用,其公钥和私钥均由A自己产生,并且由自己保管,CA不负责其保管任务。

CA负责的仅仅是给你颁发一个签名证书,证书里面包含有你的身份信息和用于验证的公钥(公钥就是你自己生成的密钥对里的那个公钥,CA不会给你生成),这样当别人验证签名(验签)时,可以通过数字证书来确认你是不是本人

签名证书

加密证书

加密证书在传递加密数据时使用,其私钥和公钥由CA产生,并由CA保管(存根)。

注意,加密证书的密钥对不是由你自己生成的,而是由CA产生(实际上不是CA,是KMC产生后交给CA),产生之后,将加密证书连同密钥对交给你,也就是说,加密密钥对在CA那边会存根一份,你自己保留一份,加密证书中存放的就是密钥对中的公钥,私钥不能外流

加密证书

这是割裂开的两个申请流程,实际上加密证书和签名证书可以同时申请,一个流程搞定

双证书申请

双证书申请

PKI中使用双证书、即双密钥,双密钥是指签名密钥对与加密密钥对,从本质上说,两个密钥对都是非对称密钥对,因此,都可以用来作非对称加解密,然而为什么需要双密钥呢?这必须从两个密钥的用法说起。
签名密钥对用于数据的完整性检测,保证防伪造与防抵赖,签名私钥的遗失,并不会影响对以前签名数据的验证,因此,签名私钥无须备份,因此,签名密钥不需要也不应该需要第三方来管理,完全由持有者自己产生;而加密密钥对用于数据的加密保护,若加密私钥遗失,将导致以前的加密数据无法解密,这在实际应用中是无法接受的,加密私钥应该由可信的第三方(即通常所说的CA)来备份,以保证加密数据的可用性,因此,加密密钥对可以由第三方来产生,并备份。
由于签名密钥与加密密钥的使用与管理上的不同,决定了双证书使用的合理性与必然性



参考

若链接失效请参考离线版

深入理解加密、解密、数字签名(签名证书、加密证书)的组成和数字证书—————

数字证书原理———

数字签名和数字证书的前世今生————————————————————————–

微软大法介绍数字证书—————————————-

数字签名是什么?———————————————————————————————

密码学笔记——————————————————————————————————

1.数字证书与证书颁发机构————————————–

2.什么是数字证书————————————————–

3.数字证书原理—————————————————–

CA层级结构———————————————————-

数字证书及 CA 的扫盲介绍————————————

双证书体系———————————————————–