Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jar签名作为一种许可证密钥_Java_Security_Licensing_License Key_Jar Signing - Fatal编程技术网

Java 使用jar签名作为一种许可证密钥

Java 使用jar签名作为一种许可证密钥,java,security,licensing,license-key,jar-signing,Java,Security,Licensing,License Key,Jar Signing,关于这个问题,我是否可以/应该使用jar签名来创建一个防篡改的jar,其中嵌入了用于运行时强制执行允许使用该应用程序的用户数量的信息?我的想法是: 使用单个类创建jar,该类包含包含正确数量用户的静态字段 对jar进行签名,并将其放在Grails war lib文件夹中,然后放在类路径上 (假设,这是否正确?我可以从我的grails应用程序安全地访问已签名jar文件中类中的静态字段,知道jar没有被篡改(否则将引发异常),也不需要任何额外的工作,如“接受”签名 我的第三步假设正确吗?这是我尝试做

关于这个问题,我是否可以/应该使用jar签名来创建一个防篡改的jar,其中嵌入了用于运行时强制执行允许使用该应用程序的用户数量的信息?我的想法是:

  • 使用单个类创建jar,该类包含包含正确数量用户的静态字段
  • 对jar进行签名,并将其放在Grails war lib文件夹中,然后放在类路径上
  • (假设,这是否正确?我可以从我的grails应用程序安全地访问已签名jar文件中类中的静态字段,知道jar没有被篡改(否则将引发异常),也不需要任何额外的工作,如“接受”签名
  • 我的第三步假设正确吗?这是我尝试做的一个好方法吗?如果没有,标准做法是什么


    谢谢

    只有当用户必须在坚持签名存在且功能正常的环境中运行它时,它才是“防篡改”的。如果你把一个jar交给一个普通人,他可以在一个普通的JVM中运行它(不是小程序,也不是webstart),他们可以完全自由地删除签名。如果您想尝试停止此操作,您必须编写代码来调用
    Class.getSigners
    ,如果您没有看到自己,则必须进行爆炸。所以,他们需要启动asm来写一张不存在的支票,这样他们就可以走了


    Java代码签名允许一些容器验证jar文件是否从源代码保持完整性。它不提供创建防篡改软件包的方法。

    只有当用户必须在坚持签名存在且功能正常的环境中运行时,它才是“防篡改”的。如果你把一个jar交给一个普通人,他可以在一个普通的JVM中运行它(不是小程序,也不是webstart),他们可以完全自由地删除签名。如果您想尝试停止此操作,您必须编写代码来调用
    Class.getSigners
    ,如果您没有看到自己,则必须进行爆炸。所以,他们需要启动asm来写一张不存在的支票,这样他们就可以走了


    Java代码签名允许一些容器验证jar文件是否从源代码保持完整性。它不提供创建防篡改软件包的方法。

    简单的JAR签名不起作用。JAR签名就是客户机信任您的JAR文件。它不会阻止客户机从JAR的内容(带有调整)创建一个新的JAR,并将其作为未签名的JAR运行

    JAR中的类可以尝试检查它们是否是从一个经过适当签名的JAR加载的,但是任何这样的类都可以调整以禁用检查。所以这是一个坚定的攻击者的减速。。。但肯定不是一个可行的解决方案

    对同时使用的用户实施限制的正常方式是实施单独的许可证管理器/许可证密钥系统;e、 g.FlexLM。(当然,通过调整类以跳过许可证检查也可以解决这一问题。)


    底线是,对于在客户机控制的机器上运行的代码,任何许可证管理方案都可能失败。

    简单的JAR签名将不起作用。JAR签名就是客户机信任您的JAR文件。它不会阻止客户机从JAR的内容(带有调整)创建一个新的JAR,并将其作为未签名的JAR运行

    JAR中的类可以尝试检查它们是否是从一个经过适当签名的JAR加载的,但是任何这样的类都可以调整以禁用检查。所以这是一个坚定的攻击者的减速。。。但肯定不是一个可行的解决方案

    对同时使用的用户实施限制的正常方式是实施单独的许可证管理器/许可证密钥系统;e、 g.FlexLM。(当然,通过调整类以跳过许可证检查也可以解决这一问题。)


    底线是,在客户控制的机器上运行的代码的任何许可证管理方案都可能失败。

    “我是否应该使用jar签名来创建防篡改jar…”没有“防篡改”二进制文件。在这种情况下,如果你可以签名,黑客也可以。“我应该使用jar签名来创建防篡改jar吗…”没有“防篡改”二进制文件。在这种情况下,如果你可以签名,黑客也可以。谢谢@Stephen,这有助于我的理解。因为我在Agilis的许可证管理部门工作,我想我应该考虑一下关于许可证管理者安全性的评论。我建议我们的客户采取以下几种方法,以防有人试图跳过许可证检查:使用基于异常的控制流,使他们甚至很难找到正在执行许可证检查的位置,在代码和操作阶段的多个位置执行许可证检查,需要定期的许可证验证等。只要稍加思考和积累经验,许可证系统就可以变得安全。谢谢@Stephen,这有助于我的理解,因为我在Agilis的许可证管理部门工作,我想我应该考虑一下关于许可证管理者安全性的评论。我建议我们的客户采取以下几种方法,以防有人试图跳过许可证检查:使用基于异常的控制流,使他们甚至很难找到正在执行许可证检查的位置,在代码和操作阶段的多个位置执行许可证检查,需要定期的许可证验证等。只要稍加考虑和积累经验,许可证系统就可以变得安全。