我正在尝试保护PC上的java服务器和Android客户端之间的套接字通信 .

我使用TCP套接字通信,但我需要在客户端 - 服务器之间进行加密通信 .

我已经使用java keytool成功创建了证书和密钥:

keytool -genkey -keyalg RSA -keysize 2048 -validity 360 -alias mykey -keystore myKeyStore.jks
keytool -export -alias mykey -keystore myKeyStore.jks -file mykey.cert
keytool -import -file mykey.cert -alias mykey -keystore myTrustStore.jts

我已成功将.jks文件添加到服务器代码中:

System.setProperty("javax.net.ssl.keyStore",KEYSTOREPATH_HERE);
System.setProperty("javax.net.ssl.keyStorePassword",PASSWD_HERE);

现在服务器正常启动并开始侦听客户端 .

在我的Android应用程序中,我创建SSL套接字使用:

SocketFactory socketFactory = SSLSocketFactory.getDefault();
Socket socket = socketFactory.createSocket();

但是当我启动应用程序时,它会尝试连接到TCP服务器,然后TCP服务器崩溃运行SSLHandshakeException,说明证书未知 .

Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
    at java.base/sun.security.ssl.Alerts.getSSLException(Unknown Source)
    at java.base/sun.security.ssl.Alerts.getSSLException(Unknown Source)
    at java.base/sun.security.ssl.SSLSocketImpl.recvAlert(Unknown Source)
    at java.base/sun.security.ssl.SSLSocketImpl.processInputRecord(Unknown Source)
    at java.base/sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at java.base/sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at java.base/sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at TCPServer.main(TCPServer.java:68)

我怎么解决?