带有SSL的Java Web套接字-SSLHandshakeException-没有通用的密码套件

带有SSL的Java Web套接字-SSLHandshakeException-没有通用的密码套件,java,java-websocket,Java,Java Websocket,我正在尝试用Java创建web套接字服务器,它可以接受来自web客户端的连接(使用Https)。在chrome中打开URL“”时,Java应用程序抛出错误:javax.net.ssl.SSLHandshakeException:没有通用的密码套件。以下是我遵循的步骤 1) 首先,我使用以下命令创建了一个密钥库(如上所述@): keytool-genkey-validity 3650-keystore“keystore.jks”-storepass“storepassword”-keypass“k

我正在尝试用Java创建web套接字服务器,它可以接受来自web客户端的连接(使用Https)。在chrome中打开URL“”时,Java应用程序抛出错误:javax.net.ssl.SSLHandshakeException:没有通用的密码套件。以下是我遵循的步骤

1) 首先,我使用以下命令创建了一个密钥库(如上所述@): keytool-genkey-validity 3650-keystore“keystore.jks”-storepass“storepassword”-keypass“keypassword”-别名“default”-dname“CN=127.0.0.1,OU=MyOrgUnit,O=MyOrg,L=MyCity,S=MyRegion,C=MyCountry”

2) 下面是我的Java web套接字服务器创建代码:

public class SocketServer extends WebSocketServer {

/** The web socket port number */
private static int PORT = 8887;
private static volatile SocketServer socketServer = null;

/**
 * private constructor Creates a new WebSocketServer with the wildcard IP
 * accepting all connections.
 */
private SocketServer() {
    super(new InetSocketAddress(PORT));
}

/**
 * Get singleton instance of Socket Server class
 */
public static SocketServer getInstance() {
    if (socketServer == null) {
        synchronized (SocketServer.class) {
            // Double check
            if (socketServer == null) {
                WebSocketImpl.DEBUG = true;
                socketServer = new SocketServer();                  

                // load up the key store
                String STORETYPE = "JKS";
                String KEYSTORE = "keystore.jks";
                String STOREPASSWORD = "storepassword";
                String KEYPASSWORD = "keypassword";

                try {
                    KeyStore ks = KeyStore.getInstance( STORETYPE );
                    File kf = new File( KEYSTORE );
                    ks.load( new FileInputStream( kf ), STOREPASSWORD.toCharArray() );

                    KeyManagerFactory kmf = KeyManagerFactory.getInstance( "SunX509" );
                    kmf.init( ks, KEYPASSWORD.toCharArray() );
                    TrustManagerFactory tmf = TrustManagerFactory.getInstance( "SunX509" );
                    tmf.init( ks );

                    SSLContext sslContext = null;
                    sslContext = SSLContext.getInstance( "TLS" );
                    sslContext.init( kmf.getKeyManagers(), tmf.getTrustManagers(), null );

                    socketServer.setWebSocketFactory( new DefaultSSLWebSocketServerFactory( sslContext ) );
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                socketServer.start();

            }
        }
    }
    return socketServer;
}
请提出可能的问题

提前谢谢

(晚,但)JSSE不支持密钥密码与storepassword不同的privatekey条目。使它们相同;或者省略
-keypass
,并在提示时输入nothing(点击return)使其保持不变。另外,
-genkey
默认为DSA,并非所有客户端都支持DSA,尤其是默认大小为1024;您最好指定
-keyalg RSA
,并且自2014年起,最好也指定
-keysize 2048
。(后期但)JSSE不支持密钥密码与storepassword不同的privatekey条目。使它们相同;或者省略
-keypass
,并在提示时输入nothing(点击return)使其保持不变。另外,
-genkey
默认为DSA,并非所有客户端都支持DSA,尤其是默认大小为1024;您最好指定
-keyalg RSA
,从2014年起,最好也指定
-keysize 2048