代码签名:何时&为什么?

时间:2012-06-21 19:08:46

标签: security certificate code-signing

如果您在线搜索代码签名,您将获得大量关于 以获取使用数字证书签名的代码的点击,但时没有文章或文档为什么这可能是必要的。所以我提出这些问题:

  • 开发人员或开发团队希望/需要签署代码的用例是什么?
  • 可以/应该签署哪些类型的代码? JavaScript的? Java的? C ++?每种语言/平台都有不同类型的协同设计吗?
  • 代码是作为原始源还是已编译的二进制文件签名?

提前致谢。

3 个答案:

答案 0 :(得分:2)

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

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

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

Apple坚持使用iOS代码签名,但我并没有完全掌握所有细节,但您必须从Apple获得证书(是1个以上)并与他们签约。如果你想将应用程序放在测试设备上,你需要另一个证书来签署并安装在设备上,另外你必须在App Store上获得它(经Apple批准),他们可能会在那里签名iOS设备的私钥,以了解其Apple认可。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

开发人员或开发团队希望/需要签署代码的用例是什么?

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

您可以让Windows程序自行检查自己的数字签名以确保它是有效的,这意味着EXE自签名以来根本没有改变。大多数人将其用作防止恶意软件和盗版的另一层保护。

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

  

可以/应该签署哪些类型的代码? JavaScript的? Java的? C ++?每种语言/平台都有不同类型的协同设计吗?

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

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

  

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

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