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);

}

}

}

[4657 byte] By [bluesunday] at [2007-9-26 6:52:24]
# 1
I think you've got mistake here:sslServerSocket.setEnabledCipherSuites(sslServerSocket.getEnabledCipherSuites());it must be :sslServerSocket.setEnabledCipherSuites(sslServerSocket.getSupportedCipherSuites());
illya_vp at 2007-7-1 16:21:28 > top of Java-index,Security,Java Secure Socket Extension (JSSE)...