使用签名证书对代码进行签名的过程是怎样的?

What is the process for signing code with a signing certificate?

我是一名开发开源应用程序的新开发人员,我正在尝试了解如何对程序进行签名。

我理解为什么代码签名是一回事,我知道如何获得证书(从 CA 或个人),但我找不到任何解释在您拥有私钥后自行签名的实际过程的内容.

如何使用签名证书对代码进行签名?具体来说,您是否对源代码、构建的可执行文件或其他完全不同的东西进行签名?您 运行 是特定的应用程序,还是在代码中包含某些内容?

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

您有一个包含私钥和 public 密钥的代码签名证书。

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

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

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

显然 EvilHacker 可以创建恶意软件并对其进行代码签名。所以它被签名的事实是没有意义的。但您也将拥有 EvilHacker 的身份,否则操作系统将不会启动该应用程序。因此,操作系统永远不会允许您 运行 被黑的应用程序或 public 密钥的所有者不为 OS 的创建者所知的应用程序。

黑客可以成功做到的第二糟糕的事情是完全删除代码签名并给你未签名的黑客代码 - OS 可能会问你是否要 运行 未签名的代码,或者根本不允许。

黑客最糟糕的做法是诱骗 os 所有者接受 EvilHacker 的代码签名证书,或者窃取代码签名证书并创建实际上已正确签名的恶意软件。