当我们从网上下载软件时,有些软件会有软件发布者的官方签名。计算机能够验证这些签名的有效性,我们可以通过软件的签名确定该软件是否被修改过,以及是否是官方的签名。
计算机在验证软件的签名是否有效时,会使用本地存储的可信任证书。这些证书是系统自带的,它们常常是受信任的根CA证书,有的也包括受信任的中级CA证书。所谓根CA,是指为其他CA的证书签名,而自己的证书由自己签名的CA。中级CA证书由其他CA(如根CA)签名。图2-26给出了Windows系统自带的根CA证书截图。
图2-26 Windows系统自带的根CA证书列表
下面,我们通过一个具体的例子,来学习一下如何查看文件的签名,如何识别签名是否有效,以及了解Windows系统验证签名的过程。假如在Windows系统上我们从网上下载了Firefox安装程序。以下是操作过程及说明:
(1)查看文件签名是否有效。
右键单击Firefox安装程序,打开其属性对话框,选择“数字签名”标签,如图2-27所示。然后选择签名列表中的条目,单击“详细信息”按钮。稍微等待一段时间(时间长短与计算机的计算速度有关,慢的可能要等几秒钟或更长时间)后,弹出“数字签名详细信息”对话框,其中显示此数字签名正常,同时显示签名人是“Mozilla Corporation”,如图2-28所示。表明这个软件包是Mozilla公司签名的,并且没有被其他人修改过。 (2)系统验证签名的过程。
图2-27 文件的数字签名标签
图2-28 数字签名详细信息(www.daowen.com)
在(1)中,当单击“详细信息”按钮时,系统开始验证签名,当弹出如图2-28所示“数字签名详细信息”对话框时,验证过程结束。那么系统到底是如何验证签名的呢?
单击图2-28中的“查看证书”按钮,弹出“证书”对话框,其中显示出证书的目的,以及证书的所有者和颁发者(也即签名者),如图2-29所示。
选择对话框中的“证书路径”标签,显示出证书路径(即证书链),如图2-30所示。这个证书路径的含义是,从上往下,上一个证书中的公钥验证下一个证书的有效性。之所以能够这样验证,是因为,与“DigiCert”证书中的公钥对应的私钥,对“DigiCert Assured ID Code Signing CA-1”证书进行了签名;与“DigiCert Assured ID Code Signing CA-1”证书中的公钥对应的私钥,对“Mozilla Corporation”证书进行了签名。其中,“DigiCert”证书是受信任的根CA证书,可以在图2-26的列表中找到它,系统无条件地信任这个证书中的公钥。
图2-29 签名的证书
图2-30 证书路径(证书链)
下面先让我们查看一下是否真的可以在系统中找到这个“DigiCert”证书。先单击证书路径中最上面的“DigiCert”证书,然后选择“查看证书”,在新弹出的对话框中选择“详细信息”,记下其中的序列号“ 0c e7 e0 e5 17 d8 46 fe 8f e5 60 fc 1b f0 30 39”。注意,每个证书都是由其序列号唯一标识的。然后在图2-26中查找是否有具有同样序列号的证书。逐个单击以“DigiCert”开始的证书,选择“查看”,选择“详细信息”,注意其序列号。第一个以“DigiCert”开始证书就是我们要找的证书,因为它的序列号与我们刚才记下的序列号是一样的。
当证书链中最后一个证书“Mozilla Corporation”验证通过之后,系统就用该证书中的公钥验证“Firefox安装程序”上的签名。之所以这样做,是因为“Firefox安装程序”是用“Mozilla Corporation”证书中的公钥对应的私钥进行签名的。以上所有验证签名都遵循同样的过程:用相应的公钥解密签名,然后与重新计算的消息摘要进行比较,相同则签名有效,否则签名无效。详细情况可参考前面图2-13及其说明。对于本例来说,验证过程发生了3次,比较花费时间,这就是在单击图2-27中的“详细信息”按钮(需要先选择签名列表中的条目,才可以单击)之后,为什么要“稍微等待一段时间”的原因。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。