带有SSL的Java Web套接字-SSLHandshakeException-没有通用的密码套件
我正在尝试用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套接字服务器创建代码:带有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
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
。