gpt4 book ai didi

ssl - J2EE 没有主题替代名称 绝地复仇

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

场景,我正在处理一个一团糟的网络服务器(不,我不控制这部分,我必须玩游戏,这是由世界上最大的软件供应商之一编写的)

默认情况下,网络服务器有 2 个 SSL 服务,每个服务可能有一个完全不同的 SSL 证书

证书A签名算法:sha1WithRSAEncryptionRSA key 强度:1024

主题:*.dummy.nodomain颁发者:*.dummy.nodomain

证书B签名算法:sha1WithRSAEncryptionRSA key 强度:2048

主题:vhcalnplcs_NPL_01发行人:root_NPL

按照本页的例子

public List<String> doPostWithSSL(String direction, String dataToSend, String contentType, boolean OverrideSecurityVerifications) {
try {
URL url = new URL(direction);
List<String> webcontent = new ArrayList();

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Host", getHostByUrl(direction));
conn = new UserAgentsLibrary().getRandomUserAgent(conn);

if (contentType != null) {
conn.setRequestProperty("Content-Type", contentType);
} else {
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
}

conn.setDoOutput(true);

if (OverrideSecurityVerifications) {
try {
TrustManager[] trustAllCerts;
trustAllCerts = new TrustManager[]{new X509TrustManager() {
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}

@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
}

@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
}

}};

// We want to override the SSL verifications
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, trustAllCerts, null);
SSLSocketFactory factory = ctx.getSocketFactory();



conn.setDefaultSSLSocketFactory(ctx.getSocketFactory());
HostnameVerifier allHostsValid = (String hostname1, SSLSession session) -> true;
conn.setDefaultHostnameVerifier(allHostsValid);

conn.setSSLSocketFactory(factory);

} catch (KeyManagementException kex) {
System.out.println("[+] Error bypassing SSL Security " + kex.getMessage());
} catch (NoSuchAlgorithmException nsex) {
System.out.println("[+] Error forgeting TLS " + nsex.getMessage());
}

}

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(dataToSend);
wr.flush();

BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;

while ((line = rd.readLine()) != null) { //todo+=line+"\n";
webcontent.add(line);
}

wr.close();
rd.close();
return webcontent;

} catch (MalformedURLException mex) {
System.out.println("[+] Error: I received a malformed URL");
return null;
} catch (SSLHandshakeException sslex) {
System.out.println("[+] Error: SSL Handshake Error!" + sslex.getMessage());
return null;
} catch (IOException ioex) {
System.out.println("[+] Error: Input/Output Error!" + ioex.getMessage());
return null;
}
}

我能够使我的程序与证书 B 一起工作(这里没有问题)但是我不能让它与证书 A 一起工作(我怀疑 * 给我带来了麻烦)

需要考虑的事情

  • 这是一个示例代码,不要寻找不相关的细节;)
  • 是的,我知道此代码容易受到 MITM 攻击并且已警告用户
  • 不,我不想将证书添加到我的 keystore !
  • 我使用的是纯 J2EE 代码,我不想使用任何非标准代码
  • 我想找到适用于 Windows、Mac 和 Linux 的解决方案

过去有人遇到过这个问题,你能帮帮我吗?

最佳答案

昨天太累了

替换了 conn.setDefaultHostnameVerifier(allHostsValid);通过 conn.setHostnameVerifier(allHostsValid);

现在即使是带有通配符的证书也可以使用了!

关于ssl - J2EE 没有主题替代名称 绝地复仇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42592392/

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