jsse exception - No available certificate
I really need help.
When I use jsseJava, I meet an Exception "No available certificate
corresponds to the SSL cipher suites which are enabled"
The Exception appear when "SSLSocket clientSocket=(SSLSocket)sslServerSocket.accept();"
Environment:
os:windows2000 server
JDK/JVM: version 1.3.0.2
javaSSL:
jcert.jar, jnet.jar,jsse.jar in [java_home]\lib\ext\
keystore: a keystore file named "testkeys" from JSSE 1.0.2 Sample Code 1.0.2
is copied to [user.dir]
cacerts: a cacerts file named "samplecacerts" from JSSE 1.0.2 Sample Code 1.0.2
is copied to [java_home]\lib\security\ and is renamed to"jssecacerts"
why and how to resolve the problem? who can help me? thank you.
--code--
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.security.KeyStore;
import java.io.File;
import java.security.SecureRandom;
import java.io.FileInputStream;
import java.security.*;
import com.sun.net.ssl.*;
import javax.net.ssl.*;
public class sslServer extends JFrame {
BorderLayout borderLayout1 = new BorderLayout();
JTextArea textArea = new JTextArea();
public sslServer() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout(borderLayout1);
this.setSize(new Dimension(832, 502));
this.setTitle("Frame Title");
textArea.setWrapStyleWord(true);
this.getContentPane().add(textArea, BorderLayout.CENTER);
java.security.Provider provider=new com.sun.net.ssl.internal.ssl.Provider();
java.security.Security.addProvider(provider);
java.security.KeyStore keyStore=null;
try{
String keyStoreType="JKS";
keyStore =KeyStore.getInstance(keyStoreType);
String keyStoreName=System.getProperty("user.dir")+
System.getProperty("file.separator")+"testkeys";
File storeFile=new File(keyStoreName);
FileInputStream fileInputStream=new FileInputStream(storeFile);
String keyStorePassword="passphrase";
char[] keyStorePasswordInChars=keyStorePassword.toCharArray();
keyStore.load(fileInputStream, keyStorePasswordInChars);
com.sun.net.ssl.KeyManager[] keyManagers=null;
String keyManagerAlgorithm="SunX509";
com.sun.net.ssl.KeyManagerFactory keyManagersFactory=
com.sun.net.ssl.KeyManagerFactory.getInstance(keyManagerAlgorithm,"SunJSSE");
String keyManagerPassword="passphrase";
keyManagersFactory.init(keyStore, keyManagerPassword.toCharArray());
com.sun.net.ssl.TrustManager[] trustedManagers=null;
String trustManagerAlgorithm="SunX509";
com.sun.net.ssl.TrustManagerFactory trustManagerFactory=
com.sun.net.ssl.TrustManagerFactory.getInstance(trustManagerAlgorithm,"SunJSSE");
trustManagerFactory.init(keyStore);
trustedManagers=trustManagerFactory.getTrustManagers();
java.security.SecureRandom secureRandom=null;
String secureRandomAlgorithm="SHA1PRNG";
String secureRandomProvider="SUN";
secureRandom=SecureRandom.getInstance(secureRandomAlgorithm,secureRandomProvider);
com.sun.net.ssl.SSLContext sslContext=null;
String sslContextProvider="TLS";
sslContext=com.sun.net.ssl.SSLContext.getInstance("SSL","SunJSSE");
sslContext.init(keyManagers,trustedManagers,secureRandom);
javax.net.ssl.SSLServerSocketFactory sslServerSocketFactory=
sslContext.getServerSocketFactory();
int serverPort=4009;
javax.net.ssl.SSLServerSocket sslServerSocket=(javax.net.ssl.SSLServerSocket)
sslServerSocketFactory.createServerSocket(serverPort);
sslServerSocket.setEnabledCipherSuites(sslServerSocket.getEnabledCipherSuites());
sslServerSocket.setNeedClientAuth(false);
sslServerSocket.setUseClientMode(false);
while(true){
Exception appear :"No available certificate corresponds to SSL cipher suites which are enabled" --
SSLSocket clientSocket=(SSLSocket)sslServerSocket.accept();
MyHandler handlerThread=new MyHandler(clientSocket);
handlerThread.start();
textArea.append("\n server is ok");
}
} catch (Exception ee){
textArea.append(ee.toString()+"\n");
}
}
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if(e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
}

