Java-апплет "ClassNotFoundException" на Firefox 52.4.1 - работает на IE - PullRequest
5 голосов
/ 12 апреля 2019

Нам нужно запустить старое веб-приложение, которое использует Java 8 Applet (больной), на Firefox 52.4.1 (последняя версия, совместимая с Java Applet) и Internet Explorer 11.

Апплет основан на Java 8 и распространяется сервером Apache Tomcat. Подписано и запутано (Proguard).

Пользователь подключается к веб-сайту с помощью взаимной аутентификации SSL со смарт-карты (клиенту необходим модуль PKCS11 для получения сертификата со смарт-карты). Взаимная аутентификация SSL также выполняется с помощью Java-апплета.

Все сертификаты подписаны авторизацией, добавленной во все браузеры, окна и хранилища сертификатов Java.

Вот код HTML:

<object classid='clsid:8AD9C840-044E-11D1-B3E9-00805F499D93' id='AsapiObject'>
    <param name='archive' value='../../../applet/myapplet.jar'/>
    <param name='code' value='main.package.Main'/>
    <param name='name' value='My Applet'/>
    <param name='mayscript' value='true'/>
    <comment>
        <applet id='AsapiApplet'
                name='My Applet'
                archive='../../../applet/myapplet.jar'
                code='main.package.Main'
                MAYSCRIPT="MAYSCRIPT">
        </applet>
    </comment>
</object>

(Выполнено по рекомендациям https://docs.oracle.com/javase/8/docs/technotes/guides/jweb/applet/using_tags.html#applet)

Отлично работает в IE 11, а не в Mozilla Firefox 52.4.1. Это один и тот же JRE на обоих.

В Mozilla Firefox 52.4.1 у меня есть исключение Java:

java.lang.ClassNotFoundException: main.package.Main
    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(ClassLoader.java:357)
    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(Thread.java:748)

И перед этим исключением у меня есть handshake failure exception:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2023)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1125)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
    at sun.plugin.PluginURLJarFileCallBack.connect(Unknown Source)
    at sun.plugin.PluginURLJarFileCallBack.retrieve(Unknown Source)
    at sun.net.www.protocol.jar.URLJarFile.retrieve(URLJarFile.java:205)
    at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:71)
    at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:109)
    at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
    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$800(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$2.run(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader$2.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(ClassLoader.java:357)
    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(Thread.java:748)

Я думаю, что Firefox неправильно импортирует сертификат клиента со смарт-карты.

Редактировать: в консоли Java есть еще две интересные строки:

security: Accessing keys and certificate in Mozilla user profile: null
security: JSS is not configured

Увеличивая режим отладки (-Djavax.net.debug=all), я вижу:

  • Internet Explorer:

    *** ServerHelloDone
    
    [read] MD5 and SHA1 hashes:  len = 4
    0000: 0E 00 00 00                                        ....
    ssl: KeyMgr: getting aliases: [XXXXXXX (verified: OK), YYYYYYYYYYYYYY]
    ssl: Ignoring alias XXXXXXX (1): key algorithm does not match
    ssl: Ignoring alias XXXXXXX: key algorithm does not match
    ssl: Ignoring alias XXXXXXX (2): key algorithm does not match
    ssl: KeyMgr: no matching alias found
    ssl: Ignoring alias XXXXXXX (1): key algorithm does not match
    ssl: Ignoring alias XXXXXXX: key algorithm does not match
    ssl: Ignoring alias XXXXXXX (2): key algorithm does not match
    ssl: KeyMgr: no matching alias found
    *** Certificate chain
    chain [0] = [
    ...
    
  • Mozilla Firefox:

    *** ServerHelloDone
    [read] MD5 and SHA1 hashes:  len = 4
    0000: 0E 00 00 00                                        ....
    Warning: no suitable certificate found - continuing without client authentication
    *** Certificate chain
    <Empty>
    ***
    

Я пробовал / проверял много вещей:

  • Проверка правильности установки модуля IAS_PKCS11 в Firefox:

Firefox PKCS11 module

Мне действительно нужна помощь.

Есть идеи? (Я не могу переключить апплет на другую вещь - у меня нет этого выбора)

1 Ответ

0 голосов
/ 15 апреля 2019

Похоже, что проблема в том, что ваш веб-сервер предоставляет https.

Случайный Google выдает Блог безопасности Mozilla .SHA-1 по умолчанию отключен в используемой вами версии Firefox (52).MD5 - это худший алгоритм хеширования, чем SHA-1.

Так что, вероятно, вам следует хотя бы обновить веб-сервер.Если вы отчаянно хотите продолжать использовать программное обеспечение, которое должно было быть загружено, тогда, я думаю, вы все еще можете использовать опцию конфигурации в Firefox или использовать версию 51, но я действительно не рекомендовал бы ее.

...