java.lang.NoClassDefFoundError: sun/security/ssl/SupportedEllipticCurvesExtension
java.lang.NoClassDefFoundError: sun/security/ssl/SupportedEllipticCurvesExtension
我正在尝试保护 Web 应用程序的安全,以便我可以使用带 HTTPS 的安全数据传输层 TLS/SSL。我正在使用 glassfish server 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.run(Handshaker.java:924)
at sun.security.ssl.Handshaker.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.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.access0(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
可能是什么问题?
这看起来与 this bug, which is caused by a change in Java 8 162, where that class was renamed. Which was a fix for this bug in OpenJDK which was changed here 是同一个问题,但不幸的是,这是在重命名 class.
时引入此问题的重大更改
另一种方法是使用 Payara 5.182,一种包含修复程序的 glassfish 分支。
NoClassDefFoundError 当 class 信息未加载到内存中时,通常会生成错误。需要检查实际class文件的位置引用是否无效或者class文件是否存在。
我查看了 bug mentioned by @Jonathan Coustick in 。问题的根源在于 Glassfish(或 Payara)使用了旧版本的 grizzly
。所以,我想用更新的版本替换 grizzly-npn-bootstrap.jar
可能会解决问题。
此 JAR 文件位于 <glassfish-root>/glassfish/modules/endorsed
目录(对于 GlassFish 服务器)<payara-root>/glassfish/lib
目录(对于 Payara 服务器)。 1.7 之前的版本会出现此错误。所以,我从 maven.org 那里得到了最新版本(目前是 1.9),它非常有效。
这是 download link。
哇。那真是个错误。
就我而言,我使用 Java JDK 8.121 并尝试从我的 Glassfish 5.1 服务器打开 TLS URLConnection。
结果是这个异常:
java.lang.NoClassDefFoundError: sun/security/ssl/HandshakeStateManager
解决方案是将 JDK 更新到版本 8.201。
我在 payara 服务器中发现了同样的错误。
从 payara 服务器删除“grizzly-npn-bootstrap.jar”文件。
在“grizzly-npn-bootstrap.jar”文件的 payara 服务器位置是
“[root-payara]/glassfish/lib”。
windows“c:/users/[用户名]/Payara-server”中的默认 [root-payara] 文件夹
我在 intelliJ 中得到了相同的结果,我有 dk1.8。0_111.jdk,我下载了 jdk1.8。0_301.jdk 并更改了 JDK 路径以指向 jdk1.8 .0_301.jdk intelliJ 主页。
由于我使用的是 MAC 路径是:/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home
它解决了我的问题。
我正在尝试保护 Web 应用程序的安全,以便我可以使用带 HTTPS 的安全数据传输层 TLS/SSL。我正在使用 glassfish server 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.run(Handshaker.java:924)
at sun.security.ssl.Handshaker.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.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.access0(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
可能是什么问题?
这看起来与 this bug, which is caused by a change in Java 8 162, where that class was renamed. Which was a fix for this bug in OpenJDK which was changed here 是同一个问题,但不幸的是,这是在重命名 class.
时引入此问题的重大更改另一种方法是使用 Payara 5.182,一种包含修复程序的 glassfish 分支。
NoClassDefFoundError 当 class 信息未加载到内存中时,通常会生成错误。需要检查实际class文件的位置引用是否无效或者class文件是否存在。
我查看了 bug mentioned by @Jonathan Coustick in grizzly
。所以,我想用更新的版本替换 grizzly-npn-bootstrap.jar
可能会解决问题。
此 JAR 文件位于 <glassfish-root>/glassfish/modules/endorsed
目录(对于 GlassFish 服务器)<payara-root>/glassfish/lib
目录(对于 Payara 服务器)。 1.7 之前的版本会出现此错误。所以,我从 maven.org 那里得到了最新版本(目前是 1.9),它非常有效。
这是 download link。
哇。那真是个错误。 就我而言,我使用 Java JDK 8.121 并尝试从我的 Glassfish 5.1 服务器打开 TLS URLConnection。 结果是这个异常:
java.lang.NoClassDefFoundError: sun/security/ssl/HandshakeStateManager
解决方案是将 JDK 更新到版本 8.201。
我在 payara 服务器中发现了同样的错误。 从 payara 服务器删除“grizzly-npn-bootstrap.jar”文件。
在“grizzly-npn-bootstrap.jar”文件的 payara 服务器位置是 “[root-payara]/glassfish/lib”。
windows“c:/users/[用户名]/Payara-server”中的默认 [root-payara] 文件夹
我在 intelliJ 中得到了相同的结果,我有 dk1.8。0_111.jdk,我下载了 jdk1.8。0_301.jdk 并更改了 JDK 路径以指向 jdk1.8 .0_301.jdk intelliJ 主页。 由于我使用的是 MAC 路径是:/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home
它解决了我的问题。