使用签名证书签署代码的过程是什么?

时间:2016-05-13 22:39:13

标签: code-signing

我是一名开发应用程序的新开发人员,我正在试图弄清楚如何签署一个程序。

我理解为什么代码签名是一件事,我知道如何获得证书(来自CA或单独),但是一旦你拥有私钥,我找不到任何解释实际签名过程的信息

如何使用签名证书签署代码?具体来说,您是否签署了源代码,构建的可执行文件,还有其他什么?您是否运行特定应用程序,或在代码中包含某些内容?

相关但离散的问题:What to do with the code signing certificate?

1 个答案:

答案 0 :(得分:2)

您有一个代码签名证书,其中包含私钥和公钥。

您计算代码和数据的加密保存校验和,并使用您的私钥对其进行加密。您将加密的校验和和公钥添加到代码中。

现在任何人都可以计算代码的相同校验和,使用公钥解密加密的校验和,并进行比较。如果它们匹配,则证明代码是由拥有您私钥的人提供的。如果它们不匹配,则证明此代码与您对校验和进行加密的代码不同。

为了有用,操作系统将在允许任何应用程序运行之前执行此类测试。公共密钥将使用操作系统供应商拥有的众所周知的私钥进行签名,并且可能附带可用于识别公钥所有者的数据。

显然,EvilHacker可以创建恶意软件并对代码进行签名。所以它签署的事实毫无意义。但是你也会拥有EvilHacker的身份,或者操作系统无法启动应用程序。因此,操作系统永远不会允许您运行被黑客入侵的应用程序或操作系统创建者不知道公钥所有者的应用程序。

黑客能够成功完成的第二个最糟糕的事情就是完全删除代码签名并为您提供未签名的黑客代码 - 操作系统可能会询问您是否要运行未签名的代码,或者根本不允许它。

黑客可以做的最糟糕的事情是让操作系统所有者接受EvilHacker的代码签名证书,或者窃取代码签名证书并创建实际上正确签名的恶意软件。