代码签名的基础是PKI安全体系。代码签名证书由签名证书私钥和公钥证书两部分组成,其中,私钥用于代码的签名,公钥用于私钥签名的验证和证书持有者的身份识别。结合证书的公钥和私钥,其具体的实现步骤为:

            1.申请数字证书

                发布者从CA机构申请数字证书。

            2.发布者开发出代码

                借助代码签名工具,发布者使用MD5或SHA算法产生代码的哈希值,然后用代码签名证书私钥对该哈希值签名,从而产生一个包含代码签名和软件发布者的签名证书的软件包。

            3.运行环境访问到该软件包

                用户的运行环境访问到该软件包,并检验软件发布者的代码签名数字证书的有效性。

            4.使用代码签名

                用户的运行环境使用代码签名数字证书中含有的公钥解密被签名的哈希值。

            5.新产生一个原代码的哈希值

                用户的运行环境使用同样的算法新产生一个原代码的哈希值。

            6.用户的运行环境比较两个哈希值

                用户的运行环境比较两个哈希值。如果相同,将发出通知声明代码已验证通过。所以用户可以相信该代码确实由证书拥有者发布,并且未经篡改。


同时,你可以参考下面的流程图:

image.png

整个过程对用户完全透明,用户将可以看到软件发布者提示信息,并可以选择是否信任该软件发布者。在选择信任软件发布者之后,运行所有该软件发布者签名的程序时将可以不再收到任何提示信息。