Name: gm110360 Date: 09/09/2003
FULL PRODUCT VERSION :
java version "1.4.2_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_01-b06)
Java HotSpot(TM) Client VM (build 1.4.2_01-b06, mixed mod
FULL OS VERSION :
SunOS sun2 5.8 Generic sun4u sparc SUNW,Ultra-5_10
A DESCRIPTION OF THE PROBLEM :
for ssl Server Socket ,
when incoming a ssl client connection with an expiry certificate ,
it generates the right exception (java.security.cert.CertificateExpiredException) but the server sends an alert with value = certificate_unknown .
The right value is certificate_expired
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
create an ssl server that requests the certificate for the client.
open a connection with the client with a expiry certificate.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
the server has to send an alert with value = certificate_expired
ACTUAL -
the server sends an alert with value = certificate_unknown
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
create a key MYKEYSERVER in a keystore call MYKEYSTORESERVER :
create a key MYKEYSERVER in a keystore call MYKEYSTORECLIENT :
keytool -keystore MYKEYSTORESERVER -alias MYKEYSERVER -keypasswd 123456 -genkey -keyalg RSA
keytool -keystore MYKEYSTORECLIENT -alias MYKEYCLIENT -keypasswd 123456 -genkey -keyalg RSA
creating a class for ssl server :
try {
int port = 443;
ServerSocketFactory ssocketFactory =SSLServerSocketFactory.getDefault();
ServerSocket ssocket = ssocketFactory.createServerSocket(port);
ssocket.setNeedClientAuth(true);
Socket socket = ssocket.accept();
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
byte br[] = new br[10];
out.read(br);
in.close();
out.close();
} catch(IOException e) {
}
java -Djavax.net.ssl.keyStore=MYKEYSTORESERVER
-Djavax.net.ssl.keyStorePassword=123456 MYKEYSERVER
-Djavax.net.ssl.trustStore=MYKEYSTORECLIENT
-Djavax.net.ssl.trustStorePassword=123456
creating a client
try {
int port = 443;
String hostname = "hostname";
SocketFactory socketFactory = SSLSocketFactory.getDefault();
Socket socket = socketFactory.createSocket(hostname, port);
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
socket.startHandshake() ;
out.write("hello".getBytes())
in.close();
out.close();
} catch(IOException e) {
}
java -Djavax.net.ssl.keyStore=MYKEYSTORECLIENT
-Djavax.net.ssl.keyStorePassword=123456 MYKEYCLIENT
-Djavax.net.ssl.trustStore=MYKEYSTORESERVER
-Djavax.net.ssl.trustStorePassword=123456
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
not found :(
(Incident Review ID: 201562)
======================================================================