JDK-7173050 : Applet loading failed with multiple SSL client certificates when console off
  • Type: Bug
  • Component: deploy
  • Sub-Component: plugin
  • Affected Version: 7
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2012-05-31
  • Updated: 2012-06-01
  • Resolved: 2012-06-01
Related Reports
Relates :  
Description
FULL PRODUCT VERSION :
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b22)
Java HotSpot(TM) Client VM (build 23.0-b21, mixed mode, sharing)


ADDITIONAL OS VERSION INFORMATION :
Windows XP (Microsoft Windows XP [Version 5.1.2600])
Windows Vista (Microsoft Windows [Version 6.0.6002])
Windows 7 (Microsoft Windows [Version 6.1.7601])


EXTRA RELEVANT SYSTEM CONFIGURATION :
Internet Explorer 7 (7.0.6002.18005)
Internet Explorer 8 (8.0.7601.17514)


A DESCRIPTION OF THE PROBLEM :
When browser has multiple SSL client certificates and Java console is off, applet loading stopped.


REGRESSION.  Last worked in version 6u31

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
 - Install CA certificates to client.
 - Install multiple SSL client certificates to client.
 - Access to web site with applet require SSL client authentication via https.


EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
 - "Choose a digital certificate" dialog opened
 - Java applet is loaded after selecting a certificate

ACTUAL -
 - Applet loading is stopped

ERROR MESSAGES/STACK TRACES THAT OCCUR :
Java trace is stopped below
----
matching alias: MSCryptoRSAPrivateKey [HCRYPTPROV=901040, HCRYPTKEY=1035264, key length=1024bits]
java.lang.ClassCircularityError: default
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Unknown Source)
  at sun.awt.FontConfiguration$2.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  at sun.awt.FontConfiguration.getFontCharsetEncoder(Unknown Source)
  at sun.awt.FontConfiguration.buildFontDescriptors(Unknown Source)
  at sun.awt.FontConfiguration.getFontDescriptors(Unknown Source)
  at sun.awt.FontConfiguration.getFontDescriptors(Unknown Source)
  at sun.awt.PlatformFont.<init>(Unknown Source)
  at sun.awt.windows.WFontPeer.<init>(Unknown Source)
  at sun.awt.windows.WToolkit.getFontPeer(Unknown Source)
  at java.awt.Font.getPeer_NoClientCode(Unknown Source)
  at java.awt.Font.getPeer(Unknown Source)
  at sun.awt.windows.WComponentPeer._setFont(Native Method)
  at sun.awt.windows.WComponentPeer.setFont(Unknown Source)
  at sun.awt.windows.WWindowPeer.initialize(Unknown Source)
  at sun.awt.windows.WFramePeer.initialize(Unknown Source)
  at sun.awt.windows.WComponentPeer.<init>(Unknown Source)
  at sun.awt.windows.WCanvasPeer.<init>(Unknown Source)
  at sun.awt.windows.WPanelPeer.<init>(Unknown Source)
  at sun.awt.windows.WWindowPeer.<init>(Unknown Source)
  at sun.awt.windows.WFramePeer.<init>(Unknown Source)
  at sun.awt.windows.WToolkit.createFrame(Unknown Source)
  at java.awt.Frame.addNotify(Unknown Source)
  at javax.swing.SwingUtilities$SharedOwnerFrame.addNotify(Unknown Source)
  at java.awt.Dialog.addNotify(Unknown Source)
  at java.awt.Dialog.conditionalShow(Unknown Source)
  at java.awt.Dialog.show(Unknown Source)
  at java.awt.Component.show(Unknown Source)
  at java.awt.Component.setVisible(Unknown Source)
  at java.awt.Window.setVisible(Unknown Source)
  at java.awt.Dialog.setVisible(Unknown Source)
  at sun.plugin.util.PluginSysUtil.execute(Unknown Source)
  at sun.plugin.util.PluginSysUtil.execute(Unknown Source)
  at sun.plugin.util.PluginSysUtil.delegate(Unknown Source)
  at com.sun.deploy.util.DeploySysRun.execute(Unknown Source)
  at com.sun.deploy.util.DeploySysRun$1.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  at com.sun.deploy.util.DeploySysRun.executePrivileged(Unknown Source)
  at com.sun.deploy.security.X509DeployKeyManager.chooseClientAlias(Unknown Source)
  at sun.security.ssl.AbstractKeyManagerWrapper.chooseClientAlias(Unknown Source)
  at sun.security.ssl.ClientHandshaker.serverHelloDone(Unknown Source)
  at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
  at sun.security.ssl.Handshaker.processLoop(Unknown Source)
  at sun.security.ssl.Handshaker.process_record(Unknown Source)
  at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
  at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
  at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
  at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
  at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
  at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
  at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
  at java.net.HttpURLConnection.getResponseCode(Unknown Source)
  at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
  at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
  at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
  at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
  at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
  at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
  at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
  at java.lang.ClassLoader.loadClass(Unknown Source)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Unknown Source)
  at sun.awt.FontConfiguration$2.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  at sun.awt.FontConfiguration.getFontCharsetEncoder(Unknown Source)
  at sun.awt.FontConfiguration.buildFontDescriptors(Unknown Source)
  at sun.awt.FontConfiguration.getFontDescriptors(Unknown Source)
  at sun.awt.FontConfiguration.getFontDescriptors(Unknown Source)
  at sun.awt.PlatformFont.<init>(Unknown Source)
  at sun.awt.windows.WFontPeer.<init>(Unknown Source)
  at sun.awt.windows.WToolkit.getFontPeer(Unknown Source)
  at java.awt.Font.getPeer_NoClientCode(Unknown Source)
  at java.awt.Font.getPeer(Unknown Source)
  at sun.awt.windows.WComponentPeer._setFont(Native Method)
  at sun.awt.windows.WComponentPeer.setFont(Unknown Source)
  at sun.awt.windows.WWindowPeer.initialize(Unknown Source)
  at sun.awt.windows.WFramePeer.initialize(Unknown Source)
  at sun.awt.windows.WComponentPeer.<init>(Unknown Source)
  at sun.awt.windows.WCanvasPeer.<init>(Unknown Source)
  at sun.awt.windows.WPanelPeer.<init>(Unknown Source)
  at sun.awt.windows.WWindowPeer.<init>(Unknown Source)
  at sun.awt.windows.WFramePeer.<init>(Unknown Source)
  at sun.awt.windows.WEmbeddedFramePeer.<init>(Unknown Source)
  at sun.awt.windows.WToolkit.createEmbeddedFrame(Unknown Source)
  at sun.awt.windows.WEmbeddedFrame.addNotify(Unknown Source)
  at sun.plugin2.main.client.PluginEmbeddedFrame.addNotify(Unknown Source)
  at sun.awt.windows.WEmbeddedFrame.<init>(Unknown Source)
  at sun.plugin2.main.client.PluginEmbeddedFrame.<init>(Unknown Source)
  at com.sun.deploy.uitoolkit.impl.awt.AWTPluginEmbeddedFrameWindow.<init>(Unknown Source)
  at com.sun.deploy.uitoolkit.impl.awt.AWTPluginWindowFactory.createWindow(Unknown Source)
  at sun.plugin2.main.client.PluginMain$AppletFrameCreator.run(Unknown Source)
  at java.awt.event.InvocationEvent.dispatch(Unknown Source)
  at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
  at java.awt.EventQueue.access$000(Unknown Source)
  at java.awt.EventQueue$3.run(Unknown Source)
  at java.awt.EventQueue$3.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
  at java.awt.EventQueue.dispatchEvent(Unknown Source)
  at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
  at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
  at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
  at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  at java.awt.EventDispatchThread.run(Unknown Source)
PluginMain: could not create embedded frame
Exception in thread "AWT-EventQueue-2" java.lang.IllegalStateException: Applet's parent container not set up
  at sun.plugin2.applet.Plugin2Manager.start(Unknown Source)
  at sun.plugin2.main.client.PluginMain$StartAppletRunner.run(Unknown Source)
  at java.awt.event.InvocationEvent.dispatch(Unknown Source)
  at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
  at java.awt.EventQueue.access$000(Unknown Source)
  at java.awt.EventQueue$3.run(Unknown Source)
  at java.awt.EventQueue$3.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
  at java.awt.EventQueue.dispatchEvent(Unknown Source)
  at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
  at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
  at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
  at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  at java.awt.EventDispatchThread.run(Unknown Source)
Finalizer, called close()
Finalizer, called closeInternal(true)
Finalizer, SEND TLSv1 ALERT:  warning, description = close_notify
Finalizer, Exception sending alert: java.net.SocketException: Socket Closed
Finalizer, called closeSocket(selfInitiated)
----


REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
This is reproducible with following:
 - Apache 2.2.22 (httpd-2.2.22-win32-x86-openssl-0.9.8t)
 - BarChart (demo applet in JDK)

---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
Bypassing this bug with flowing configurations
 - Set java console on
 - Using Java 6u32
 - Install only one SSL client certificate to client


SUPPORT :
YES