我收到此错误:javax.net.ssl.SSLHandshakeException: no cipher suites in common
当试图在java服务器和android客户端之间进行SSL套接字通信时。
我用这一行来创建密钥文件:keytool -genkey -keystore mySrvKeystore -keyalg RSA
服务器代码:
System.setProperty("javax.net.ssl.keyStore","mySrvKeystore.key");
System.setProperty("javax.net.ssl.keyStorePassword","1234567");
private SSLServerSocketFactory sslserversocketfactory =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
private SSLServerSocket sslserversocket;
private SSLSocket sslsocket;
sslserversocket= (SSLServerSocket) sslserversocketfactory.createServerSocket(port);
sslsocket = (SSLSocket) sslserversocket.accept();
客户代码:
System.setProperty("javax.net.ssl.trustStore","mySrvKeystore.key");
System.setProperty("javax.net.ssl.trustStorePassword","1234567");
sslsocket = (SSLSocket) sslsocketfactory.createSocket(serverAddr, SERVERPORT);
private SSLSocketFactory sslsocketfactory = (SSLSocketFactory)
SSLSocketFactory.getDefault();
private SSLSocket sslsocket;
知道如何解决这个问题吗? 连接是否可能失败,因为服务器的证书是自签名的? 感谢。
答案 0 :(得分:1)
您必须在SSLServerSocket或SSLSocket中更改启用的密码套件。不要那样做。如果必须,请确保设置两个对等方都支持的子集。
编辑在您的客户端代码中,您有
System.setProperty("javax.net.ssl.trustStore","mySrvKeystore.key");
即。您正在使用服务器密钥库作为客户端信任库。不要那样做。密钥库包含私钥,它不应驻留在除服务器之外的任何位置。您需要从该密钥库导出服务器证书,并将其作为可信CA证书导入客户端信任库。
答案 1 :(得分:1)
Android使用稍微不同的方法来建立安全连接。请看一下这篇文章: Android Trusting SSL Certificates