当前位置: 首页 > 知识库问答 >
问题:

Java升级后8.0.6.158.0.6.25handshake_failure,但工作后替换旧的安全文件夹从8.0.6.15到新的java版本8.0.6.25

李兴为
2023-03-14

完成后,当我将Java从8.0.6.15升级到8.0.6.25时,我有一个问题,我测试连接到一个endpoint,我将称之为“endpoint.server”,我得到一个handshake_failure。

除了升级之外,我没有更改任何东西,所以安全策略文件等仍然相同。
当我检查日志时,我确实看到了一些奇怪的东西,即在ClientHello握手消息阶段:

"ClientHello": {
  "client version"      : "TLSv1.2",
  "random"              : "43 8B 8E 7E 3E 91 E9 9D 4A 1B 60 40 9B 42 AD ED 18 14 48 06 3E 84 4D A3 C4 F8 ED 8D DE 73 1A EA",
  "session id"          : "DD 61 0A ED B9 2D 52 DA EB 5C DF 1C 61 B3 73 49 9C 7C A4 CF C5 E2 1D 00 F5 24 B2 DB 5B 58 B0 94",
  "cipher suites"       : "[TLS_AES_256_GCM_SHA384(0x1302), TLS_CHACHA20_POLY1305_SHA256(0x1303), TLS_AES_128_GCM_SHA256(0x1301)]",
  "compression methods" : "00",
  "extensions"          : [
    "server_name (0)": {
      type=host_name (0), value=endpoint.server
    },
    "supported_groups (10)": {
      "versions": [secp256r1, secp384r1, secp521r1]
    },
    "signature_algorithms (13)": {
      "signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_ps
s_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, ecdsa_sha1, rsa_pkcs1_sha1]
    },
    "signature_algorithms_cert (50)": {
      "signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_ps
s_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, ecdsa_sha1, rsa_pkcs1_sha1]
    },
    "supported_versions (43)": {
      "versions": [TLSv1.3]
    },
    "psk_key_exchange_modes (45)": {
      "ke_modes": [psk_dhe_ke]
    },
    "key_share (51)": {
      "client_shares": [
        {
          "named group": secp256r1
          "key_exchange": {
            0000: 04 ac 3a de da 54 45 3a  48 e2 95 d9 97 24 bd 38  .....TE.H......8
            0010: cf bb e3 8c b9 98 e6 31  46 06 da 89 db 07 2e c7  .......1F.......
            0020: 77 79 8d bc 39 8b 54 f8  a1 ab 27 1f 39 b2 6e aa  wy..9.T.....9.n.
            0030: be ae 5d 50 c1 19 69 4a  9f 60 20 1a 61 40 ba ce  ...P..iJ....a...
            0040: cf
          }
        },
      ]
    }
  ]
}

如果我错了,请纠正我,但似乎它想使用以下密码:

[TLS_AES_256_GCM_SHA384(0x1302), TLS_CHACHA20_POLY1305_SHA256(0x1303), TLS_AES_128_GCM_SHA256(0x1301)]

这些密码用于TLSv1.3,但根据以下内容,它使用的是TLSv1.2。

"client version"      : "TLSv1.2"

我尝试连接到“endpoint.server”的服务器仅支持 TLSv1.2 和以下密码:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA265
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA265

对于我发现的内容,它不可能是有限/无限的安全策略文件,因为它们不会根据此 url 更改:https://www.ibm.com/docs/en/sdk-java-technology/8?topic=guide-sdk-security-policy-files#sdkpolicyfiles

我也尝试了这个设置:com.ibm.jsse2.overrideDefaultCSName,值为true和false,但这没有任何作用。
在java.security中,它使用以下设置:

jdk.certpath.disabledAlgorithms = [MD2, MD5, SHA1 jdkCA & usage TLSServer, RSA keySize < 1024, DSA keySize < 1024, EC keySize < 224]
jdk.tls.disabledAlgorithms = [SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, DESede, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, DES_CBC]

如您所见,这里没有任何关于我禁用TLSv1.2的内容。

我还尝试了以下方法,那就是我将8.0.6.15版本的java/jre/lib/security的完整文件夹复制到8.0.6.25。当我在这之后做一个测试连接时,它工作了。

有人知道这两个版本的java/jre/lib/Security有什么区别吗?
据我所知,我之前说过,有限/无限安全策略文件不会根据给定的url更改。

共有1个答案

陆昕
2023-03-14

我已经解决了这个问题,通过使用Java 8.0.6.25编辑java.security文件,它看起来像:

security.provider.1=com.ibm.jsse2.IBMJSSEProvider2
security.provider.2=com.ibm.crypto.provider.IBMJCE
security.provider.3=com.ibm.crypto.plus.provider.IBMJCEPlus
security.provider.4=com.ibm.security.jgss.IBMJGSSProvider
security.provider.5=com.ibm.security.cert.IBMCertPath
security.provider.6=com.ibm.security.sasl.IBMSASL
security.provider.7=com.ibm.xml.crypto.IBMXMLCryptoProvider
security.provider.8=com.ibm.xml.enc.IBMXMLEncProvider
security.provider.9=com.ibm.security.jgss.mech.spnego.IBMSPNEGO
security.provider.10=sun.security.provider.Sun

我已将其更改为:

security.provider.1=com.ibm.jsse2.IBMJSSEProvider2
security.provider.2=com.ibm.crypto.provider.IBMJCE
security.provider.3=com.ibm.security.jgss.IBMJGSSProvider
security.provider.4=com.ibm.security.cert.IBMCertPath
security.provider.5=com.ibm.security.sasl.IBMSASL
security.provider.6=com.ibm.xml.crypto.IBMXMLCryptoProvider
security.provider.7=com.ibm.xml.enc.IBMXMLEncProvider
security.provider.8=com.ibm.security.jgss.mech.spnego.IBMSPNEGO
security.provider.9=sun.security.provider.Sun

出于某种原因,它想使用com.ibm.crypto.plus.provider.IBMJCEPlus,即使失败了,它也不会尝试另一个,所以最简单的方法是从java.security文件中删除com.ibm.crypto.plus.provider.IBMJCEPlus。

 类似资料:
  • 我在Ubuntu18.04上使用ELasticsearch。当我尝试运行“./elasticsearch-setup-passwords”脚本时,它显示以下错误。 未来版本的Elasticsearch将需要Java 11;您的Java版本[/usr/lib/jvm/java-8-openjdk-amd64/jre]不符合此要求 但当我检查Jaa版本时,它显示的是Java 11号。 我把Java从8

  • 我正在尝试在我们现有的多个项目中将spring从2.1.1升级到2.2.0。我已经在几个项目中完成了这项工作,一切都很顺利。 在当前项目中,我做了相同的更改: 现在,当我尝试启动我的应用程序时,我遇到以下错误: 我检查过,根据文档,这个类应该在我当前的spring core版本中可用:https://docs.spring.io/spring/docs/5.2.0.RELEASE/javadoc-

  • 我刚刚更新了一些flutter软件包。但是,在执行flutter运行时我一直收到此错误。如果我将apk直接安装到设备上,它可以正常工作(这意味着我可以执行flutter build apk),但是,在调试模式下看不到运气。 我最初发布这个帖子时有一个multidex问题,我想我已经通过在build.gradle中将gradle地址更新为4.3.zip解决了这个问题。 任何帮助都将不胜感激。 这是我

  • 本文向大家介绍ASP.NET 5升级后如何删除旧版本的DNX,包括了ASP.NET 5升级后如何删除旧版本的DNX的使用技巧和注意事项,需要的朋友参考一下 ASP.NET 5各种升级后旧版本的DNX不会删除,想删除旧版本的DNX,可以通过以下命令完成,在此之前先介绍一下DNX架构及运行原理 DNX是ASP.NET程序运行的核心,其遵循如下两个准则: DNX应该是自包含的,DNX在解析完应用程序依赖

  • 我已经将Typo3从版本4升级到版本7,ajaxendpoint不再工作,有人知道typoscript中简单ajaxendpoint定义的使用是否有未记录的更改吗?或者可能是请求的URL现在不同了? 原始定义如下所示: 控制器的简化版本如下所示: 原始请求url为: 指数php?id=176 我仅在调试模式下获得as请求结果: 因此,打字稿的定义似乎在起作用,但似乎有些地方出了问题:( 更新:我找

  • 我正在运行《docker compose》中的jenkins,来自图片jenkins/jenkins。升级到Jenkins 2.277.1后,LDAP身份验证停止工作,我无法登录。我收到以下错误: 詹金斯。docker。new\u 1 | 2021 06-04 14:49:31.3110000[id=138]警告o.j.p.p.DiskUsageCollector#collect:无法获取磁盘使用