Java 掴;找不到证书路径的信任锚点“;
我正在尝试从Android连接到localhost中的ApacheVysperXMPP服务器。我正在使用框架执行XMPP操作:Java 掴;找不到证书路径的信任锚点“;,java,android,ssl,xmpp,smack,Java,Android,Ssl,Xmpp,Smack,我正在尝试从Android连接到localhost中的ApacheVysperXMPP服务器。我正在使用框架执行XMPP操作: AbstractXMPPConnection connection = new XMPPTCPConnection("bigdestroyer", "", ip); try { connection.setPacketReplyTimeout(10000); connection.connect(); } catch (S
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.CertPathValidator异常:的信任锚
找不到证书路径
我想这与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);
但它仍然不起作用。有什么建议吗?有两种方法可以解决您的问题:
该页面继续提供其他可能性,但这一个似乎是最相关的。keystrepath应该指向密钥库,而不是简单的证书。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()来实现这一点
要获取证书文件,可以使用openssl s_客户端命令:
openssl s_client -showcerts -connect <SERVER_URL>:<SERVER_PORT> </dev/null
openssl s_客户端-showcerts-connect:您的问题解决了吗?链接断开了。你可以发布其他链接或实际步骤吗?
openssl s_client -showcerts -connect <SERVER_URL>:<SERVER_PORT> </dev/null