成功的网络营销案例,谷歌seo服务商,漯河网站建设(千弘网络),wordpress goodstore来源#xff1a;客户端认证https服务端证书过程详解——证书链_huzhenv5的博客-CSDN博客_证书链认证过程 基本概念
证书
首先#xff0c;我们看看在wikipedia上对证书的定义#xff0c;In cryptography, a public key certificate (also known as a digital certificate o…来源客户端认证https服务端证书过程详解——证书链_huzhenv5的博客-CSDN博客_证书链认证过程 基本概念
证书
首先我们看看在wikipedia上对证书的定义In cryptography, a public key certificate (also known as a digital certificate or identity certificate) is an electronic document used to prove ownership of a public key.。可以这么说证书是用来认证公钥持有者的身份的电子文档防止第三方进行冒充。一个证书中包含了公钥、持有者信息、证明证书内容有效的签名以及证书有效期还有一些其他额外信息。
比如一个证书详细信息的截图 CA
我们用证书来认证公钥持有者的身份那证书是怎么来的呢又该怎么认证证书呢这涉及到一个称之为PKI(Public key certificate)的规范体系包含了数字证书公钥管理以及验证等技术详细可以参考https://en.wikipedia.org/wiki/Public_key_certificate 我们这里只是简单介绍一下概念。在阮老师的文章中提到证书要由证书中心(Certificate authority简称CA)签发的同样参考Wikipedia上的概念In cryptography, a certificate authority or certification authority (CA) is an entity that issues digital certificates. (https://en.wikipedia.org/wiki/Certificate_authority) 简单来说CA就是签发电子证书的实体。
Signing Verification
证书的签发(Signing)和认证(Verification)的过程 这两个过程也是基于公钥与私钥的签发和认证的过程跟传输信息过程中的加密解密过程非常类似。签名密文(Signature)是一个重要凭证Signature与签发人的公钥一同传输可以避免中间人在获取证书时对证书内容的篡改。参考http://blog.torchz.net/security/2014/12/23/security-ca-chain-of-trust.html 。
签发证书的步骤
Signing阶段首先撰写证书的元信息签发人(Issuer)、地址、签发时间、过期失效等当然这些信息中还包含证书持有者(owner)的基本信息例如owner的DN(DNS Name即证书生效的域名)owner的公钥等基本信息。通过Issuer(CA)的证书指定的Hash算法将信息摘要提取出来Hash摘要通过Issuer(CA)私钥进行非对称加密生成一个签名密文将签名密文attach到文件证书上使之变成一个签名过的证书。
验证证书的步骤
Verification阶段浏览器获得之前签发的证书将其解压后分别获得“元数据”和“签名密文”将Issuer(CA)的证书指定的Hash算法应用到“元数据”获取摘要A将签名密文通过Issuer(CA)的公钥解密获得摘要B。比对摘要A和摘要B如果匹配则说明这个证书是被CA验证过合法证书里面的公钥等信息是可信的。
在Verification阶段解密Signature获得摘要需要通过签发者(Issuer)的公钥又该如何获得这个公钥同时确保这个公钥是有效的呢就是下面的证书链的内容
证书链
实例
在Chrome上任意打开一个支持HTTPS的网站例如 https://www.baidu.com/ 打开开发者工具点开Security栏 点开证书路径查看证书信息如下 我们继续探究baidu使用的HTTPS证书除了HTTPS使用的 baidu.com 证书向上还有两级证书证书有3类
end-user baidu.com 包含用来加密传输数据的公钥的证书是HTTPS中使用的证书intermediatesCA用来认证公钥持有者身份的证书即确认HTTPS使用的end-user证书是属于baidu.com的证书。这类intermediates证书甚至可以有很多级。root用来认证intermediates证书是合法证书的证书。
简单来说end-user证书上面几级证书都是为了保证end-user证书未被篡改保证是CA签发的合法证书进而保证end-user证书中的公钥未被篡改。
CA组织
除了end-user之外证书被分为root Certificates和intermediates Certificates。相应地CA也分了两种类型root CAs 和 intermediates CAs。首先CA的组织结构是一个树结构一个root CAs下面包含多个intermediates CAs而intermediates又可以包含多个intermediates CAs。root CAs 和 intermediates CAs都可以颁发证书给用户颁发的证书分别是root Certificates和intermediates Certificates最终用户用来认证公钥的证书则被称为end-user Certificates。 end-user certificates intermediates certificates
我们使用end-user certificates来确保加密传输数据的公钥(public key)不被篡改而又如何确保end-user certificates的合法性呢这个认证过程跟公钥的认证过程类似首先获取颁布end-user certificates的CA的证书然后验证end-user certificates的signature。一般来说root CAs不会直接颁布end-user certificates的而是授权给多个二级CA而二级CA又可以授权给多个三级CA这些中间的CA就是intermediates CAs它们才会颁布end-user certificates。
但是intermediates certificates的可靠性又如何保证呢这就是涉及到证书链Certificate Chain 链式向上验证证书直到Root Certificates如下图 root certificates
那Root Certificates又是如何来的呢根据 https://support.dnsimple.com/articles/what-is-ssl-certificate-chain/ 这篇文章的说法除了可以下载安装之外device例如浏览器操作系统都会内置一些root certificates称之为trusted root certificateshttps://support.apple.com/en-us/HT202858 在Apple的官网上可以看到这个列表有各个操作版本直接内置的Root Certificates。windows系统查看方式可以看这篇文章windows查看系统证书
最后一个问题为什么需要证书链这么麻烦的流程Root CA为什么不直接颁发证书而是要搞那么多中间层级呢找了一下godaddy官方给了一个答案为了确保root certificates的绝对安全性。我们可以想想如果根证书的私钥泄露了所有使用该证书认证的设备都将变得不安全影响太大所以通过intermediates certificates给网站颁发证书假如某个intermediates certificates的私钥泄露了只会影响这一个intermediates certificates颁发的证书的信用影响要小很多。https://sg.godaddy.com/en/help/what-is-an-intermediate-certificate-868 将根证书隔离地越严格越好。 其他
了解了这个证书体系之后才明白为什么百度/google这种公司也需要向第三方购买签名证书了自签root证书推广起来非常困难这也导致目前的证书市场基本上被 Symantec(VeriSign/GeoTrust) / Comodo / GoDaddy 垄断。百度使用的是Versigngoogle使用的是GeoTrust。目前HTTPS的推广已经不可避免也已经有一些公益组织开始提供免费、自动化、开放的证书签发服务例如Let’s Encrypt 。