【问题标题】:Code Signing: When & Why?代码签名:何时以及为什么?
【发布时间】:2012-06-24 02:19:32
【问题描述】:

如果您在网上搜索代码签名,您将获得大量关于去哪里使用数字证书对代码进行签名的点击,但没有关于何时的文章或文档em> 你应该让你的代码签名或者为什么这可能是必要的。所以我提出这些问题:

  • 开发人员或开发团队希望/需要对其代码进行签名的用例有哪些?
  • 可以/应该签署哪些类型的代码? JavaScript?爪哇? C++?每种语言/平台是否有不同类型的代码设计?
  • 代码是签名为原始源代码还是编译后的二进制代码?

提前致谢。

【问题讨论】:

标签: security certificate code-signing


【解决方案1】:

我想理论上任何语言的任何代码都可以签名,可以作为源代码,但更常见的是编译后的二进制文件。

我想到的主要用例是移动应用程序(本例为 Android)。您必须在发布之前签署代码。您还必须保留密钥存储文件,因此如果您对应用程序进行任何更新并想要上传它,您可以使用相同的密钥对其进行签名。这是因为Android在升级应用程序时会检查很多东西,主要是旧的和新的代码签名是一样的,只要密钥库文件和它的密码足够保密,就证明它来自相同的来源。如果有人以某种方式修改代码,签名验证将失败。

简而言之,签名代码让最终用户/机器知道代码的来源。而且在升级的情况下,很难/不可能修改代码并让其他人下载它。

Apple 对 iOS 的代码签名感到疯狂,我没有完全掌握所有细节,但您必须从 Apple 获得证书(是的,超过 1 个)并与他们签名。如果您想将应用程序放在测试设备上,您需要另一个证书来签名并将其安装在设备上,否则您必须在 App Store 上获得它(取决于 Apple 的批准),在那里他们可能会用一些人签名让 iOS 设备知道其 Apple 批准的私钥。

【讨论】:

  • 感谢@Russ (+1) - 你能想到任何用于代码签名的非移动(和现实世界)应用程序吗?我觉得代码签名比现代移动应用热潮早了一英里。
【解决方案2】:

每次您需要确保代码来自受信任的来源并且没有人修改它(签名通常带有校验和)。这很常见。编程库、软件分发、软件升级。当您需要为代码申请专利时,您应该对其进行签名并获得可信的时间戳。当您创建银行并通过互联网访问它时,您通过 SSL 将您的网页发送给用户 = 您正在对它们进行加密和签名。可能还有更多

【讨论】:

    【解决方案3】:

    开发人员或开发团队希望/需要对其代码进行签名的用例有哪些?

    数字签名在不同的平台上意味着不同的东西。如果您正在编写 Windows 桌面软件,那么签署可执行文件的最大初始好处是摆脱 Windows 自 Windows XP SP2 以来一直向用户显示的讨厌的“未知发布者”警告。在其他平台(一些移动、Java、Flash、Office VBA 宏等)上,需要签名代码才能提升权限。

    您可以让 Windows 程序自检其自己的数字签名以确保其有效,这意味着 EXE 自签名以来没有发生任何变化。大多数人将其用作抵御恶意软件和盗版的另一层保护。

    也看看这个: http://blog.ksoftware.net/2011/07/what-is-authenticode/

    可以/应该签署哪些类型的代码? JavaScript?爪哇? C++?每种语言/平台是否有不同类型的代码设计?

    理论上可以对任何文档进行数字签名,但大多数时候当人们谈论代码签名时,他们谈论的是 MS Authenticode(将数字签名附加到任何 PE 格式文件(EXE、DLL、COM 等)或为 OSX/iOS 签署可执行文件。

    在不同的平台上有不同类型的签名,但大多数会使用相同的证书。

    代码是作为原始源代码还是编译后的二进制代码签名的?

    在大多数情况下,二进制文件。

    【讨论】:

      猜你喜欢
      • 2020-08-26
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 2013-04-06
      • 2013-12-11
      • 1970-01-01
      相关资源
      最近更新 更多