gpt4 book ai didi

java - 使用 Java 独立应用程序的 SSL 连接

转载 作者:行者123 更新时间:2023-11-29 07:22:01 25 4
gpt4 key购买 nike

我创建了一个独立的可执行 JAR 程序,需要通过 SSL 连接发送私有(private)信息。
我无法使用证书建立 SSL 连接。得到这个:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path `building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target`

所以我在某个地方找到了一些代码,这些代码创建了一个不验证证书链的信任管理器:

// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};

成功了,我能够在没有任何证书的情况下建立 SSL 连接。

我担心的是在交换私有(private)信息时数据是否仍会被加密。这是一个执行 JAR 文件,客户端将下载到他们的计算机。

那么对于这种情况真的需要证书吗?

最佳答案

它仍然是加密的,但不值得信任。最好改为修复证书验证问题。

本质上,SSL 提供了加密和信任机制。您正在绕过信任部分,因此消息仍将被加密,但容易被拦截或窥探,例如使用中间人攻击。 MITM 可以拦截请求,并使用完全不同的证书完成 SSL 握手。他们可以选择将您的消息转发到目标服务器并返回,因此您永远不会知道消息已被拦截。

您应该查看下载服务器证书并将其放入可在运行时加载的信任库中。

参见 keytool 。keytool 可执行文件与 JDK 捆绑在一起,您可以使用此命令行工具创建“ keystore ”(在本例中称为“信任库”),并将证书导入其中。

有很多方法可以告诉 Java 使用 keystore ,您的选择取决于您使用什么库等来建立 SSL 连接。一种方法是使用启动选项,例如:

-Djavax.net.ssl.trustStore=mySrvKeystore -Djavax.net.ssl.trustStorePassword=123456

最好在谷歌上搜索“keystore java”加上你的库名(如果你正在使用的话)

HTH

关于java - 使用 Java 独立应用程序的 SSL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2869404/

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