标签: java-security-manager

javax.crypto.BadPaddingException:错误:1e000065:密码函数:OPENSSL_internal:BAD_DECRYPT

我将 AES 解密密钥存储在 AndroidKeyStore 中以解密来自 SQLiteDB 的数据。不幸的是,有时我很少收到此错误(任何 android 设备和任何 API)。

我想知道这个错误到底是什么意思。 javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT.

我在哪里可以找到这些清单error:*

aes android-keystore java-security-manager

11
推荐指数
1
解决办法
4397
查看次数

如何在SecurityManager中检查呼叫者类的来源?

我有一个用于受信任的应用程序代码的ClassLoader和一个用于用户提交的(不受信任的)代码的单独的ClassLoader。

我希望安全管理器限制用户提交的代码。如何从SecurityManager中检查呼叫者的来历?参见伪代码:

System.setSecurityManager(new SecurityManager() {
    public void checkPermission(Permission permission) {
        if (/*caller class is not loaded by the trusted classloader*/) {
            throw new SecurityException("You do not have permissions.");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我已经尝试过的

  • StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).getCallerClass().getClassLoader() 首先检查权限,以便给出堆栈溢出异常。

  • Thread.currentThread().getStackTrace()[2].getClassLoaderName() 这是不安全的,因为它仅提供类加载器名称,而不提供类对象,如果不可信加载器的规范名称与可信加载器相同,则存在安全问题。

java java-security java-security-manager

9
推荐指数
1
解决办法
173
查看次数

如何在通过 gradle 执行 JUnit 测试时设置 java 安全策略文件以仅避免 System.exit 调用?

我想通过 gradle 执行 JUnit 测试,我想避免在这些测试中调用 System.exit() 调用。我读过设置安全策略文件可以解决问题。

这是我正在使用的安全策略文件

grant {
    permission java.io.RuntimePermission "exitVM", "none";
};
Run Code Online (Sandbox Code Playgroud)

我在 gradle 构建文件中设置 seecurity.policy 和安全管理器属性,如下所示:

systemProperty 'java.security.policy', file(project.ext.projectHome + "/security.policy").absolutePath
jvmArgs "-Djava.security.manager"
Run Code Online (Sandbox Code Playgroud)

但是当我运行测试时,测试任务失败并显示以下堆栈跟踪:

uccessfully started process 'Gradle Test Executor 20'
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:513)
        at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:525)
Caused by: java.lang.ExceptionInInitializerError
        at mockit.internal.state.TestRun.<init>(TestRun.java:43)
        at mockit.internal.state.TestRun.<clinit>(TestRun.java:22)
        at mockit.internal.faking.FakeMethods.registerFakeStates(FakeMethods.java:210)
        at mockit.internal.faking.FakeClassSetup.registerFakeClassAndItsStates(FakeClassSetup.java:57)
        at mockit.internal.faking.FakeClassSetup.<init>(FakeClassSetup.java:48)
        at mockit.internal.faking.FakeClassSetup.<init>(FakeClassSetup.java:35)
        at mockit.MockUp.redefineClass(MockUp.java:122)
        at mockit.MockUp.<init>(MockUp.java:80)
        at mockit.integration.junit4.FakeRunNotifier.<init>(FakeRunNotifier.java:24)
        at mockit.internal.startup.JMockitInitialization.applyInternalStartupFakesAsNeeded(JMockitInitialization.java:37)
        at mockit.internal.startup.JMockitInitialization.initialize(JMockitInitialization.java:26)
        at mockit.internal.startup.Startup.applyStartupFakes(Startup.java:58) …
Run Code Online (Sandbox Code Playgroud)

java junit gradle java-security java-security-manager

5
推荐指数
0
解决办法
85
查看次数

java.security.properties - 未应用更改

我尝试将安全属性附加到 java.security。因此,我添加了一个属性“java.security.properties”,指定要附加的文件。

我检查了 security.overridePropertiesFile 是否设置为 true。

由于某种原因,未应用对安全策略的更改。如果我直接更改文件“java.security”,一切都会正常。

找不到文件或文件内容不正确。我没有收到任何有关该位置的错误消息。我尝试了绝对路径、相对路径。该文件的内容如下(一行):

jdk.tls.disabledAlgorithms=ECDH, DH, RC4, DES, MD5withRSA, 3DES_EDE_CBC, DESede, DES, anon, NULL

我猜路径有问题,但不知道,因为没有关于它的日志。但无法找到有关路径的良好信息。所有示例都是相对路径,对我来说也不起作用。

我使用的是JDK11。

java java-security java-security-manager java-11

5
推荐指数
1
解决办法
6364
查看次数

从代码库加载 RMI 类而不使用已弃用的 SecurityManager?

我正在使用 RMI 调用指定返回 class 对象的方法ClassX

ClassX xObj = remoteObject.meth(...); 
Run Code Online (Sandbox Code Playgroud)

SubclassOfX如果远程方法实际上返回 的本地未知子类的实例ClassX,则该类SubclassOfX会自动从 a 下载codebase(由 的序列化实例上的注释指定SubclassOfX)。
(对于那些需要它的人:RMI 中的代码库概念

在 Java17 之前,必须使用 SecurityManager(和策略文件)来允许从代码库加载类。但从 Java17 开始,SecurityManager 已被弃用并标记为删除

我现在的问题是:将来如何允许/控制从代码库加载类?

Edit1:只是为了回答引用 jep411 的评论:我知道这个文档,但其中没有针对 SecurityManager 的 RMI 用例给出解决方案/替代方案。

java rmi classloader java-security-manager

5
推荐指数
0
解决办法
358
查看次数

当在 checkPermission 方法中加载某个类时,为什么 SecurityManager 会发出递归更新异常?

我正在将 jdk 8 升级到 11。

我在checkPermission方法中加载了一些类,然后安全管理器发出recursive update异常。但使用jdk1.8.0_202一切正常。

是什么导致了这个问题?

  1. 我的环境。
OS: macOS 10.15.6
JDK(Oracle): 11.0.8
IDE: Intellij 2019 3
Run Code Online (Sandbox Code Playgroud)
  1. 主要的
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 安全管理器
package sm;

import java.security.Permission;

public class MySecurityManager extends SecurityManager {

    @Override
    public void checkPermission(Permission permission) {

        // Problem occurs when load ServicePermission.class
        if (permission instanceof javax.security.auth.kerberos.ServicePermission) {
            // throw new SecurityException("javax.security.auth.kerberos.ServicePermission is not allowed.");
        }
    }

    @Override
    public void checkPermission(Permission …
Run Code Online (Sandbox Code Playgroud)

java securitymanager java-security-manager java-11

4
推荐指数
1
解决办法
146
查看次数

SecurityManager 弃用和通过抑制访问检查进行反射

我是一名大学讲师,我正在修改关于 Java 反射的讲座。其他几年,当我讲授抑制访问检查的可怕之处时,我向您展示了您可以设置一个 SecurityManager 并执行类似的操作

    if ("suppressAccessChecks".equals(p.getName())){
      StackTraceElement[] st = Thread.currentThread().getStackTrace();
      if(.. st ..) { throw new SecurityException(); }
    }
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以允许列入白名单的反序列化器仅调用suppressAccessChecks。然而,现在他们正在弃用 SecurityManager。我认为新的模块系统应该在这里有所帮助,但我找不到解释如何支持上面白名单反序列化器的想法的资源。

有什么提示吗?

java-module java-security-manager java-19

2
推荐指数
1
解决办法
158
查看次数