【问题标题】:java.lang.NoClassDefFoundError: sun/security/ssl/SupportedEllipticCurvesExtensionjava.lang.NoClassDefFoundError: sun/security/ssl/SupportedEllipticCurvesExtension
【发布时间】:2018-08-13 05:13:39
【问题描述】:

我正在尝试保护 Web 应用程序,以便我可以将安全数据传输层 TLS/SSL 与 HTTPS 结合使用。我正在使用 glassfish 服务器 5。启动服务器后,我执行了 https://localhost:8181,它给了我这个异常:

    Warning:   GRIZZLY0013: Exception during FilterChain execution
java.lang.NoClassDefFoundError: sun/security/ssl/SupportedEllipticCurvesExtension
    at sun.security.ssl.HelloExtensions.<init>(HelloExtensions.java:82)
    at sun.security.ssl.HandshakeMessage$ClientHello.<init>(HandshakeMessage.java:362)
    at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:223)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:984)
    at sun.security.ssl.Handshaker$1.run(Handshaker.java:924)
    at sun.security.ssl.Handshaker$1.run(Handshaker.java:921)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1379)
    at org.glassfish.grizzly.ssl.SSLUtils.executeDelegatedTask(SSLUtils.java:274)
    at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:708)
    at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:622)
    at org.glassfish.grizzly.ssl.SSLBaseFilter.handleRead(SSLBaseFilter.java:334)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:593)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573)
    at java.lang.Thread.run(Thread.java:748)

浏览器(firefox)显示: error

可能是什么问题?

【问题讨论】:

    标签: security jakarta-ee glassfish netbeans-8 glassfish-5


    【解决方案1】:

    这看起来与 this bug 相同,这是由 Java 8 162 中的更改引起的,该类已重命名。这是对 OpenJDK 中 this bug 的修复,它已更改为 here,但不幸的是,这是一个重大更改,在重命名类时引入了此问题。

    另一种方法是使用 Payara 5.182,它是 glassfish 的一个分支,其中包含一个修复程序。

    【讨论】:

    • 这似乎在 Glassfish 5.0.1 中得到了修复(它仍在开发中,所以你现在必须下载一个夜间版本)。
    【解决方案2】:

    我查看了@Jonathan Coustickhis answer 中提到的bug。问题的根源在于 Glassfish(或 Payara)使用了旧版本的 grizzly。所以,我想也许用更新的版本替换 grizzly-npn-bootstrap.jar 可以解决问题。

    此 JAR 文件位于 &lt;glassfish-root&gt;/glassfish/modules/endorsed 目录(用于 GlassFish 服务器)&lt;payara-root&gt;/glassfish/lib 目录(用于 Payara 服务器)。 1.7 之前的版本会出现此错误。所以,我从maven.org 获得了最新版本(目前为 1.9),它的工作原理非常棒。

    这是download link

    【讨论】:

    • 我也必须将我的 JDK 升级到 1.8.0_201。
    • 我试图以这种方式修复我的 glassfish,但我仍然收到 NoClassDefFoundError: sun/security/ssl/HelloExtension 的相同错误,尽管它是由这个 jar 提供的..
    • 它通过删除 grizzly-npn-bootstrap.jar (glassfish 5.1 with jdk 8 261) 的 sun 文件夹对我有用
    【解决方案3】:

    我在intelliJ中得到了同样的结果,我有dk1.8.0_111.jdk,我下载了jdk1.8.0_301.jdk并将JDK路径更改为指向intelliJ中的jdk1.8.0_301.jdk Home。 由于我使用的是 MAC,因此路径是:/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home

    它解决了我的问题。

    【讨论】:

      【解决方案4】:

      哇。这真是个错误。 就我而言,我使用 Java JDK 8.121 并尝试从 Glassfish 5.1 服务器打开 TLS URLConnection。 结果是这个异常:

      java.lang.NoClassDefFoundError: sun/security/ssl/HandshakeStateManager
      

      解决方案是将 JDK 更新到 8.201 版。

      【讨论】:

        【解决方案5】:

        我在 payara 服务器中发现了同样的错误。 从payara服务器中删除“grizzly-npn-bootstrap.jar”文件。

        在“grizzly-npn-bootstrap.jar”文件的payara服务器位置是 “[root-payara]/glassfish/lib”。

        windows "c:/users/[user-name]/Payara-server" 中的默认 [root-payara] 文件夹

        【讨论】:

          【解决方案6】:

          NoClassDefFoundError 当类信息未加载到内存时,通常会生成错误。需要检查实际类文件的位置引用是否无效或类文件是否存在。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-04-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-16
            • 2013-08-07
            • 2014-06-08
            相关资源
            最近更新 更多