如何解决注入Java代理时出现java.lang.SecurityException
我正在尝试创建动态Java代理,但是在加载代理时会引发此错误:
com.sun.tools.attach.AgentInitializationException: Agent JAR loaded but agent failed to initialize
at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.loadAgent(HotSpotVirtualMachine.java:165)
at jdk.attach/com.sun.tools.attach.VirtualMachine.loadAgent(VirtualMachine.java:538)
at injector.main(injector.java:20)
这是目标应用程序上显示的错误:
java.lang.SecurityException: class "agent"'s signer information does not match signer information of other classes in the same package
at java.base/java.lang.ClassLoader.checkCerts(ClassLoader.java:1151)
at java.base/java.lang.ClassLoader.preDefineClass(ClassLoader.java:906)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1015)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:821)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:719)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:600)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:431)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain(InstrumentationImpl.java:535)
该代理没有可能触发该错误的代码,因为现在它只是一个用于测试的System.out.println语句。我使用以下代码注入代理:
VirtualMachine vm = VirtualMachine.attach(vmd);
vm.loadAgent("myagentpath");
vm.detach();
目标应用程序正在运行Java的正态分布。我认为这与我的代码无关。有谁知道是什么原因造成的?
解决方法
签名人信息与其他类别的签名人信息不匹配 在同一包装中
当从类路径上存在的不同JAR文件加载属于同一个程序包的类,并且这些JAR文件具有使用不同证书签名的签名时会发生这种情况-或更常见的是,至少一个签名了,一个或多个其他签名不是。因此,请确保使用相同的证书对所有JAR(或至少包含相同软件包中的类的JAR)进行签名,或者从具有重叠软件包的JAR文件清单中删除签名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。