gpt4 book ai didi

ssl - 在 OpenJDK 11 中启用 SSL 证书吊销检查

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:01 29 4
gpt4 key购买 nike

Java 11 中是否有一些快速的“声明式”方式,而不是繁琐的手动实现,以启用检查证书是否被吊销?

我尝试使用此答案中的属性: Check X509 certificate revocation status in Spring-Security before authenticating使用此虚拟吊销证书:https://revoked.badssl.com但代码总是接受证书。我是不是做错了什么,或者这些属性对于 Java 11 来说不再实际了?如果是这样,我们还有其他选择吗?

下面是我的代码:

public static void validateOnCertificateRevocation(boolean check) {
if (check) {
System.setProperty("com.sun.net.ssl.checkRevocation", "true");
System.setProperty("com.sun.security.enableCRLDP", "true");

Security.setProperty("ocsp.enable", "true");
}

try {
new URL("https://revoked.badssl.com").openConnection().connect();
} catch (IOException e) {
e.printStackTrace();
}
}

最佳答案

似乎必须在执行第一个请求之前设置这些选项。

因此,以下代码作为独立 Java 程序会抛出 CertPathValidatorException: Certificate has been revoked(在 Windows 上使用 OpenJDK 11.0.2 x64 进行测试):

public static void main(String[] args) {
validateOnCertificateRevocation(true); // throws CertPathValidatorException
}

但是下面的代码不会导致任何错误/异常:

public static void main(String[] args) {
validateOnCertificateRevocation(false);
validateOnCertificateRevocation(true); // nothing happens
}

您可以看到在处理完第一个请求后更改选项无效。我假设这些选项是在某些证书验证相关类的 static { ... } block 中处理的。

如果您仍想在每个请求基础上启用/禁用证书吊销检查,您可以通过实现自己的 X509TrustManager 来实现使用 CertPathValidator (您可以通过 PKIXParameters.setRevocationEnabled(boolean) 启用/禁用证书吊销检查。

或者,有一种解决方案可以全局启用证书吊销检查并显式处理 CertificateRevokedException:

private boolean checkOnCertificateRevocation;

@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
try {
getDefaultTrustManager().checkServerTrusted(certs, authType);
} catch (CertificateException e) {
if (checkOnCertificateRevocation) {
if (getRootCause(e) instanceof CertificateRevokedException) {
throw e;
}
}
}
}

关于ssl - 在 OpenJDK 11 中启用 SSL 证书吊销检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55338417/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com