数字证书(CA证书)是由可信任的第三方权威机构(CA中心)颁发给个人或企业用户,用来验证身份、数据签名、数据加密等操作。CA证书是整个公钥基础设施(PKI,Public Key Infrastructure)体系的核心,目前国内CA中心由国家密码管理局管理,基本上每个省都有一个CA中心,用来签发省内CA证书和提供相关应用。
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。目前,数字证书均采用X.509国际标准。数字证书的结构包含如下信息。
版本号:书所遵循的X.509标准的版本。
序列号:唯一标识证书且由证书颁发机构颁发的编号。
证书算法标识:证书颁发机构用来对数字证书进行签名的特定公钥算法的名称。
颁发者名称:实际颁发该证书的证书颁发机构的标识。
有效期:数字证书保持有效的时间段,并包含起始日期和过期日期。
使用者名称:数字证书所有者的姓名。
使用者公钥信息:与数字证书所有者关联的公钥以及与该公钥关联的特定公钥算法。
颁发者唯一标识符:可以用来唯一标识数字证书颁发者的信息。
使用者唯一标识符:可以用来唯一标识数字证书所有者的信息。
扩充信息:与证书的使用和处理有关的其他信息。
证书颁发机构的数字签名:使用证书算法标识符字段中指定的算法以及证书颁发机构的私钥进行的实际数字签名。
数字证书就是对公钥加上认证机构的数字签名所构成的。要验证公钥的数字签名,需要通过某种途径获取认证机构自身的合法公钥。下面以数字签名和散列算法的实际应用例,来说明数字证书的基本用途。
(1)Bob有两把钥匙,一把是公钥,另一把是私钥。
(2)Bob把公钥送给他的朋友们Craol、Alice每人一把。
(3)Alice要给Bob写一封保密的信。她写完后用Bob的公钥加密,就可以达到保密的效果,如图1所示。
图1 Alice信件加密
(4)Bob收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要Bob的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密,如图2所示。
图2 信件解密
(5)Bob给Alice回信,决定采用“签名”写完后先用散列函数,生成信件的摘要(Digest),如图3所示。
图3 生成信件摘要
(6)然后,Bob使用私钥,对这个摘要加密,生成“数字签名”(Signature),如图4所示。
图4 生成数字签名
(7)Bob将这个签名,附在信件下面,一起发给Susan,如图5所示。
图5 附签名信件
(8)Alice 收信后,取下数字签名,用 Bob 的公钥解密,得到信件的摘要。由此证明,这封信确实是Bob发出的,如图6所示。
图6 公钥解密
(9)Alice再对信件本身使用散列函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过,如图7所示。
图7 修改验证
(10)复杂的情况出现了。Craol想欺骗Alice,他偷偷使用了Susan的电脑,用自己的公钥换走了Bob的公钥。此时,Alice实际拥有的是Craol的公钥,但是还以为这是Bob的公钥。因此,Craol 就可以冒充 Bob,用自己的私钥做成“数字签名”写信给 Alice,让 Alice用假的Bob公钥进行解密。
(11)后来,Alice感觉不对劲,发现自己无法确定公钥是否真的属于Bob。她想到了一个办法,要求Bob去找“证书中心”(CA,Certificate Authority),为公钥做认证。证书中心用自己的私钥,对Bob的公钥和一些相关信息一起加密,生成“数字证书”(Digital Certificate),如图8所示。
图8 生成数字证书
(12)Bob拿到数字证书以后,就可以放心了。以后再给Alice写信,只要在签名的同时,再附上数字证书就可以了,如图9所示。
图9 附证书信件
(13)Alice收信后,用CA的公钥解开数字证书,就可以拿到Bob真实的公钥了,然后就能证明“数字签名”是否真的是Bob签的,如图10所示。
图10 确认签名
基于数字证书的安全认证如下。
认证是安全通信的前提,如果认证出问题,A不是和A想要聊天的人B在聊天,而是和一个C(假冒B)在聊天,则接下来所有的安全措施都是白搭。以目前常用的数字证书(Digital Certificate)认证为例。
CA(Certificate Agent)存放A、B数字证书,在数字证书里包含有各自的RSA公钥与加密算法。
A、B各自保管自己的RSA私钥与加密算法,RSA公钥与私钥类似锁与钥匙的关系,即RSA私钥加密,可以用RSA公钥解密,反过来亦是如此。
A与B安全通信认证过程如下。
(1)A向CA请求B的数字证书。
(2)CA把B的数字证书做输入参数,生成一个散列。
(3)CA用自己的私钥加密散列,生成一个数字签名(Digital Signature)
(4)CA把数字签名附在B的数字证书之后,即B的数字证书+CA数字签名,发送给A。
(5)A拥有CA的公钥(预装或离线方式获得),可以解密CA的数字签名(CA私钥加密),得到散列,同时对接收到的 B 的数字证书做散列运算,也得到一个散列,如果两个散列相等,则认为此证书安全可靠,在传输途中没有被篡改,称这个过程为数据完整性(Data Integrity)保护。
(6)A请求认证B,B用自己的私钥加密自己的身份信息,发送给A,由于A已经从CA处获得B的公钥,所以可以解密B的加密报文。既然公钥与私钥是一对一的关系,由于只有B自己知道私钥,以此逻辑推断,A通信的对象为真实的B。
(7)B认证A的过程类似。