gpt4 book ai didi

java - 在 Java 中打开 SSLSocket 时验证证书链

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

我的设置

我的目标是与 FTP 服务器建立 SSL/TLS 安全连接(显式)。适当的根 CA 证书存储在名为 truststore.jks 的信任库中。在 AUTH TLS 命令之后,我使用以下代码构建 SSLSocket。

public SSLSocket enterSecureMode(Socket s) throws Exception {
KeyStore truststore = KeyStore.getInstance("JKS");
truststore.load(Files.newInputStream(Paths.get("truststore.jks")), "mypass".toCharArray());

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(truststore);

SSLContext sCon = SSLContext.getInstance("TLS");
sCon.init(null, tmf.getTrustManagers(), null);

SSLSocketFactory sslSocketFactory = sCon.getSocketFactory();
return (SSLSocket) sslSocketFactory.createSocket(s, "<HOSTNAME>", 21, true);
}

代码本身运行良好,我收到了一个安全的套接字连接,但我想知道这是否能经受住像 MITM 这样的攻击。我的意思是该程序会发现有人试图“给我一个假证书”的尝试。因此,如果一些更有经验的 SSL-Network-Programmers 能够启发我,我将非常高兴 :D

最佳答案

这就足够了。攻击者必须提供由根 CA 签名的证书。然而你并不需要所有这些代码:你只需要

System.setProperty("javax.net.ssl.trustStore", "truststore.jks");
SSLContext sCon = SSLContext.getDefault();
SSLSocketFactory sslSocketFactory = sCon.getSocketFactory();
return (SSLSocket) sslSocketFactory.createSocket(s, "<HOSTNAME>", 21, true)

如果你想完全偏执,在创建 SSLSocket 之后,你可以获得 SSLSession 然后是对等证书链,并确保第零个条目与确切的服务器证书,但这一步大部分被省略。

关于java - 在 Java 中打开 SSLSocket 时验证证书链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44402047/

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