在 IBM MobileFirst Adapter 中使用内部 CA 时,WebSphere Application Server 中出现 SSL 错误

Posted

技术标签:

【中文标题】在 IBM MobileFirst Adapter 中使用内部 CA 时,WebSphere Application Server 中出现 SSL 错误【英文标题】:SSL Error in WebSphere Application Server while using Internal CA in IBM MobileFirst Adapter 【发布时间】:2017-03-22 12:29:39 【问题描述】:

环境:

    WebSphere Platform 8.5.5.0 [BASE 8.5.5.0 gm1319.01] 以进程名称 Node01Cell\Node01\server1 和进程 ID 9392 运行 主机操作系统为 Windows Server 2012,版本 6.2 Java 版本 = 1.6.0,Java 编译器 = j9jit26,Java VM 名称 = IBM J9 VM IBM MobileFirst 6.3.0.00.20141127-1357

HTTP Adapter 用于通过内部 CA 发布的 HTTPS 与 WebService 连接。

为了访问 Web 服务内部 RootCA 和 Web 服务公共证书,请按照以下步骤在 WAS 中手动添加。

SSL 证书和密钥管理 > 密钥库和证书 > NodeDefaultTrustStore > 签名者证书 > 添加 > 输入别名 名称和文件路径。

但同样失败,Retrieve from port出现以下错误。

ErrorReceived fatal alert: handshake_failure

但是,我已经验证了内部 CA 和 Web 服务端点证书在

中可用

$CONFIG_ROOT/cells/Node01Cell/nodes/Node01/trust.p12

MFP default.keystore 中也添加了相同的证书,并在 worklight.properties 文件中启用了密钥库。

虽然上面的配置似乎没问题,但是当来自适配器的请求发送到 web 服务时,会记录以下错误。

[3/22/17 14:09:35:744 ] 000000ae SystemOut     O WebContainer : 4, setSoTimeout(120000) called
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O 
Is initial handshake: true
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O %% No cached client session
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O *** ClientHello, TLSv1
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O RandomCookie:  GMT: 1473400159 bytes =  246, 214, 135, 72, 132, 51, 89, 33, 32, 31, 239, 155, 210, 120, 83, 221, 214, 84, 136, 207, 132, 51, 172, 126, 33, 192, 150, 43 
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O Session ID:  
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O 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_RSA_FIPS_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_RC4_128_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_RSA_FIPS_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, SSL_RENEGO_PROTECTION_REQUEST]
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O Compression Methods:   0 
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O ***
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O [write] MD5 and SHA1 hashes:  len = 81

[3/22/17 14:09:35:744 ] 000000ae SystemOut     O WebContainer : 4, WRITE: TLSv1 Handshake, length = 81
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O [Raw write]: length = 86

[3/22/17 14:09:35:744 ] 000000ae SystemOut     O [Raw read]: length = 5
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O 0000: 15 03 01 00 02                                     .....

[3/22/17 14:09:35:744 ] 000000ae SystemOut     O [Raw read]: length = 2
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O 0000: 02 28                                              ..

[3/22/17 14:09:35:744 ] 000000ae SystemOut     O WebContainer : 4, READ: TLSv1 Alert, length = 2
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O WebContainer : 4, RECV TLSv1 ALERT:  fatal, handshake_failure
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O WebContainer : 4, called closeSocket()
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O WebContainer : 4, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O WebContainer : 4, called close()
[3/22/17 14:09:35:744 ] 000000ae SystemOut     O WebContainer : 4, called closeInternal(true)
[3/22/17 14:09:35:744 ] 000000ae DataAccessSer E  logError FWLSE0099E: An error occurred while invoking procedure  [project mobile]SampleAdapter/HttpRequestFWLSE0100E:  parameters: [project mobile]
Http request failed: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
FWLSE0101E: Caused by:  [project mobile]javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failurejava.lang.RuntimeException: Http request failed: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at com.worklight.adapters.http.HTTPConnectionManager.execute(HTTPConnectionManager.java:236)
    at com.worklight.adapters.http.HttpClientContext.doExecute(HttpClientContext.java:185)
    at com.worklight.adapters.http.HttpClientContext.execute(HttpClientContext.java:169)
    at com.worklight.adapters.http.HTTP.execRequest(HTTP.java:145)
    at com.worklight.adapters.http.HTTP.invoke(HTTP.java:134)

Webservice URL 可从浏览器访问,并以绿色显示 SSL 锁定显示,没有错误或警告。

【问题讨论】:

"handshake_failure" 似乎表明客户端(在本例中为 WebSphere Application Server)和服务器(您尝试使用的 Web 服务)没有共同的密码套件。 它似乎比证书有效性低,甚至可能比密码套件低。您有来自客户端的日志记录吗? 您有办法检查运行 Web 服务的服务器支持的密码套件吗? (我假设它与运行 HTTP 适配器的服务器不同。)如果它是面向 Internet 的服务器,ssllabs.com/ssltest 是查看该信息的一种简单方法 @patbarron,为了同步密码套件,我可以在 WAS 中测试和进行必要更改的建议方法是什么。 您可以参考 (ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/…) 查看您的应用服务器中启用了哪些协议和密码。您可以使用nmap --script ssl-enum-ciphers -p <yourServerPort> <yourbackendServerHostname> 获取后端服务器支持的密码和协议列表。例如:nmap --script ssl-enum-ciphers -p 443 google.com 【参考方案1】:

为IBM MobileFirst Platform Foundation (6.3.0.0)应用最新的iFix

这应该可以解决问题,因为它包含 APAR PI42320 修复。

【讨论】:

以上是关于在 IBM MobileFirst Adapter 中使用内部 CA 时,WebSphere Application Server 中出现 SSL 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 IBM MobileFirst Adapter 中使用内部 CA 时,WebSphere Application Server 中出现 SSL 错误

IBM Mobilefirst Java HTTP Adapter 中的多部分文件上传

IBM Worklight 8.0 Adapter 调用 Java 代码

IBM MFP 如何使用 mfpdev-cli 上传(部署).adapter?

Worklight、SQL-Adapter、指定为定义者的用户 ('mobilefirst'@'localhost') 不存在

在 IBM 容器上运行 IBM MobileFirst Platform Foundation