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

| 与此问题相关,我是否可以/应该使用jar签名来创建一个防篡改jar,其中嵌入的信息可在运行时强制允许使用该应用程序的用户数量?我的想法是这样的: 用单个类创建jar,其中包含可容纳正确数量用户的静态字段 在罐子上签名并放置在Grails war lib文件夹中,以此类推 (假设,这是正确的吗?)我可以从grails应用程序安全地知道该jar未被篡改(否则将抛出异常),并且可以从我的grails应用程序访问已签名的jar文件中的类中的静态字段。需要额外的工作,例如“接受”签名。 我的第3步假设是否正确?这是我尝试做的一个好方法吗?如果没有,标准做法是什么? 谢谢!     
已邀请:
如果用户必须在坚持要求签名存在并且可以正常工作的环境中运行它,那么这仅仅是“防篡改”。如果将jar交给可以在普通JVM中运行的普通人(而不是作为applet,而不是作为webstart),则他们可以自由地完全删除签名。如果您想阻止这种情况,则必须编写代码来调用
Class.getSigners
并在看不到自己时爆炸。因此,他们需要启动asm来写出该检查不存在的记录,并且他们会很好。 Java代码签名允许某些容器从其源验证jar文件是否保持完整性。它没有为您提供创建防篡改程序包的方法。     
简单的JAR签名无效。 JAR签名是关于客户端信任您的JAR文件的全部内容。它不会阻止客户端从JAR的内容中创建新的JAR(进行一些调整)并将其作为未签名的JAR运行。 您的JAR中的类可以尝试检查是否从经过适当签名的JAR中加载,但是可以对任何此类进行调整以禁用该检查。因此,这对于坚定的攻击者而言是一个飞跃……但肯定不是不可行的解决方案。 对同时使用的用户实施限制的通常方法是实施单独的许可证管理器/许可证密钥系统;例如FlexLM。 (当然,也可以通过调整类以跳过许可证检查来克服这一点。) 最重要的是,您的客户端控制的计算机上运行的代码的任何许可证管理方案都可以被击败。     

要回复问题请先登录注册