sun.security.ssl.SSLSessionImpl 未找到
sun.security.ssl.SSLSessionImpl not found
当我尝试使用 okhttp
或 javax.ws.rs.client.Client
时出现以下错误
java.lang.NoSuchMethodError:
sun.security.ssl.SSLSessionImpl.(Lsun/security/ssl/ProtocolVersion;Lsun/security/ssl/CipherSuite;Ljava/util/Collection;Lsun/security/ssl/SessionId;Ljava/lang/String;I)V
在sun.security.ssl包中搜索,没有SSLSessionImplclass
我正在使用 Mac OS 10.13.3 (17D102)
java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
并且 运行 我的 war 在 Glassfish 5.0
build.gradle
buildscript {
ext.kotlin_version = '1.2.30'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
}
}
group 'invoice-administration-api'
version '1.0-SNAPSHOT'
apply plugin: 'idea'
apply plugin: 'war'
apply plugin: 'kotlin'
apply plugin: 'kotlin-jpa'
apply plugin: 'kotlin-allopen'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
compileOnly group: 'javax', name: 'javaee-api', version: '8.0'
compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.13.Final'
compile group: 'org.glassfish.jersey.media', name: 'jersey-media-json-jackson', version: '2.26'
}
allOpen {
annotation('javax.ejb.Stateless')
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
编辑:因为这是 "correct answer" 和 Java 1.8.0-151 可能会缺少安全补丁。我不建议降级到这么旧的 Java 版本。
请查看 Payara 项目或 Glassfish 的新版本。
--
尝试将 Java 版本降级到 Java 1.8.0-151。应该可以。
glassfish 5 中有一个问题 Java 8 161,创建了一个 issue,但我昨天(3 月 19 日)检查过关于这个问题的夜间构建没有变化。
问题的出现是因为Glassfish将原生的sun.*
类嵌入到[glassfish5_home]/glassfish/modules/endorsed/grizzly-npn-bootstrap.jar
中,所以它与包含在[JDK_HOME]/jre/lib/jsse.jar
[=14=中的其他类发生冲突]
所以编辑 grizzly-npn-bootstrap.jar
(之前复制一份)文件并删除 sun 文件夹。
也许更优雅一点的是使用 npn-grizzly jar 中完成的现有修复:
mkdir -p scratch/glassfish5/glassfish/modules/endorsed && cd scratch
wget http://download.oracle.com/glassfish/5.0.1/nightly/glassfish-5.0.1-b02-12_03_2018.zip
wget http://central.maven.org/maven2/org/glassfish/grizzly/grizzly-npn-bootstrap/1.8.1/grizzly-npn-bootstrap-1.8.1.jar
mv grizzly-npn-bootstrap-1.8.1.jar glassfish5/glassfish/modules/endorsed/grizzly-npn-bootstrap.jar
jar uvf glassfish-5.0.1-b02-12_03_2018.zip glassfish5/glassfish/modules/endorsed/grizzly-npn-bootstrap.jar
echo "you have a patched archive for runnig with Java 8 patchlevel 191"
HTH
上述错误可能会导致在您的浏览器中显示:
连接已重置页面加载时与服务器的连接已重置。
该站点可能暂时不可用或太忙。请稍后重试。
如果无法加载任何页面,请检查计算机的网络连接。
如果您的计算机或网络受到防火墙或代理的保护,请确保允许 Firefox 访问 Web。
解决方案
下载:http://central.maven.org/maven2/org/glassfish/grizzly/grizzly-npn-bootstrap/1.8.1/grizzly-npn-bootstrap-1.8.1.jar
并替换你的 galssfish/payara grizzly-npn-bootstrap.jar。
mv grizzly-npn-bootstrap-1.8.1.jar glassfish5/glassfish/modules/endorsed/grizzly-npn-bootstrap.jar
java 1.8.0_161 中安全密码的变化破坏了 Glassfish 5,0 底层 Grizzly 服务器中的 SSL 功能。最后一个工作 java 版本是 1.8。0_152
截至撰写本文时,我可以确认 java 1.8.0_202 可与 Glassfish 5.1 一起使用(现在由 Eclipse.org 维护并可从 Eclipse.org 下载)包含的 grizzly-npn-bootstrap 是版本 1.9.0。无需删除或更改任何内容。
我刚遇到这个令人沮丧的问题,我确实想稍微扩展一下安托万上面 对我有用的回答。
请注意,我有 Glassfish 5.0 和 Java openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-8u232-b09-0ubuntu1~18.04.1-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
正如 Antoine 所说,我将 grizzly-npn-bootstrap.jar
复制到另一个位置作为备份。
我执行了 jar -xvf grizzly-npn-bootstrap.jar
以查看 jar 中的确切 类 和文件夹位置。这给了我以下输出:
cduran@cduran-VirtualBox:~/Documents$ jar -xvf grizzly-npn-bootstrap.jar
inflated: META-INF/MANIFEST.MF
created: META-INF/
created: META-INF/maven/
created: META-INF/maven/org.glassfish.grizzly/
created: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/
inflated: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/pom.properties
inflated: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/pom.xml
created: org/
created: org/glassfish/
created: org/glassfish/grizzly/
created: org/glassfish/grizzly/npn/
inflated: org/glassfish/grizzly/npn/AlpnClientNegotiator.class
inflated: org/glassfish/grizzly/npn/AlpnServerNegotiator.class
inflated: org/glassfish/grizzly/npn/ClientSideNegotiator.class
inflated: org/glassfish/grizzly/npn/NegotiationSupport.class
inflated: org/glassfish/grizzly/npn/ServerSideNegotiator.class
created: sun/
created: sun/security/
created: sun/security/ssl/
inflated: sun/security/ssl/Alerts.class
inflated: sun/security/ssl/AlpnExtension$Builder.class
inflated: sun/security/ssl/AlpnExtension.class
inflated: sun/security/ssl/ClientHandshaker.class
inflated: sun/security/ssl/ClientHandshaker.class
inflated: sun/security/ssl/ClientHandshaker.class
inflated: sun/security/ssl/ExtensionType.class
inflated: sun/security/ssl/GrizzlyNPN.class
inflated: sun/security/ssl/HandshakeMessage.class
inflated: sun/security/ssl/HandshakeMessage$CertificateMsg.class
inflated: sun/security/ssl/HandshakeMessage$CertificateRequest.class
inflated: sun/security/ssl/HandshakeMessage$CertificateVerify.class
inflated: sun/security/ssl/HandshakeMessage$CertificateVerify.class
inflated: sun/security/ssl/HandshakeMessage$ClientHello.class
inflated: sun/security/ssl/HandshakeMessage$DH_ServerKeyExchange.class
inflated: sun/security/ssl/HandshakeMessage$DistinguishedName.class
inflated: sun/security/ssl/HandshakeMessage$ECDH_ServerKeyExchange.class
inflated: sun/security/ssl/HandshakeMessage$Finished.class
inflated: sun/security/ssl/HandshakeMessage$HelloRequest.class
inflated: sun/security/ssl/HandshakeMessage$NextProtocol$Builder.class
inflated: sun/security/ssl/HandshakeMessage$NextProtocol.class
inflated: sun/security/ssl/HandshakeMessage$RSA_ServerKeyExchange.class
inflated: sun/security/ssl/HandshakeMessage$ServerHello.class
inflated: sun/security/ssl/HandshakeMessage$ServerHelloDone.class
inflated: sun/security/ssl/HandshakeMessage$ServerKeyExchange.class
inflated: sun/security/ssl/HandshakeMessage.class
inflated: sun/security/ssl/Handshaker.class
inflated: sun/security/ssl/Handshaker$DelegatedTask.class
inflated: sun/security/ssl/Handshaker.class
inflated: sun/security/ssl/HelloExtensions.class
inflated: sun/security/ssl/NextProtocolNegotiationExtension$Builder.class
inflated: sun/security/ssl/NextProtocolNegotiationExtension.class
inflated: sun/security/ssl/SSLEngineImpl.class
inflated: sun/security/ssl/ServerHandshaker.class
inflated: sun/security/ssl/ServerHandshaker.class
inflated: sun/security/ssl/ServerHandshaker.class
inflated: sun/security/ssl/ServerHandshaker.class
- 观察到 jar 文件在根级别包含 3 个文件夹:META-INF、org 和 太阳。再次根据 Antoine 的回答,我们要删除
sun
文件夹。
- 我不知道通过指定要删除的文件夹来重新创建 jar 的命令行方式,所以我执行了这个命令,我通过添加 META- 重新创建了
grizzly-npn-bootstrap.jar
INF 和 org 文件夹:jar -cvf grizzly-npn-bootstrap.jar META-INF/* org/*
- 随后,如果我执行
jar -xvf grizzly-npn-bootstrap.jar
命令,我会得到这个输出(注意不再列出 sun 文件夹):
cduran@cduran-VirtualBox:~/glassfish-5.0-web-profile/glassfish5/glassfish/modules/endorsed$ jar -xvf grizzly-npn-bootstrap.jar
created: META-INF/
inflated: META-INF/MANIFEST.MF
created: META-INF/maven/
created: META-INF/maven/org.glassfish.grizzly/
created: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/
inflated: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/pom.properties
inflated: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/pom.xml
created: org/glassfish/
created: org/glassfish/grizzly/
created: org/glassfish/grizzly/npn/
inflated: org/glassfish/grizzly/npn/ClientSideNegotiator.class
inflated: org/glassfish/grizzly/npn/ServerSideNegotiator.class
inflated: org/glassfish/grizzly/npn/AlpnClientNegotiator.class
inflated: org/glassfish/grizzly/npn/NegotiationSupport.class
inflated: org/glassfish/grizzly/npn/AlpnServerNegotiator.class
- 重新启动你的 glassfish。
在此之后,我不再收到 OP 在上面发布的错误消息:
java.lang.NoSuchMethodError:
sun.security.ssl.SSLSessionImpl.(Lsun/security/ssl/ProtocolVersion;Lsun/security/ssl/CipherSuite;Ljava/util/Collection;Lsun/security/ssl/SessionId;Ljava/lang/String;I)V
几天前我对这个问题进行了深入研究,并通过查看 JDK 源代码找到了根本原因。我认为您现在正在使用 openjdk。
这是 openjdk 1.8.0_242 之前的一个错误。
SSLSessionImpl 在 SSLSessionEngine 中使用时不会被实例化。它用作静态 class,但它只是最终的 class。
该问题已在1.8.0_252中修复,建议您升级至该版本。或者切换到 Oracle jdk1.8.0 的任何版本,因为其中没有这样的错误。
希望能帮助到你。
打开jdk:
SSLSessionEngine.java
SSLSessionImpl.java
甲骨文 jdk:
SSLSessionEngine.java
当我尝试使用 okhttp
或 javax.ws.rs.client.Client
时出现以下错误
java.lang.NoSuchMethodError: sun.security.ssl.SSLSessionImpl.(Lsun/security/ssl/ProtocolVersion;Lsun/security/ssl/CipherSuite;Ljava/util/Collection;Lsun/security/ssl/SessionId;Ljava/lang/String;I)V
在sun.security.ssl包中搜索,没有SSLSessionImplclass
我正在使用 Mac OS 10.13.3 (17D102)
java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
并且 运行 我的 war 在 Glassfish 5.0
build.gradle
buildscript {
ext.kotlin_version = '1.2.30'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
}
}
group 'invoice-administration-api'
version '1.0-SNAPSHOT'
apply plugin: 'idea'
apply plugin: 'war'
apply plugin: 'kotlin'
apply plugin: 'kotlin-jpa'
apply plugin: 'kotlin-allopen'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
compileOnly group: 'javax', name: 'javaee-api', version: '8.0'
compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.13.Final'
compile group: 'org.glassfish.jersey.media', name: 'jersey-media-json-jackson', version: '2.26'
}
allOpen {
annotation('javax.ejb.Stateless')
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
编辑:因为这是 "correct answer" 和 Java 1.8.0-151 可能会缺少安全补丁。我不建议降级到这么旧的 Java 版本。
请查看 Payara 项目或 Glassfish 的新版本。
--
尝试将 Java 版本降级到 Java 1.8.0-151。应该可以。
glassfish 5 中有一个问题 Java 8 161,创建了一个 issue,但我昨天(3 月 19 日)检查过关于这个问题的夜间构建没有变化。
问题的出现是因为Glassfish将原生的sun.*
类嵌入到[glassfish5_home]/glassfish/modules/endorsed/grizzly-npn-bootstrap.jar
中,所以它与包含在[JDK_HOME]/jre/lib/jsse.jar
[=14=中的其他类发生冲突]
所以编辑 grizzly-npn-bootstrap.jar
(之前复制一份)文件并删除 sun 文件夹。
也许更优雅一点的是使用 npn-grizzly jar 中完成的现有修复:
mkdir -p scratch/glassfish5/glassfish/modules/endorsed && cd scratch
wget http://download.oracle.com/glassfish/5.0.1/nightly/glassfish-5.0.1-b02-12_03_2018.zip
wget http://central.maven.org/maven2/org/glassfish/grizzly/grizzly-npn-bootstrap/1.8.1/grizzly-npn-bootstrap-1.8.1.jar
mv grizzly-npn-bootstrap-1.8.1.jar glassfish5/glassfish/modules/endorsed/grizzly-npn-bootstrap.jar
jar uvf glassfish-5.0.1-b02-12_03_2018.zip glassfish5/glassfish/modules/endorsed/grizzly-npn-bootstrap.jar
echo "you have a patched archive for runnig with Java 8 patchlevel 191"
HTH
上述错误可能会导致在您的浏览器中显示:
连接已重置页面加载时与服务器的连接已重置。 该站点可能暂时不可用或太忙。请稍后重试。 如果无法加载任何页面,请检查计算机的网络连接。 如果您的计算机或网络受到防火墙或代理的保护,请确保允许 Firefox 访问 Web。
解决方案 下载:http://central.maven.org/maven2/org/glassfish/grizzly/grizzly-npn-bootstrap/1.8.1/grizzly-npn-bootstrap-1.8.1.jar 并替换你的 galssfish/payara grizzly-npn-bootstrap.jar。
mv grizzly-npn-bootstrap-1.8.1.jar glassfish5/glassfish/modules/endorsed/grizzly-npn-bootstrap.jar
java 1.8.0_161 中安全密码的变化破坏了 Glassfish 5,0 底层 Grizzly 服务器中的 SSL 功能。最后一个工作 java 版本是 1.8。0_152 截至撰写本文时,我可以确认 java 1.8.0_202 可与 Glassfish 5.1 一起使用(现在由 Eclipse.org 维护并可从 Eclipse.org 下载)包含的 grizzly-npn-bootstrap 是版本 1.9.0。无需删除或更改任何内容。
我刚遇到这个令人沮丧的问题,我确实想稍微扩展一下安托万上面
请注意,我有 Glassfish 5.0 和 Java openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-8u232-b09-0ubuntu1~18.04.1-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
正如 Antoine 所说,我将
grizzly-npn-bootstrap.jar
复制到另一个位置作为备份。我执行了
jar -xvf grizzly-npn-bootstrap.jar
以查看 jar 中的确切 类 和文件夹位置。这给了我以下输出:
cduran@cduran-VirtualBox:~/Documents$ jar -xvf grizzly-npn-bootstrap.jar
inflated: META-INF/MANIFEST.MF
created: META-INF/
created: META-INF/maven/
created: META-INF/maven/org.glassfish.grizzly/
created: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/
inflated: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/pom.properties
inflated: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/pom.xml
created: org/
created: org/glassfish/
created: org/glassfish/grizzly/
created: org/glassfish/grizzly/npn/
inflated: org/glassfish/grizzly/npn/AlpnClientNegotiator.class
inflated: org/glassfish/grizzly/npn/AlpnServerNegotiator.class
inflated: org/glassfish/grizzly/npn/ClientSideNegotiator.class
inflated: org/glassfish/grizzly/npn/NegotiationSupport.class
inflated: org/glassfish/grizzly/npn/ServerSideNegotiator.class
created: sun/
created: sun/security/
created: sun/security/ssl/
inflated: sun/security/ssl/Alerts.class
inflated: sun/security/ssl/AlpnExtension$Builder.class
inflated: sun/security/ssl/AlpnExtension.class
inflated: sun/security/ssl/ClientHandshaker.class
inflated: sun/security/ssl/ClientHandshaker.class
inflated: sun/security/ssl/ClientHandshaker.class
inflated: sun/security/ssl/ExtensionType.class
inflated: sun/security/ssl/GrizzlyNPN.class
inflated: sun/security/ssl/HandshakeMessage.class
inflated: sun/security/ssl/HandshakeMessage$CertificateMsg.class
inflated: sun/security/ssl/HandshakeMessage$CertificateRequest.class
inflated: sun/security/ssl/HandshakeMessage$CertificateVerify.class
inflated: sun/security/ssl/HandshakeMessage$CertificateVerify.class
inflated: sun/security/ssl/HandshakeMessage$ClientHello.class
inflated: sun/security/ssl/HandshakeMessage$DH_ServerKeyExchange.class
inflated: sun/security/ssl/HandshakeMessage$DistinguishedName.class
inflated: sun/security/ssl/HandshakeMessage$ECDH_ServerKeyExchange.class
inflated: sun/security/ssl/HandshakeMessage$Finished.class
inflated: sun/security/ssl/HandshakeMessage$HelloRequest.class
inflated: sun/security/ssl/HandshakeMessage$NextProtocol$Builder.class
inflated: sun/security/ssl/HandshakeMessage$NextProtocol.class
inflated: sun/security/ssl/HandshakeMessage$RSA_ServerKeyExchange.class
inflated: sun/security/ssl/HandshakeMessage$ServerHello.class
inflated: sun/security/ssl/HandshakeMessage$ServerHelloDone.class
inflated: sun/security/ssl/HandshakeMessage$ServerKeyExchange.class
inflated: sun/security/ssl/HandshakeMessage.class
inflated: sun/security/ssl/Handshaker.class
inflated: sun/security/ssl/Handshaker$DelegatedTask.class
inflated: sun/security/ssl/Handshaker.class
inflated: sun/security/ssl/HelloExtensions.class
inflated: sun/security/ssl/NextProtocolNegotiationExtension$Builder.class
inflated: sun/security/ssl/NextProtocolNegotiationExtension.class
inflated: sun/security/ssl/SSLEngineImpl.class
inflated: sun/security/ssl/ServerHandshaker.class
inflated: sun/security/ssl/ServerHandshaker.class
inflated: sun/security/ssl/ServerHandshaker.class
inflated: sun/security/ssl/ServerHandshaker.class
- 观察到 jar 文件在根级别包含 3 个文件夹:META-INF、org 和 太阳。再次根据 Antoine 的回答,我们要删除
sun
文件夹。 - 我不知道通过指定要删除的文件夹来重新创建 jar 的命令行方式,所以我执行了这个命令,我通过添加 META- 重新创建了
grizzly-npn-bootstrap.jar
INF 和 org 文件夹:jar -cvf grizzly-npn-bootstrap.jar META-INF/* org/*
- 随后,如果我执行
jar -xvf grizzly-npn-bootstrap.jar
命令,我会得到这个输出(注意不再列出 sun 文件夹):
cduran@cduran-VirtualBox:~/glassfish-5.0-web-profile/glassfish5/glassfish/modules/endorsed$ jar -xvf grizzly-npn-bootstrap.jar
created: META-INF/
inflated: META-INF/MANIFEST.MF
created: META-INF/maven/
created: META-INF/maven/org.glassfish.grizzly/
created: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/
inflated: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/pom.properties
inflated: META-INF/maven/org.glassfish.grizzly/grizzly-npn-bootstrap/pom.xml
created: org/glassfish/
created: org/glassfish/grizzly/
created: org/glassfish/grizzly/npn/
inflated: org/glassfish/grizzly/npn/ClientSideNegotiator.class
inflated: org/glassfish/grizzly/npn/ServerSideNegotiator.class
inflated: org/glassfish/grizzly/npn/AlpnClientNegotiator.class
inflated: org/glassfish/grizzly/npn/NegotiationSupport.class
inflated: org/glassfish/grizzly/npn/AlpnServerNegotiator.class
- 重新启动你的 glassfish。
在此之后,我不再收到 OP 在上面发布的错误消息:
java.lang.NoSuchMethodError: sun.security.ssl.SSLSessionImpl.(Lsun/security/ssl/ProtocolVersion;Lsun/security/ssl/CipherSuite;Ljava/util/Collection;Lsun/security/ssl/SessionId;Ljava/lang/String;I)V
几天前我对这个问题进行了深入研究,并通过查看 JDK 源代码找到了根本原因。我认为您现在正在使用 openjdk。 这是 openjdk 1.8.0_242 之前的一个错误。 SSLSessionImpl 在 SSLSessionEngine 中使用时不会被实例化。它用作静态 class,但它只是最终的 class。 该问题已在1.8.0_252中修复,建议您升级至该版本。或者切换到 Oracle jdk1.8.0 的任何版本,因为其中没有这样的错误。 希望能帮助到你。 打开jdk: SSLSessionEngine.java SSLSessionImpl.java 甲骨文 jdk: SSLSessionEngine.java