HTTPS 用到的数字证书是怎么一回事?

580 阅读7分钟

我正在参加「掘金·启航计划」

证书

说到证书,大家应该都不会陌生,从小学到大学毕业,再到工作,我们会接触到各种各样的证书。比如毕业证书、英语、计算机等级证书,还有身份证、驾驶证,等等很多很多。这些各门各类的证书都有同样的功能:证明某人或机构具有某种能力或某种身份。

比如毕业证表示某人从某学校结业,英语等级证书证明了某人的英语水平达到某等级,经营许可证证明了某企业经营许可及范围,等等诸如此类。那我们凭什么信任这些证书上所证明的内容呢?答案就是这些证书背后的颁发机构。比如毕业证书由学校颁发,身份证由政府公安机关签发,这些机构的信用等级都非常高。

image.png

所以,当你拥有某个证书,就基本证明你具备某能力或身份。因为证书的这个特点,所以会有「聪明人」会找非官方证书颁发机构颁发给自己不具备某项能力或身份的证书,俗称办假证。所以这些证书颁发机构还需要能辨别真伪,比如某人说他有某机构的证书,那么此机构有义务能判断整个证书的真伪。这就是我们社会生活中的证书和证书签发机构。

数字证书

社会上的证书可以认证身份和能力,而数字证书一般用来认证身份,作用是比较接近的。像学历证书一般都会有实体、纸质证书,上面会写明认证信息,那数字证书是怎样的一种形式呢?那就要从非对称加密开始说起。

非对称加密

非对称加密公钥私钥两个密钥,一般加解密是使用公钥加密,私钥解密。

image.png

不过反过来用私钥加密,公钥也是可以解密的,这个过程称之为数字签名

image.png

数字证书的签发机构正是用非对称加密来给颁发的证书签名,这个签名就相当于大家毕业证书上的校长签名。只看这两句话可能比较晦涩,大家不一定能听懂,我来给大家用一个简单的例子演示一下。

如果对加密、Hash知识不了解的同学,可以先了解下这一块,这会对了解数字证书非常有帮助。有需要的可以阅读 什么是对称、非对称加密?Hash是加密么?这篇文章。多说一句,如果不了解加密、Hash 的一定要先了解,非常重要!非常重要!。

大话数字证书

生活中,我们可以靠电话、视频等等工具、手段去识别对方的身份。但是网络中不行,在HTTP的世界里,相互通信都是明文,任何人都可以拦截你们所发送或接收的消息,可以随意篡改,你无法确认在网络上收到的消息是不是你真正想要的,所以你在收到消息时需要让对方提供一个证书来证明消息的所属身份。Here we go!

小伙Tony要去购物网站TheMall购物,网站为了自己不被钓鱼网站冒充就申请了数字证书,然后他们之间的沟通就是这样的:

TonyTheMall说:“我要买电脑”,网站收到消息后就给对方发送商品信息,为了让对方能验证自己的身份,还把自己的证书发过去。 image.png

数字证书大概什么样

我们来看看这个证书包到底含了哪些内容,它为什么就能证明自己的身份。 我们首先看看自己的身份证包含的内容:

  • 正面:姓名、性别、生日、住址、照片、身份证号
  • 反面:发证单位、有效期

其实信息就两种,正面是自己的基本信息,反面是证件的签发机构,而数字证书也是由这两种信息组成。

image.png 身份证信息:基本信息 + 签发机构

数字证书:基本信息 + signature + public-key + 签发机构

  • Signature是签名信息,就相当于是身份证上某某公安局,它使用签发机构私钥TheMall证书里的基本信息(的 Hash)加密后生成的数据
  • public-key签发机构的公钥
  • issuer是证书签发机构证书

base info就是TheMall的基本信息,比如主机名、公司名称、地址、邮箱、等等,这些就类似身份证的正面。而Signaturepublic-keyissuer则相当于身份证的反面。它们共同说明了他们的签发机构是什么,怎么验证签发机构,这就是数字证书的样子。

Tony收到这样的消息「消息+证书」,那他就要校验这个消息是否是TheMall发给他的。那就要根据消息里的证书来判断,主要判断两点:

  1. 这个证书是不是属于TheMall
  2. 如果是,那它是不是伪造的,是不是假证

下面我们就来看看,数字证书如何验证的具体步骤。

  1. Hash算法计算出基本信息的指纹,得到数据encode-hash
  2. public-key解密签名信息,得到decode-signature
  3. 匹配encode-hashdecode-signature,如果相同,校验通过。
  4. 校验主机名、有效性、是否吊销,是否过期等信息。

关于非对称加密、Hash 有需要可以阅读什么是对称、非对称加密?Hash是加密么?

如果以上步骤校验通过,则证明证书确实是由Certificate-MARS颁发的,但是这个Certificate-MARS是否是合法我们还需要另外验证。比如,Certificate-MARS是由Certificate-SUN颁发的,那我们需要重新走以上前面的验证流程,去验证Certificate-MARS是否合法。

啥?还要这样?我验证一个证书是否合法,就需要去判断它得签发机构是否合法,那我如果需要验证签发机构得合法性是不是就得判断签发机构的签发机构是否合法?那后面是不是还得验证签发机构的签发机构的签发机构是否合法?这样不就没完没了了吗?

是的,逻辑上确实是这样,所以实际操作肯定需要一个终点,能够让我们无条件信任,结束这个链条。一般在签发机构的签发机构节点上就是我们的终点,这个我们无条件信任的证书有个名字,叫根证书

根证书

image.png 根证书是CA认证中心(Certificate Authority)给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。不管是手机还是电脑操作系统,从系统安装完成开始就自带很多根证书,这些证书都是被操作系统信任的。用户在之后也可以安装额外的根证书,但是需要注意,一旦安装根证书就表示无条件信任。如果这个根证书作恶是没有办法防御的,所以大多操作系统对于手动安装根证书都会有很多限制和风险提示。

image.png

接上文校验流程,Tony校验Certificate-MARSCertificate-SUN这两个签发机构证书如果都通过,那说明TheMall发过来的Computer info消息是没有被篡改的,反之校验失败,中断通信。校验证书的过程实际校验的是一个证书链。

认识数字证书

image.png

这就是我们实际看到的证书信息,上面我们讨论校验过程时,所提到的信息在图中都可以找得到。以前大家可能不清楚这些信息到底是干嘛的,全文看下来之后应该能有所收获吧!

最后,希望这篇文章能帮助大家了解什么数字证书,它有什么用。如果文中有讲得不对的地方,也可以留言沟通,谢谢!