我的应用程序有一个出站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相同的操作?
答案 0 :(得分:0)
TLS 1.0可以通过创建一个jvm.options文件来强制进行初始握手,该文件在容器中提供以下选项:
-Ddeployment.security.TLSv1=true
-Dhttps.protocols=TLSv1