WAS Liberty Profile的最新版本似乎破坏了com.ibm.watson.developer_cloud:java-sdk。 我为我的应用程序重建了图像并获得了最新版本17.0.0.1,并且watson的java-sdk停止了上述异常。我想知道在我的Dockerfile中使用哪个标签能够使用16.0.0.4自由重建版本? 另外......我怎样才能使用17.0.0.1?
Caused by: java.net.UnknownServiceException: Unable to find acceptable protocols. isFallback=false, modes=[ConnectionSpec(cipherSuites=[TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA], tlsVersions=[TLS_1_2, TLS_1_1, TLS_1_0], supportsTlsExtensions=true), ConnectionSpec(cipherSuites=[TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA], tlsVersions=[TLS_1_0], supportsTlsExtensions=true), ConnectionSpec()], supported protocols=[TLSv1]
at okhttp3.internal.ConnectionSpecSelector.configureSecureSocket(ConnectionSpecSelector.java:72)
at okhttp3.internal.io.RealConnection.connectTls(RealConnection.java:232)
at okhttp3.internal.io.RealConnection.establishProtocol(RealConnection.java:196)
at okhttp3.internal.io.RealConnection.buildConnection(RealConnection.java:171)
at okhttp3.internal.io.RealConnection.connect(RealConnection.java:111)
at okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:187)
at okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:123)
at okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:93)
at okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:296)
at okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
at okhttp3.RealCall.getResponse(RealCall.java:243)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:201)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163)
at okhttp3.RealCall.execute(RealCall.java:57)
at com.ibm.watson.developer_cloud.service.WatsonService$1.execute(WatsonService.java:179)
... 53 more
编辑:我尝试添加系统属性,如下所述: https://www.ibm.com/support/knowledgecenter/SSYKE2_7.0.0/com.ibm.java.security.component.70.doc/security-component/jsse2Docs/matchsslcontext_tls.html 我在我的docker实例中检查ps,看看JDK是否正确配置了属性:
root@apiqa:/# ps xuww
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 4.9 9.4 8512396 3131596 ? Ssl 17:35 10:32 /opt/ibm/java/jre/bin/java -javaagent:/opt/ibm/wlp/bin/tools/ws-javaagent.jar -Djava.awt.headless=true -Xms950m -Xmx3500m -Dcom.ibm.jsse2.overrideDefaultTLS=true -jar /opt/ibm/wlp/bin/tools/ws-server.jar defaultServer
但问题并没有解决。我没有配置Liberty配置文件来获取系统属性,因此JDK使用-D执行吗? (我使用jvm.properties文件)
答案 0 :(得分:1)
由于IBM JDK的更改,这是一个已知问题。
我们正在努力(见this)。
解决方法是使用旧的buildpack进行自由或使用不同的JDK。
使用cf push -b liberty-for-java_v3_7-20170118-2046
使用适用于SDK的自由版本。
您还可以通过运行:
更改为OpenJDKcf set-env myapp JVM 'openjdk'
更多信息here
答案 1 :(得分:0)
我的团队也遇到了这个问题。我不是100%肯定,但我们得出的结论是Liberty 17.0.0.1正在使用Java 8,我们认为它不再支持TLS 1.0。您可以看到您尝试连接的服务仅支持TLS 1.0:
“支持的协议= [TLSv1]”
似乎有些Bluemix服务已升级到TLS 1.1,有些则没有。 TLS 1.0显然不是很安全,所以我不肯定,但我相信Java 8不再支持TLS 1.0。这意味着Bluemix服务需要升级到TLS 1.1,否则您需要在以前版本的JVM上运行Liberty。
答案 2 :(得分:-1)
我解决了在Liberty实例上设置OpenJDK 1.8的问题,只需设置env变量JBP_CONFIG_OPENJDK。 在我的情况下,设置memory_sizes以克服与OpenJDK的使用相关的OutOfMemory错误很重要
$ cf set-env myapp JBP_CONFIG_OPENJDK: '[version: 1.8.+, memory_sizes: { metaspace: 256m }]'
完整参考https://console.ng.bluemix.net/docs/runtimes/liberty/customizingJRE.html