分享

PKI的最后一公里——数字证书和CA

 吴雨虹2kzpi83a 2020-05-02

对于一直看我发布的密码学系列文章的朋友,应该知道这些文章都是有顺序关联的,基本上每一篇的技术主题都是以前一篇的主题作为基础,整体上也契合密码技术发展的过程。今天介绍的数字证书,就是在数字签名基础上发展起来的。

对于数字证书这个概念,相信做开发的朋友或多或少都接触过。最熟悉的应用场景可能就是SSL登录和网银证书应用了。从字面上看很好懂:就是数字化的证书。但要真正理解它,还得从数字签名说起。上一篇介绍数字签名时说过,验证签名时使用签名者的公钥解密数据,以确定签名者行为的不可否认性,所以在这里公钥就等同于身份标识。就像上一篇例子里,小丽用小明的公钥验证成功,就表示了签名行为确实是小明做的。但这里其实还缺少重要的一环:如何认定公钥持有者身份的真实性?。上文例子隐藏了一个前提,即由于小丽认识小明,事先确认了用来验证的公钥就是小明本人的。但在实际的应用中,互联网上签名者和验证者往往都不认识对方,验证者没有办仅凭公钥来判断网络那一头签名者的真实身份,因为公钥只是一段数字,谁都可以拥有,它无法自证持有者的身份。因此,迫切需要一个机制实现通过公钥确认持有者身份......于是一声惊雷,数字证书应运而生了。

数字证书就是网络世界的身份证明。它把用户的公钥和用户的身份捆绑在一起,实现了“见钥即见人”。用户的身份真实性是经过认证的,由于身份不能用户自证,只能通过第三方来认证,因此数字证书都是第三方公信机构颁发的,这个第三方机构中文大名叫“电子认证服务机构”或“证书颁发机构”,它更为人所熟悉名字就是CA(英文全称Certificate Authority)。CA对用户身份进行认证,并颁发数字证书证明其身份。而社会公众信任CA,也就信任CA颁发的证书,最终信任了证书持有用户的身份,完整的信任链就这样建立起来。

从技术上讲,数字证书的申请颁发过程大体如下:

l 准备申请证书的用户将身份信息提交给CA机构;

l CA机构对用户的身份信息进行认证。认证可以线下也可以线上。线下为传统方式,用户需要当面提交个人身份证、企业机构代码证等材料,CA机构根据材料审核认证用户身份;线上则是用户通过网络提供相关资料电子版,CA机构与公安、银行、电信运营商等第三方合作,采用面部活体识别、银行卡信息验证、手机号码验证等方式完成身份认证;

l 申请程序在用户端生成公私钥对,公钥提交给CA,私钥用户自己保留;

l CA机构将用户公钥和身份信息封装在一起,并用自己的私钥对封装的数据签名;

l CA机构将公钥、身份信息、签名结果封装,生成了最终的数字证书,并返回给用户。

从上面的过程可以看出,CA机构对它所颁发证书的背书也是通过数字签名实现的。用户通过对签名的验证,可以确认证书来源的真实性和完整性。

在实际应用中,大部分CA机构不会直接签发证书,而是建立下属CA机构,并为其签发证书,再由下属机构为用户签发证书。有时,下属机构又有自己的下属机构,依次类推,最终建立起一条CA的证书链,在链条上的每一级CA的都有自己的证书,其可信赖性来源于上级CA(通过数字签名实现),通过逐级向上,最后都可以溯源到处于顶级的CA机构。而顶级CA机构的证书是自签发的,因为没有上级CA再给它签发证书。它的可信赖性都来源于社会公信力,这也就是为什么第三方CA都是由商誉好的大型公司、国有企业或政府部门投资建立的。目前我国持有工信部颁发的电子认证服务许可证的CA机构一共有37家,它们可以向社会提供合法有效的第三方电子认证服务。从此之外,还有很多企业(比如几大国有银行)、单位内部建立的CA机构,服务其内部业务应用。

证书一般是以USB Key为载体形式,即证书及其私钥都存储在USB Key中。USB Key中自带芯片和COS,因此凡是使用私钥进行的运算,都是在USB Key中完成,密码界里有句俗话“私钥永远不出Key”,就是这个意思。我们在使用USB Key里的证书时,先得将Key插入电脑,还需要输入口令,进行验证。这就是所谓的“双因素认证”,和用银行卡取钱一样,同时需要卡和密码。由于USB Key的这些安全措施,再加上外形小巧,便于携带,成本低廉,在PC时代是占统治地位的密码安全工具。当然,随着移动应用的兴起和身份验证技术的进步,USB Key不再是证书载体的唯一选择,但仍然是主流工具之一。

USBKEY.jpg

根据证书密钥算法的不同,可以将证书分为RSA证书和SM2证书。打开IE浏览器,通过选择“工具”——“Internet选项”——“内容”——“证书”,可以看到Windows里证书的情况。其中,“个人”选项卡里的证书就是你自己的证书,有对应的私钥,可以用来解密和签名。要说明的是,如果使用的是SM2证书,因为Windows平台还没有提供相关原生接口,所以可能显示不出来;“其他人”是别人的证书,只有公钥,可以用来加密和验证;“受信任的根证书颁发机构”里就是Windows信任CA的证书。如果你信任一个CA,你可以把它的证书安装在这里面,这样由以这个CA证书为顶级的证书链的所有证书,在这台Windows上都是被信任的。可以看到,微软在这里面已经里预装了很多CA机构的证书。所以,如果你的软件或控件是用这些CA机构或其分支机构签发的证书签过名,那在Windows里使用这些软和控件就比较方便,被拦截的可能性大幅度降低。“中级证书颁发机构”就是非顶级CA机构的证书。其他操作系统平台的证书信任机制也与此类似。

CA机构和数字证书出现,补齐了公钥基础设施体系(PKI)的最后一块短板。其意义不仅是解决了公钥用户身份认证的问题,而且为加密与签名提供了一种更加容易、更加方便的方法。比起单纯的公私钥对,数字证书更易理解和接受,与用户的交互界面更加友好。从此,在实际中一般都是使用证书而不是密钥。这一点,对于业务系统结合开发尤其关键。

关于CA和数字证书的知识点是很庞杂的,今天只是介绍一些主要方面,在后面的文章中会讨论更多相关内容。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多