gpt4 book ai didi

java - 击打: "Trust anchor for certification path not found"

转载 作者:行者123 更新时间:2023-11-29 03:05:32 26 4
gpt4 key购买 nike

我正在尝试从 Android 连接到本地主机中的 Apache Vysper XMPP 服务器。我正在使用 Smack执行 XMPP 操作的框架:

AbstractXMPPConnection connection = new XMPPTCPConnection("bigdestroyer", "", ip);
try {
connection.setPacketReplyTimeout(10000);
connection.connect();
} catch (SmackException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XMPPException e) {
e.printStackTrace();
}

但是我得到这个错误:

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

我猜它与 SSL 证书有关,但我不知道我必须做什么。你能帮帮我吗?

我试图将 cert 文件(与服务器相同)放在 assets 文件夹中并以这种方式创建连接:

  XMPPTCPConnectionConfiguration connectionConfiguration = configuration.setConnectTimeout(10000)
.setUsernameAndPassword("admin", "admin")
.setHost(ip)
.setServiceName(ip)
.setKeystorePath("file:///android_asset/bogus_mina_tls.cert")
.build();

XMPPTCPConnection connection = new XMPPTCPConnection(connectionConfiguration);

但是还是不行。有什么建议吗?

最佳答案

KeystorePath 应该指向一个 Keystore,而不是一个简单的证书。 Android 默认使用 KeystoreType BKS,因此您应该创建一个并将您的证书导入其中:

keytool -importcert -v -trustcacerts \
-file "[YOUR_PUBLIC_CERTIFICATE_PATH]" \
-alias [YOUR_ALIAS] -keystore "[BKS_TARGET_PATH]" \
-provider org.bouncycastle.jce.provider.BouncyCastleProvider \
-providerpath "[BOUNCY_CASTLE_JAR_PATH]" -storetype BKS \
-storepass [YOUR_PASSWORD]

如果您不想弄乱命令行,也可以使用 Portecle ( http://portecle.sourceforge.net/) 来完成此操作。

要获取证书文件,可以使用openssl s_client 命令:

openssl s_client -showcerts -connect <SERVER_URL>:<SERVER_PORT>  </dev/null

关于java - 击打: "Trust anchor for certification path not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32373954/

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