Chargement de l'applet Java dans Firefox sur HTTPS


Nous avons développé une application d'analyse qui utilise une applet Java spéciale (développée par IBM) pour afficher certaines données. C'est une application Django qui fonctionne sur Apache. Tout a bien fonctionné jusqu'à ce que nous passions à SSL. Le comportement est très étrange et nous sommes confus et un peu inquiets de savoir comment faire fonctionner l'applet sur HTTPS. Ok, j'ai lu beaucoup de discussions sur les mises à jour de sécurité qui ont été introduites dans JRE 7u51 (plugins Java JRE) mais je pense que ce n'est pas la raison de nos problèmes.

Mon environnement actuel est:

  • Firefox: version 27.0
  • IE Explorer: version 10.0.12
  • Apache: version 2.2
  • Certificat SSL défini dans Apache: Certificats auto-signés générés avec openssl

Exécution sur HTTP: L'applet Java s'exécute sur les deux navigateurs (Firefox, IE) et les données sont affichées correctement.

Exécution sur HTTPS:

A) IE Explorer: L'applet Java s'exécute sans erreur et le les données sont affichées correctement.

B) Firefox: ClassNotFoundException est levée. Détails:

    cache: Initialize resource manager: com.sun.deploy.cache.ResourceProviderImpl@499f7d
basic: Added progress listener: sun.plugin.util.ProgressMonitorAdapter@1e95d95
basic: Plugin2ClassLoader.addURL parent called for https://demoapp.domain.com/s/ixv/i2Viewer.jar
security: Accessing keys and certificate in Mozilla user profile: null
security: JSS is not configured
basic: Loading Java Applet ...
network: Cache entry not found [url: https://demoapp.domain.com/s/ixv/i2Viewer.jar, version: null]
network: Connecting https://demoapp.domain.com/s/ixv/i2Viewer.jar with proxy=DIRECT
network: Connecting http://demoapp.domain.com:443/ with proxy=DIRECT
security: Loading certificates from Deployment session certificate store
security: Loaded certificates from Deployment session certificate store
security: Checking if SSL certificate is in Deployment permanent certificate store
java.net.SocketException: Software caused connection abort: recv failed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at sun.security.ssl.InputRecord.readFully(Unknown Source)
    at sun.security.ssl.InputRecord.read(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.waitForClose(Unknown Source)
    at sun.security.ssl.HandshakeOutStream.flush(Unknown Source)
    at sun.security.ssl.Handshaker.sendChangeCipherSpec(Unknown Source)
    at sun.security.ssl.ClientHandshaker.sendChangeCipherAndFinish(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.https.HttpsURLConnectionImpl.connect(Unknown Source)
    at sun.plugin.PluginURLJarFileCallBack.connect(Unknown Source)
    at sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source)
    at sun.net.www.protocol.jar.URLJarFile.retrieve(Unknown Source)
    at sun.net.www.protocol.jar.URLJarFile.getJarFile(Unknown Source)
    at sun.net.www.protocol.jar.JarFileFactory.get(Unknown Source)
    at sun.net.www.protocol.jar.JarURLConnection.connect(Unknown Source)
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(Unknown Source)
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFileInternal(Unknown Source)
    at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown Source)
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.getJarFile(Unknown Source)
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.access$1000(Unknown Source)
    at com.sun.deploy.security.DeployURLClassPath$JarLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.ensureOpen(Unknown Source)
    at com.sun.deploy.security.DeployURLClassPath$JarLoader.<init>(Unknown Source)
    at com.sun.deploy.security.DeployURLClassPath$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
    at com.sun.deploy.security.DeployURLClassPath.getLoader(Unknown Source)
    at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin2.applet.Plugin2ClassLoader.findClassHelper(Unknown Source)
    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 sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
network: Cache entry not found [url: https://demoapp.domain.com/investigation/com/VDK/viewer/Chart.class, version: null]
network: Connecting https://demoapp.domain.com/investigation/com/VDK/viewer/Chart.class with proxy=DIRECT
network: Connecting http://demoapp.domain.com:443/ with proxy=DIRECT
security: Loading certificates from Deployment session certificate store
security: Loaded certificates from Deployment session certificate store
security: Checking if SSL certificate is in Deployment permanent certificate store
network: Cache entry not found [url: https://demoapp.domain.com/investigation/com/VDK/viewer/Chart/class.class, version: null]
network: Connecting https://demoapp.domain.com/investigation/com/VDK/viewer/Chart/class.class with proxy=DIRECT
network: Connecting http://demoapp.domain.com:443/ with proxy=DIRECT
security: Loading certificates from Deployment session certificate store
security: Loaded certificates from Deployment session certificate store
security: Checking if SSL certificate is in Deployment permanent certificate store
java.lang.ClassNotFoundException: com.VDK.viewer.Chart.class
    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 sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
basic: load: class com.VDK.viewer.Chart.class not found.
java.lang.ClassNotFoundException: com.VDK.viewer.Chart.class
    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 sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Ignored exception: java.lang.ClassNotFoundException: com.VDK.viewer.Chart.class
basic: Dialog type is not candidate for embedding
basic: Removed progress listener: sun.plugin.util.ProgressMonitorAdapter@1e95d95
security: Reset deny session certificate store

En fin de compte, je veux ajouter que nous avons eu les mêmes problèmes lors de l'exécution de l'applet avec JRE 6 et sans paramètres appropriés dans META-INF qui sont obligatoires pour JRE 7u51. Je pense donc que la version de Java JRE (version plugins) n'est pas la raison de nos problèmes. De plus, l'applet fonctionne parfaitement sur IE Explorer (HTTP et HTTPS).

Une idée ?

Author: michas, 2014-02-09

1 answers

Je pense que le message d'erreur donne déjà la réponse:

Vérifier si le certificat SSL est en déploiement certificat permanent magasin

Vous avez dit que vous utilisez un certificat auto-signé? La raison peut être que java rejette (correctement) le certificat auto-signé. Avez-vous vérifié que ce certificat se trouve dans le magasin de confiance java? Java utilise un magasin différent pour son certificat en tant que navigateur Web. Vous pouvez le trouver sous Propriétés système \ Java \ Security \ Manage Certificats et là, vous pouvez importer votre certificat...

Informations générales:

Il y a actuellement trois truststores dans ce domaine:

  • Windows System Certificate Store (qui est également utilisé par IE et Chrome)
  • Firefox Certificate Store (j'ai lu quelque part qu'ils passeraient au Windows certificate store à l'avenir, mais je ne sais pas avec certitude)
  • Magasin de certificats Java
 0
Author: Lonzak, 2014-02-11 08:03:15