php - 如何签署 PHP 源代码

标签 php openssl digital-signature code-signing phar

我想分发一些 PHP 源代码, 我需要提供一种方法来验证这些源代码没有被更改。

所以基本上我想给他们签名(如果可能的话使用 PHP)然后检查他们的签名(使用 PHP 是强制性的,它必须在 linux 和 windows 上都能工作)。

我一直在四处挖掘,我发现的是:

  • 签名:
    • 您可以使用PharData 创建一个zip 存档
    • 您可以使用 openssl 创建 pub/priv .
    • 您可以使用 Phar::setSignatureAlgorithm 签署 PharData
    • 您似乎必须将公钥放在存档旁边(source(阅读第 3 步)): 公钥必须与 Phar 文件同名,并添加 .pubkey,并且必须与 Phar 位于同一目录中。
  • 验证:

如果有人可以验证这个过程(或指出一个更好的过程),那将是一个很大的帮助。

因为我试图给出我从现在找到的理论解决方案,但在理论和实践之间,他们应该是有差距的。特别是考虑到我是这个概念的新手,而且在安全方面扎实对我的项目来说至关重要。 我提醒一下,几年前使用 Apple 的签名过程是一件很痛苦的事情,我对自己创建安全解决方案的能力没有信心。

最佳答案

关于签名的 phar 文件,我上次检查时,默认行为是:

  • 如果签名有效,从 phar 中检索文件(如果是 php 则执行)
  • 如果签名无效,抛出错误
  • 如果没有签名,从 phar 中获取文件(如果是 php 则执行)

因此,通过简单地剥离签名来绕过签名保护很简单(实际上,您只需要将文件标记为未签名)。您可以显式设置 phar.require_hash在实例中删除此后门的选项。

to verify that these sourcecode aren't altered

嗯嗯。这有点含糊。由谁修改?如上所述,您需要客户端选择加入基于 phar 签名的安全模型。

有很多第三方 PHP 编码器通过混淆代码来工作。几乎所有这些都提供了可笑的保护水平。 IonCube 编码器和 Zend 的编码器是两个异常(exception)。我对这些还不够熟悉,无法说出它们有多强,是否满足您的要求。

有几个开源 PHP 编译器可以将 PHP 源代码转换为 .so 扩展(特别是 Facebook HipHop),但我认为它们都没有得到维护。

如果您只是想确保您的客户可以使用经过验证的内容(并且您不担心您的客户会修改文件),那么只需使用 PGP 或 x509 的标准文件签名即可。

如果你想防止你的客户修改 PHP 代码,那么我知道的唯一选择(并且我自己没有测试过)是将你的代码作为 HHVM 字节码分发 - 但这不能抵抗逆向工程,没有内在的、安全的验证机制,实际上并不是一种保护代码的方法。

关于php - 如何签署 PHP 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41543963/

相关文章:

c# - 您如何验证数字证书 SSL?

php - 更好的迭代来显示对象属性 PHP

php - 是否可以在 HipHop 中使用 PECL 扩展?

php - 将此 cuRL 转换为 CFHTTP - Azure NotificationHub

c++ - OpenSSL 和信号

c++ - 有效创建数字签名的正确方法是什么?我可以使用DSA_sign_setup()吗?

PHP API 在 POST 中获取空的 JSON 请求

java - 获取无法生成DH key 对异常

python - SSL 不可用

hash - 如何使用signtool.exe在exe文件中嵌入哈希