Java升级8.0.6.15至8.0.6.25后,握手失败,但在将旧的安全文件夹从8.0.6.15替换为新的Java版本



完成后,当我将Java从8.0.6.15升级到8.0.6.25时,我遇到了一个问题,并且我对将调用的端点进行了测试连接;endpoint.server";我握手失败了。

除了升级之外,我没有更改任何内容,所以安全策略文件等仍然不变
当我检查日志时,我确实看到了一些奇怪的东西,那就是在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安全策略文件#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/安全性方面有什么区别吗
据我所知,我之前说过,有限/无限安全策略文件不会根据给定的url进行更改。

我已经解决了这个问题,通过使用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.previder.IBMJCEPlus。

相关内容

  • 没有找到相关文章

最新更新