使用SSLSocket Java创建应用程序

use*_*578 14 java sockets ssl jsse

我想创建一个应用程序使用SSLSocket:客户端发送String到服务器,服务器将大写,String然后发送回客户端进行显示.

SSLServer

public class SSLServer {
    public static void main(String args[]) throws Exception
    {
        try{
        //Creaet a SSLServersocket
        SSLServerSocketFactory factory=(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
        SSLServerSocket sslserversocket=(SSLServerSocket) factory.createServerSocket(1234);
        //T?o 1 ??i t??ng Socket t? serversocket ?? l?ng nghe và ch?p nh?n k?t n?i t? client
        SSLSocket sslsocket=(SSLSocket) sslserversocket.accept();
        //Tao cac luong de nhan va gui du lieu cua client
        DataInputStream is=new DataInputStream(sslsocket.getInputStream());
        PrintStream os=new PrintStream(sslsocket.getOutputStream());
        while(true)  //khi dang ket noi voi client
        {
            //Doc du lieu den
            String input=is.readUTF();
            String ketqua=input.toUpperCase();
            //Du lieu tra ve
            os.println(ketqua);
        }
        }
        catch(IOException e)
        {
           System.out.print(e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

SSLClient

public class SSLClient {
    public static void main(String args[])
    {
        try
        {
        //Mo 1 client socket den server voi so cong va dia chi xac dinh
        SSLSocketFactory factory=(SSLSocketFactory) SSLSocketFactory.getDefault();
        SSLSocket sslsocket=(SSLSocket) factory.createSocket("127.0.0.1",1234);

        //Tao luong nhan va gui du lieu len server
        DataOutputStream os=new DataOutputStream(sslsocket.getOutputStream());
        DataInputStream is=new DataInputStream(sslsocket.getInputStream());

        //Gui du lieu len server
        String str="helloworld";
        os.writeBytes(str);

        //Nhan du lieu da qua xu li tu server ve
        String responseStr;
        if((responseStr=is.readUTF())!=null)
        {
            System.out.println(responseStr);
        }

        os.close();
        is.close();
        sslsocket.close();
        }
        catch(UnknownHostException e)
        {
             System.out.println(e.getMessage());
        }
        catch(IOException e)
        {
            System.out.println(e.getMessage());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当运行SSLServer.它显示以下错误:

javax.net.ssl.SSLException: No available certificate or key corresponds 
    to the SSL cipher suites which are enabled
Run Code Online (Sandbox Code Playgroud)

我有搜索和做某些方法但是..你能帮助我吗?

小智 13

这将生成证书:

keytool -genkey -keystore yourKEYSTORE -keyalg RSA
Run Code Online (Sandbox Code Playgroud)

输入yourPASSWORD,然后使用ssl调试信息启动服务器(将yourKEYSTORE放入带有SSLServer.class的目录中):

java -Djavax.net.ssl.keyStore=yourKEYSTORE -Djavax.net.ssl.keyStorePassword=yourPASSWORD -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.debug=ssl SSLServer
Run Code Online (Sandbox Code Playgroud)

比启动客户端(将yourKEYSTORE放入SSLClient.class目录):

java -Djavax.net.ssl.trustStore=yourKEYSTORE -Djavax.net.ssl.trustStorePassword=yourPASSWORD SSLClient
Run Code Online (Sandbox Code Playgroud)


The*_*Fox 0

检查您已安装的证书。确保他们支持您正在协商的密码套件。