SSL套接字:没有常见错误的密码套件

时间:2014-02-05 18:23:38

标签: java android sockets ssl encryption

我收到此错误: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;

知道如何解决这个问题吗? 连接是否可能失败,因为服务器的证书是自签名的? 感谢。

2 个答案:

答案 0 :(得分:1)

您必须在SSLServerSocket或SSLSocket中更改启用的密码套件。不要那样做。如果必须,请确保设置两个对等方都支持的子集。

编辑在您的客户端代码中,您有

System.setProperty("javax.net.ssl.trustStore","mySrvKeystore.key");

即。您正在使用服务器密钥库作为客户端信任库。不要那样做。密钥库包含私钥,它不应驻留在除服务器之外的任何位置。您需要从该密钥库导出服务器证书,并将其作为可信CA证书导入客户端信任库。

答案 1 :(得分:1)

Android使用稍微不同的方法来建立安全连接。请看一下这篇文章: Android Trusting SSL Certificates