什么是CA?
所谓CA(Certificate Authority)认证中心。它是采用PKI(Public Key Infrastructure)公开密钥基础架构技术。专门提供网络身份认证服务。CA可以是民间团体。也可以是政府机构。负责签发和管理数字证书。且具有权威性和公正性的第三方信任机构。它的作用就像我们现实生活中颁发证件的公司。如护照办理机构。比较权威的认证中心有赛门铁克(Symantec)。中国金融认证中心(CFCA)。GeoTrust。GlobalSign等。
什么是CA证书?
CA证书顾名思义就是由CA(Certification Authority)机构发布的数字证书。用于证明网络中对端的身份是否合法。HTTPS协议为CA证书提供了最佳应用场景。如今安装CA证书已经成为网站建设的标配元素。CA证书的关注度正在不断增加。
什么是根证书?
根证书是未被签名的或自签名的CA证书。简单理解根证书是CA认证中心给自己颁发的CA证书。是信任链的起始点。安装根证书意味着对这个CA认证中心的绝对信任。主流CA认证中心的根证书都被预安装在各个操作系统。浏览器可以直接使用操作系统中的根证书。也有部分浏览器独立维护根证书。火狐浏览器便是独立维护自己的根证书。
CA证书类型
根据不同的验证级别。分为以下三类:
域名型SSL(DV SSL):证书审核最为宽松。域名验证型的证书。只需验证网站域名所有权的简易型证书。数小时内即可颁发证书。浏览器有https和小锁标示。能起到最基本的信息传输加密功能。验证最基本的域名管理权 。适用个人。小微企业等网站。
企业型SSL(OV SSL):企业组织验证类型的证书。申请此证书需验证域名所有权和申请单位的真实身份。解决在线信任问题。
增强型SSL(EV SSL):审核最为严格的证书。申请EV型证书会严格验证域名所有权和申请单位的真实身份。且EV型证书在大部分浏览器中能显示绿色地址栏。有效解决在线信任和网站被假冒问题。帮助网站提升形象。用户更信赖。
根据保护域名的数量需求。分为以下三类:
单域名版:只保护一个域名。例如 b.a.com 或者 d.a.com 之类的单个域名。
多域名版:一张证书可以保护多个域名。例如同时保护 a.b.com 。 b.c.com。 abc.abc.com 等。
通配符版:一张证书保护同一个主域名下同一级的所有子域名。不限个数。形如X.a.com。便可以保护a.a.com。b.a.com。c.a.com等等。但是不能保护a.a.a.com。虽然都同属于一个一级域名。但是这个子域名属于a.com域名下的3级子域名。而X.a.com证书。只能保护a.com域名下的所有2级域名。3级。4级等其他级别的域名都不会进行保护。
CA证书结构
证书主体(证书主体包含版本号。序列号。颁发者。颁发者唯一身份信息(可选项)。有效期开始日期。有效期截止日期。申请者信息。申请者提供的公钥。公钥算法。签名算法。主题。主题公钥信息等信息。这些内容是明文信息。不需要加密)数字签名
算法
开始下面内容之前。我们先了解几个概念。
对称加密:同一个密钥可以同时用作信息的加密和解密。这种加密方法称为对称加密。也称为单密钥加密。非对称加密:两个不同的秘钥。一个称为公钥。可对外暴露。一个称为私钥。不可对外暴露。使用公钥对信息加密后。必须使用秘钥解密。反之。使用秘钥对信息加密后。必须使用公钥解密。哈希算法:简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。这个过程是不可逆的。无法通过哈希值反过来推算原消息。
CA证书生成过程以及认证过程
向CA认证中心申请CA证书。申请者需提前生成一对用于非对称加密的公钥和私钥。把公钥。申请者的信息。域名信息。签名哈希算法。签名算法等给到CA认证中心。用于非对称加密的私钥不能对外公开。CA认证中心通过线上。线下方式。确认申请者信息的可靠性。如果申请者的申请被审核通过。CA认证中心按照根证书中的签名哈希算法。获取申请者的CA证书主体的哈希值。再按照根证书中的签名算法。使用根证书中公钥对应的秘钥对哈希值进行加密。加密后的值就是数字签名。这个过程就是签名过程。签名后的证书便会被认可。申请者证书被签名后。便可安装到服务器上。当客户端发起HTTPS请求时。会先发起SSL/TLS认证。服务端接收到认证请求后。把服务端安装的CA证书发送到客户端。客户端收到CA证书后。按照根证书中的签名算法。用根证书中的公钥对CA证书的签名密码。获取CA证书主体加密前的哈希值(我们标记为Hash1)。同时按照根证书中的签名哈希算法。获取CA证书主体的哈希值(我们标记为Hash2)。如果两个哈希值相同(Hash1等于Hash2)以及域名信息可以匹配。表示CA证书是可信的。CA证书中的公钥是安全的。客户端生成一个随机字符串。客户端使用CA证书中的公钥对随机字符串加密。把加密后的信息传给服务端。服务端使用CA证书中公钥对应的秘钥(秘钥只有服务器知晓。必须保密)解密。得到随机字符串。客户端和服务端使用这个随机字符串作为对称加密的秘钥。对双方需要发送的数据加密后再发送。