0

我的应用程序有一个出站 JAX-WS 客户端组件。当我从我的计算机本地运行应用程序时,它可以工作。当我尝试在 docker 中运行该应用程序时,它会失败并出现本文标题中的错误。

在我的计算机上,日志文件中的横幅是:

Launching portolano (WebSphere Application Server 16.0.0.3/wlp-1.0.14.cl160320160831-1555) on Java HotSpot(TM) 64-Bit Server VM, version 1.8.0-ea-b121 (en_US)

我正在使用 docker image websphere-liberty:javaee7 并且日志中的横幅是:

Launching defaultServer (WebSphere Application Server 16.0.0.3/wlp-1.0.14.cl160320160831-1555) on IBM J9 VM, version pxa6480sr3fp20-20161019_02 (SR3 FP20) (en_US)

该问题似乎与客户端握手有关。

当我运行 WebSphere Liberty docker 映像时,它使用 IBM JDK 并尝试被拒绝的 TLS 1.2 客户端握手。这是我打开 ssl 调试时的调试:

LargeThreadPool-thread-53, WRITE: TLSv1.2 Handshake, length = 201
LargeThreadPool-thread-53, READ: TLSv1 Alert, length = 2
LargeThreadPool-thread-53
, RECV TLSv1.2 ALERT:  
fatal, 
close_notify

当我使用 Oracle JDK 在笔记本电脑上本地运行 WebSphere Liberty 时,它会尝试有效的 TLS 1 客户端握手。这是我在与上述握手中的同一位置打开 ssl 调试时的调试:

Default Executor-thread-23, WRITE: TLSv1 Handshake, length = 183
Default Executor-thread-23, READ: TLSv1 Handshake, length = 65
*** ServerHello, TLSv1

我无法控制远程服务器。如何强制 IBM JDK 做与 Oracle JDK 相同的事情?

4

1 回答 1

0

TLS 1.0 可以通过创建 jvm.options 文件来强制初始握手,该文件为容器提供以下选项:

-Ddeployment.security.TLSv1=true
-Dhttps.protocols=TLSv1
于 2016-11-16T23:08:15.977 回答