我需要生成一个证书,但找不到这个目录.谢谢!
以下代码在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(发布候选版本)中测试.
我正在浏览这个链接,OBJ10-J.不要使用公共静态非最终字段,它说,
客户端代码可以简单地访问公共静态字段,因为安全管理器不会检查对这些字段的访问.
那是什么意思呢?即逃离安全经理他们是什么意思?
如果他们只是意味着它,因为现场被非最终和public,然后怎么来的非最终,public实例字段比他们不同static的同行?(就代码安全而言)
我已经经历过这个问题并且在安全方面没有看到任何提及,为什么静态变量被认为是邪恶的
publicclass的public static字段可以从任何地方访问,所以public实例字段也可以访问,那么区别在哪里?为什么非最终 public实例字段不是安全问题,而是存在static?
我有一些数据,我正在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) 我有一个用于受信任的应用程序代码的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程序,该程序将使用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) 有很多问题询问 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应用程序,其中一个作业计划每5分钟运行一次.在该作业中,有一个安全组件,每次执行时都会执行以下操作:
java.security.Security
.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Run Code Online (Sandbox Code Playgroud)
我的问题是:
为了澄清,我想在我的应用程序中以编程方式添加Bouncy Castle安全提供程序,而不是通过JRE静态添加.IMO,在应用程序中添加一次Bouncy Castle安全提供程序就足够了,我不需要多次执行.
我想知道模块边界是否也是安全边界?
更具体地说,没有非法访问(--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您的模块 - 它不是.所以要么:
setAccessible(true)?java ×10
java-security ×10
security ×3
bouncycastle ×1
commoncrypto ×1
ios ×1
java-11 ×1
java-module ×1
jsch ×1
macos ×1
objective-c ×1
openssl ×1
pki ×1
random-seed ×1
sandbox ×1
ssh ×1
ssl ×1