【发布时间】:2016-02-15 22:10:32
【问题描述】:
我正在尝试通过 java 客户端连接到 web 服务。我正在使用 JRE 1.6 (IBM):
java version "1.6.0"
Java(TM) SE Runtime Environment (build pwi3260_26sr2fp1-20120622_01(SR2 FP1))
IBM J9 VM (build 2.6, JRE 1.6.0 Windows 7 x86-32 20120618_113791 (JIT enabled, A
OT enabled).
我已在我的代码中指定使用 TLSv1.2 来实现 ssl 安全性。
System.setProperty("javax.net.debug", "ssl");
System.setProperty("https.protocols", "TLSv1.2");
我特别希望在执行握手时使用 SHA256 消息摘要,但是,从下面的日志中我看到没有使用 SHA256。
*** ClientHello, TLSv1.2
RandomCookie: GMT: 1438792776 bytes = { 179, 7, 242, 221, 47, 208, 29, 106,238, 203, 116, 71, 161, 184, 231, 114, 231, 208, 6, 66, 183, 12, 170, 245, 15, 62, 193, 235 }
Session ID: {}
Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA,SSL_RSA_WITH_AES_128_CBC_SHA, SSL_DHE_RSA_WITH_AES_128_CBC_SHA, SSL_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RENEGO_PROTECTION_REQUEST]
Compression Methods: { 0 }
Extension signature_algorithms, signature_algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA1withECDSA, SHA1withRSA, SHA256withDSA, SHA1withDSA, MD5withRSA
***
谁能建议我可以做些什么来启用 SHA256?
【问题讨论】:
-
也许你可以试试 Java 1.5,或者 1.4?哦,等等,它必须是 Java 1.2 :)
-
@Maarten - 我想TLS 1.1 and 1.2 made their debut Java 7。由于低级 JVM,我认为 OP 处于 SSLv3 和 TLS 1.0 领域。
-
您可以尝试 iSaSiLk 或其他 3rd 方 TLS 库。但请注意,在旧运行时上使用 TLS 可能无法为您提供全面保护。
-
“SHA256 ...在执行握手时使用”是什么意思? ServerKX 和 ClientKX 的签名算法(如果经过身份验证)由 sigalgs 控制(在您的 hello 中提供所有 SHA2),对于 TLSv1.2,PRF 对所有旧套件(包括您列出的套件)使用 HMAC-SHA256。如果您的目标是安全而不是迷恋“256”,那么重要的是 证书 使用 SHA256 或更好的方式进行签名,而这与 ClientHello 的内容无关。
-
@jww OP 使用的是 IBM JRE 而不是 Oracle 的 JRE,IBM 替换了他们自己的加密提供程序,包括 SSL。请注意日志说 TLSv1.2 并包括仅存在于1.2 中的signature_algorithms。