美文网首页
HTTPS TLS握手中客户端验证证书

HTTPS TLS握手中客户端验证证书

作者: 陪你宿醉的人注定无法送你回家 | 来源:发表于2022-05-18 21:19 被阅读0次

数字证书和 CA 机构

在说校验数字证书是否可信的过程前,我们先来看看数字证书是什么,⼀个数字证书通常包含了:

    公钥;

    持有者信息;

    证书认证机构(CA)的信息;

    CA 对这份⽂件的数字签名及使⽤的算法;

    证书有效期;

还有⼀些其他额外信息;

那数字证书的作⽤,是⽤来认证公钥持有者的身份,以防⽌第三⽅进⾏冒充。说简单些,证书就是⽤来告诉客户端,该服务端是否是合法的,因为只有证书合法,才代表服务端身份是可信的。我们⽤证书来认证公钥持有者的身份(服务端的身份),那证书⼜是怎么来的?⼜该怎么认证证书呢?为了让服务端的公钥被⼤家信任,服务端的证书都是由 CA (Certificate Authority,证书认证机构)签名的,CA就是⽹络世界⾥的公安局、公证中⼼,具有极⾼的可信度,所以由它来给各个公钥签名,信任的⼀⽅签发的证书,那必然证书也是被信任的。之所以要签名,是因为签名的作⽤可以避免中间⼈在获取证书时对证书内容的篡改。

如下图图所示,为数字证书签发和验证流程:

数字证书签发和验证流

CA 签发证书的过程,如上图左边部分:

⾸先 CA 会把持有者的公钥、⽤途、颁发者、有效时间等信息打成⼀个包,然后对这些信息进⾏ Hash 计算,得到⼀个 Hash 值;然后 CA 会使⽤⾃⼰的私钥将该 Hash 值加密,⽣成 Certificate Signature,也就是 CA 对证书做了签名;最后将 Certificate Signature 添加在⽂件证书上,形成数字证书;

客户端校验服务端的数字证书的过程,如上图右边部分:

⾸先客户端会使⽤同样的 Hash 算法获取该证书的 Hash 值 H1;通常浏览器和操作系统中集成了 CA 的公钥信息,浏览器收到证书后可以使⽤ CA 的公钥解密 CertificateSignature 内容,得到⼀个 Hash 值 H2 ;最后⽐较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。

证书链

但事实上,证书的验证过程中还存在⼀个证书信任链的问题,因为我们向 CA 申请的证书⼀般不是根证书签发的,⽽是由中间证书签发的,⽐如百度的证书,从下图你可以看到,证书的层级有三级:

对于这种三级层级关系的证书的验证过程如下:

    客户端收到 baidu.com 的证书后,发现这个证书的签发者不是根证书,就⽆法根据本地已有的根证书中的公钥去验证 baidu.com 证书是否可信。于是,客户端根据 baidu.com 证书中的签发者,找到该证书的颁发机构是 “GlobalSign Organization Validation CA - SHA256 - G2”,然后向 CA 请求该中间证书。

    请求到证书后发现 “GlobalSign Organization Validation CA - SHA256 - G2” 证书是由 “GlobalSign Root CA”签发的,由于 “GlobalSign Root CA” 没有再上级签发机构,说明它是根证书,也就是⾃签证书。应⽤软件会检查此证书有否已预载于根证书清单上,如果有,则可以利⽤根证书中的公钥去验证 “GlobalSignOrganization Validation CA - SHA256 - G2” 证书,如果发现验证通过,就认为该中间证书是可信的。

    “GlobalSign Organization Validation CA - SHA256 - G2” 证书被信任后,可以使⽤ “GlobalSign OrganizationValidation CA - SHA256 - G2” 证书中的公钥去验证 baidu.com 证书的可信性,如果验证通过,就可以信任baidu.com 证书。

在这四个步骤中,最开始客户端只信任根证书 GlobalSign Root CA 证书的,然后 “GlobalSign Root CA” 证书信任“GlobalSign Organization Validation CA - SHA256 - G2” 证书,⽽ “GlobalSign Organization Validation CA -SHA256 - G2” 证书⼜信任 baidu.com 证书,于是客户端也信任 baidu.com 证书。

总括来说,由于⽤户信任 GlobalSign,所以由 GlobalSign 所担保的 baidu.com 可以被信任,另外由于⽤户信任操作系统或浏览器的软件商,所以由软件商预载了根证书的 GlobalSign 都可被信任。

这样的⼀层层地验证就构成了⼀条信任链路,整个证书信任链验证流程如下图所示:

相关文章

  • HTTPS TLS握手中客户端验证证书

    数字证书和CA机构 在说校验数字证书是否可信的过程前,我们先来看看数字证书是什么,⼀个数字证书通常包含了: 公钥...

  • redis.conf详解之tls-auth-clients

    用法 redis建立TLS连接时默认是双向验证开启该配置项,可控制是否验证客户端证书。 用途 tls-auth-c...

  • HTTPS & SSL(TLS)

    通过 HTTPS 和 SSL 确保安全HTTPS加密过程和TLS证书验证 HTTPS HTTPS的加密过程: 客户...

  • 网络

    认证 ssl/tls 1.客户端证书认证 (TLS双向认证) CA #证书认证2.bearerToken3.Se...

  • HTTPS加密过程和TLS证书验证

    前言 大家都知道,苹果在2016年WWDC上宣布了关于应用需要强制使用HTTPS的规定。这也算是个好消息吧,虽然开...

  • https完全剖析

    SSL/TLS协议运行机制的概述 图解SSL/TLS协议 https 客户端(即浏览器)是如何校验公钥证书合法性的...

  • iOS https 相应配置

    1.通过绕过证书认证的方法进行请求 客户端要实现 https 验证 1.系统验证2.本地证书验证 NSURLCon...

  • [接口测试_B] 10 requests处理SSL证书验证

    requests支持的证书验证方式 SSL证书验证 客户端证书验证 CA证书验证 SSL证书验证 来个大写的问题,...

  • HTTPS 和 HTTP的区别

    HTTPS 是 HTTP 建立在 SSL/TLS 安全协议上的。 在 iOS 中,客户端本地会存放着 CA 证书,...

  • Go 实现 TLS server 及client (1, TLS

    本系列文章包含以下内容 单向TLS不认证,客户端不检查服务端证书的有效性 单向TLS认证,客户端检查服务端证书的有...

网友评论

      本文标题:HTTPS TLS握手中客户端验证证书

      本文链接:https://www.haomeiwen.com/subject/gscourtx.html