使用 Java 的 SSL 握手错误
SSL Handshake Error using Java
我正在尝试使用 SSL 证书将 java 客户端连接到 JMX 服务器。
但不幸的是,此连接给出了 SSL 握手错误。当我尝试使用 -Djavax.net.debug=all
标志对其进行调试时,我在 java 客户端上收到以下错误消息。
2016-07-15T13:29:50.02-0700 [APP/0] OUT RMI RenewClean-[10.200.0.27:44445,javax.rmi.ssl.SslRMIClientSocketFactory@305a99f7], READ: TLSv1.2 Alert, length = 2
2016-07-15T13:29:50.02-0700 [APP/0] OUT RMI RenewClean-[10.200.0.27:44445,javax.rmi.ssl.SslRMIClientSocketFactory@305a99f7], RECV TLSv1 ALERT: fatal, handshake_failure
2016-07-15T13:29:50.02-0700 [APP/0] OUT RMI RenewClean-[10.200.0.27:44445,javax.rmi.ssl.SslRMIClientSocketFactory@305a99f7], called closeSocket()
2016-07-15T13:29:50.02-0700 [APP/0] OUT RMI RenewClean-[10.200.0.27:44445,javax.rmi.ssl.SslRMIClientSocketFactory@305a99f7], handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
当我将客户端更改为其他东西(如 JConsole)时,使用相同的 SSL 证书和信任库连接工作正常,这表明 SSL 证书或其连接的域没有问题。
似乎由于 TLS 版本类型不正确导致握手失败。
我的客户端 运行 在 Java7 上使用 TLS 版本 1,而服务器 运行 Java8 使用 TLS 版本 1.2。
检查此 oracle blog,其中提到 Java8 将默认使用 TLS 版本 1.2
因此,当我将客户端升级为使用 Java8 时,问题得到解决。
希望这对其他人也有帮助。
我正在尝试使用 SSL 证书将 java 客户端连接到 JMX 服务器。
但不幸的是,此连接给出了 SSL 握手错误。当我尝试使用 -Djavax.net.debug=all
标志对其进行调试时,我在 java 客户端上收到以下错误消息。
2016-07-15T13:29:50.02-0700 [APP/0] OUT RMI RenewClean-[10.200.0.27:44445,javax.rmi.ssl.SslRMIClientSocketFactory@305a99f7], READ: TLSv1.2 Alert, length = 2
2016-07-15T13:29:50.02-0700 [APP/0] OUT RMI RenewClean-[10.200.0.27:44445,javax.rmi.ssl.SslRMIClientSocketFactory@305a99f7], RECV TLSv1 ALERT: fatal, handshake_failure
2016-07-15T13:29:50.02-0700 [APP/0] OUT RMI RenewClean-[10.200.0.27:44445,javax.rmi.ssl.SslRMIClientSocketFactory@305a99f7], called closeSocket()
2016-07-15T13:29:50.02-0700 [APP/0] OUT RMI RenewClean-[10.200.0.27:44445,javax.rmi.ssl.SslRMIClientSocketFactory@305a99f7], handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
当我将客户端更改为其他东西(如 JConsole)时,使用相同的 SSL 证书和信任库连接工作正常,这表明 SSL 证书或其连接的域没有问题。
似乎由于 TLS 版本类型不正确导致握手失败。
我的客户端 运行 在 Java7 上使用 TLS 版本 1,而服务器 运行 Java8 使用 TLS 版本 1.2。
检查此 oracle blog,其中提到 Java8 将默认使用 TLS 版本 1.2
因此,当我将客户端升级为使用 Java8 时,问题得到解决。
希望这对其他人也有帮助。