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
何が問題でしょうか?
これは このバグ と同じ問題のようですが、これはJava 8 162の変更によって引き起こされ、そのクラスの名前が変更されました。これは修正されたものです。 このバグ OpenJDKで変更 here が、残念ながら、クラスの名前を変更するときにこの問題を引き起こした重大な変更でした。
代替策は、修正を含むグラスフィッシュのフォークである Payara 5.182 を使用することです。
彼の答え で @ 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 から入手しました。
これが ダウンロードリンク です。
ワオ。それはバグの地獄です。私の場合、Java JDK 8.121を使用し、Glassfish 5.1サーバーからTLS URLConnectionを開こうとしました。結果は次の例外でした:
Java.lang.NoClassDefFoundError: Sun/security/ssl/HandshakeStateManager
解決策は、JDKをバージョン8.201に更新することでした。