web-dev-qa-db-ja.com

java.lang.NoClassDefFoundError:Sun / security / ssl / SupportedEllipticCurvesExtension

HTTPSで安全なデータ転送レイヤーTLS/SSLを使用できるように、Webアプリケーションを保護しようとしています。 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

何が問題でしょうか?

6

これは このバグ と同じ問題のようですが、これはJava 8 162の変更によって引き起こされ、そのクラスの名前が変更されました。これは修正されたものです。 このバグ OpenJDKで変更 here が、残念ながら、クラスの名前を変更するときにこの問題を引き起こした重大な変更でした。

代替策は、修正を含むグラスフィッシュのフォークである Payara 5.182 を使用することです。

10

彼の答え@ Jonathan Coustick によって言及された bug を調べました。問題の原因は、Glassfish(またはPayara)が古いバージョンのgrizzlyを使用していることです。ですから、grizzly-npn-bootstrap.jarを新しいバージョンに置き換えることで問題が解決するかもしれません。

このJARファイルは<glassfish-root>/glassfish/modules/endorsedディレクトリにあります(GlassFishサーバーの場合)<payara-root>/glassfish/libディレクトリ(Payaraの場合)サーバ)。 1.7より前のバージョンは、このエラーの影響を受けます。だから、最新バージョン(現在は1.9)を maven.org から入手しました。

これが ダウンロードリンク です。

5
M.S. Dousti

ワオ。それはバグの地獄です。私の場合、Java JDK 8.121を使用し、Glassfish 5.1サーバーからTLS URLConnectionを開こうとしました。結果は次の例外でした:

Java.lang.NoClassDefFoundError: Sun/security/ssl/HandshakeStateManager

解決策は、JDKをバージョン8.201に更新することでした。

0
Vova