标签: java-security

Mac OS X上的JRE lib/security目录在哪里?

我需要生成一个证书,但找不到这个目录.谢谢!

java macos pki java-security

11
推荐指数
3
解决办法
2万
查看次数

有效证书上的JDK 11 SSL错误(在以前的版本中工作)

以下代码在JDK 11中引发错误:

    HttpURLConnection con = (HttpURLConnection) new URL("https://sis.redsys.es/sis/realizarPago").openConnection();
    con.setRequestMethod("GET");
    con.getResponseCode();
Run Code Online (Sandbox Code Playgroud)

错误是:

javax.net.ssl.SSLHandshakeException: extension (10) should not be presented in server_hello
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:312)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:268)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:259)
at java.base/sun.security.ssl.SSLExtensions.<init>(SSLExtensions.java:71)
at java.base/sun.security.ssl.ServerHello$ServerHelloMessage.<init>(ServerHello.java:169)
at java.base/sun.security.ssl.ServerHello$ServerHelloConsumer.consume(ServerHello.java:860)
at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:390)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:445)
at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422)
at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:178)
at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:877)
at java.base/sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:810)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:383)
at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567)
Run Code Online (Sandbox Code Playgroud)

它在任何以前的JDK中工作(我在7,8,9和10中测试过).

证书似乎是有效的,因为它被浏览器识别或我在互联网上发现的大多数SSL测试.

我已经尝试禁用主机名验证,禁用cacerts,将DigiCert添加到cacerts文件中没有任何运气.

这似乎是openJDK中的一个错误.在构建版本26,27和28(发布候选版本)中测试.

java ssl openssl java-security java-11

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

在安全性方面,非最终公共实例和非最终公共实例字段之间的区别?

我正在浏览这个链接,OBJ10-J.不要使用公共静态非最终字段,它说,

客户端代码可以简单地访问公共静态字段,因为安全管理器不会检查对这些字段的访问.

那是什么意思呢?即逃离安全经理他们是什么意思?

如果他们只是意味着它,因为现场被非最终public,然后怎么来的非最终,public实例字段比他们不同static的同行?(就代码安全而言)

我已经经历过这个问题并且在安全方面没有看到任何提及,为什么静态变量被认为是邪恶的

publicclass的public static字段可以从任何地方访问,所以public实例字段也可以访问,那么区别在哪里?为什么非最终 public实例字段不是安全问题,而是存在static

java java-security

10
推荐指数
1
解决办法
461
查看次数

在iOS上签名的数据无法在Java中验证

我有一些数据,我正在SecKeyRawSign使用Elliptic Curve私钥在iOS上签名.但是,使用Signature.verify()返回验证Java中的数据false

数据是一个随机的64位整数,像这样分成字节

uint64_t nonce = (some 64 bit integer)
NSData *nonceData = [NSData dataWithBytes: &nonce length: sizeof(nonce)];
Run Code Online (Sandbox Code Playgroud)

根据该数据,我正在创建一个SHA256摘要

int digestLength = CC_SHA256_DIGEST_LENGTH;
uint8_t *digest = malloc(digestLength);
CC_SHA256(nonceData.bytes, (CC_LONG)nonceData.length, digest);
NSData *digestData = [NSData dataWithBytes:digest length:digestLength];
Run Code Online (Sandbox Code Playgroud)

然后使用私钥对其进行签名

size_t signedBufferSize = kMaxCipherBufferSize;
uint8_t *signedBuffer = malloc(kMaxCipherBufferSize);

OSStatus status = SecKeyRawSign(privateKeyRef,
                                kSecPaddingPKCS1SHA256,
                                (const uint8_t *)digestData.bytes,
                                digestData.length,
                                &signedBuffer[0],
                                &signedBufferSize);

NSData *signedData = nil;
if (status == errSecSuccess) {
    signedData = [NSData dataWithBytes:signedBuffer length:signedBufferSize];
}
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好.

然后,在Java服务器中,我正在尝试验证签名数据

PublicKey publicKey …
Run Code Online (Sandbox Code Playgroud)

java objective-c ios commoncrypto java-security

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

如何在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
查看次数

为什么要避免 Method.invoke?

准则 9-11 / ACCESS-11 中

注意java.lang.reflect.Method.invoke在检查直接调用者时被忽略

Java SE安全编码指南中,指出Method.invoke在确定直接调用者时忽略实现,否则将在所有权限下执行操作。到目前为止,这对我来说很清楚,但后来声明:

因此,避免 Method.invoke

我知道Method.invoke在确定直接调用者时忽略实现是好的,但为什么应该避免它?避免它的原因是什么?

java java-security

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

Java:InvalidAlgorithmParameterException素数必须是64的倍数

我实现了一个Java程序,该程序将使用JSCH在远程服务器中连接并执行命令。问题是,每当我尝试连接到服务器时,都会出现以下异常:

com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 256 to 2048 (inclusive)
Run Code Online (Sandbox Code Playgroud)

我尝试了在jre / lib和security.provider中添加Bouncy Castle提供程序的解决方案,它可以正常工作。但是我需要使其依赖于项目,因此我尝试在构建路径中添加Bouncy Castle,并在程序中手动添加Bouncy Castle提供程序。但是将其导出到jar后,我仍然收到异常。

package services;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.Security;
import java.util.Iterator;
import java.util.Properties;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class MainService {

public MainService() {
    Security.addProvider(new BouncyCastleProvider()); //Adding BouncyCastlePRovider in security
    // TODO Auto-generated constructor stub
    String report = "";
    StringBuilder sb = new StringBuilder();

    System.out.println("Running the monitoring...");
    System.out.println("Starting printer monitoring...");

    PrinterService ps = …
Run Code Online (Sandbox Code Playgroud)

java ssh jsch java-security

8
推荐指数
2
解决办法
2万
查看次数

创建“良好”SecureRandom 的最佳方法是什么?

有很多问题询问 SecureRandom 的特定启动是否“好”,但我找不到经验法则。

创建“良好”随机 SecureRandom 的最佳方法是什么?

// Fast
// Is it a good random?
SecureRandom secureRandom = new SecureRandom()?

// Freezes for a few seconds after being used several times - until getting a random enough seed.
// See http://stackoverflow.com/questions/137212/how-to-solve-performance-problem-with-java-securerandom#comment68934647_137212
// Is it a good random?
SecureRandom secureRandom = new SecureRandom(SecureRandom.getSeed(20))?

// Freezes for a very long time. Waited minutes and still no return :(
SecureRandom secureRandom = new SecureRandom.getInstanceStrong()?

Other?
Run Code Online (Sandbox Code Playgroud)

java security random-seed java-security secure-random

8
推荐指数
2
解决办法
4297
查看次数

在Java应用程序中多次添加安全提供程序

我们有一个Java应用程序,其中一个作业计划每5分钟运行一次.在该作业中,有一个安全组件,每次执行时都会执行以下操作:

java.security.Security
            .addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 是否需要在应用程序中多次添加安全提供程序?它有用吗?对我来说,它没有意义,添加一次就足够了.
  2. 它是应用程序中潜在内存泄漏的候选者吗?

为了澄清,我想在我的应用程序中以编程方式添加Bouncy Castle安全提供程序,而不是通过JRE静态添加.IMO,在应用程序中添加一次Bouncy Castle安全提供程序就足够了,我不需要多次执行.

java security bouncycastle java-security

8
推荐指数
1
解决办法
3838
查看次数

模块边界也是安全边界吗?

我想知道模块边界是否也是安全边界?

更具体地说,没有非法访问(--illegal-access=deny)和拒绝访问jdk.unsupported,它看起来accessClassInPackage不会再导致完整的沙箱逃脱.

真的吗?当此权限授予不受信任的代码时,是否还有其他方法可以破坏JVM的安全性?

要明确:

  • 要加载您需要的本机库ReflectPermission("supressAccessChecks")- 未授予
  • 要访问ReflectPermission("supressAccessChecks")您需要访问-Djava.security.manager模块和--illegal-access=deny- 未授予
  • RuntimePermission("loadLibrary.*")通过反射访问sun.misc.Unsafe,RuntimePermission("accessClassInPackage.sun.misc")必须打开ClassLoader.defineClass您的模块 - 它不是.

所以要么:

  • 是否有其他方法可以绕过/转义java沙箱setAccessible(true)
  • 或者模块边界是否被视为安全边界,这样的沙箱旁路会被视为安全漏洞?

java security sandbox java-security java-module

7
推荐指数
0
解决办法
223
查看次数