【问题标题】:How to Make JVM Ignore Jar Signatures如何让 JVM 忽略 Jar 签名
【发布时间】:2009-06-06 00:38:08
【问题描述】:

我们有一个供应商提供的 Jar,其中包含一个我们希望通过 AOP 扩展和/或修改的类。默认的 Sun JVM 安全模型不允许未签名或由其他人签名的代码扩展已签名 jar 中的类。我们可以轻松地从 jar 文件中删除签名,但我更愿意将 JVM 配置为忽略 jar 签名安全措施。这可以做到吗?请注意,我们处于一个非常受控的环境中,因此我们相对不关心将恶意代码插入供应商提供的 jar 中。

【问题讨论】:

    标签: java security jar signing


    【解决方案1】:

    我不确定这是否适用于您的情况,但可能。编写你自己的 Classloader,但不是基于 URLClassLoader,只是扩展 Classloader 并以你自己的方式解析你的类。

    用这个类加载器加载你的类并应用你的 AOP 魔法,我可能会说它应该可以工作。

    我所做的是实现一个基于插件的框架,我不想签署每一段代码(库/插件),只签署启动库(加载应用程序的库)。当然,您在类加载器中运行的代码必须是可信任的,因为您绕过了一些默认的安全约束。

    【讨论】:

    • 一个我没有考虑过的好主意。对我们来说,关闭安全性的好处本质上是政治性的——如果罐子的校验和与供应商提供的校验和相同,那么“你改变了一些东西,所以这是你的错”的借口不能轻易给出出现支持问题。一个替代的类加载器可能是逃避尝试的同等材料。
    • 好吧,如果你想扩展一个不是为扩展而设计的类,你可能会遇到一些问题,他们可能会拒绝你的支持请求 :) 但如果你知道你在做什么就像提供一些私有类的不同实现一样。
    • “...不是为扩展而设计的...”更像是“不符合您需求的私有代码”。无论如何,最好的方法是要求他们提供一种干净的方式为特定部分提供您自己的实现(不确定库的作用,但通常应该可以有多个实现)
    • 我同意。在某些情况下,我们的东西是边缘废弃软件,因此我们正努力在糟糕的情况下做到最好。
    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2011-02-06
    • 2014-11-12
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多