IBM MFP 从 JS 适配器调用 JS 适配器过程导致 IHS 出现 SSLHandshakeException
IBM MFP Calling a JS adapter procedure from a JS adapter cause SSLHandshakeException by IHS
我有两个javascript适配器:adapterA、adapterB
然后我需要调用adapterA,然后adapterA会调用adapterB(使用MFP.Server.invokeProcedure,在同一个mfp服务器)using this API
当我调用 mfp localhost 时,它起作用了
http://localhost:9080/mfp/api/adapters/AdapterA/test
然后我在将 mfp cer 导入 jre cacerts 后调用 https
也很好用
https://localhost:443/mfp/api/adapters/AdapterA/test
我的问题是我有 IHS 服务器来重定向 mfp 服务
当我通过 IHS http url
调用 api 时
http://{domain}/mfp/api/adapters/AdapterA/test
有效
当我通过 IHS https url
调用 api 时
https://{domain}/mfp/api/adapters/AdapterA/test
mfp 服务器会出现这样的错误:
com.ibm.mfp.server.js.adapter.internal.JavascriptManagerImpl E FWLST0904E:调用过程时抛出异常:在适配器中测试:adapterB
java.lang.RuntimeException:javax.net.ssl.SSLHandshakeException:com.ibm.jsse2.util.j:PKIX 路径构建失败:com.ibm.security.cert.IBMCertPathBuilderException:无法找到请求目标的有效证书路径
在 com.ibm.mfp.server.js.adapter.internal.invocation.JavaScriptIntegrationLibraryImplementation.invokeProcedure(JavaScriptIntegrationLibraryImplementation.java:255)
但我的 IHS 插件只设置了 http
我怎样才能解决这个问题并避免这个问题
谢谢
当 MobileFirst 服务器创建到达适配器 B 的请求时,默认行为是根据当前正在执行的请求的 URL 构建请求。也就是说,它使用最初用于到达适配器 A 的请求,来构建到达目标适配器 B 的请求。
在情况 1 中效果很好,使用“http://..”访问网络服务器 URL。在情况 2 中,MFP1 必须使用“https://..”URL 向网络服务器发出出站调用,它需要先与网络服务器完成 SSL 握手。如果 MFP1 JVM 缺少网络服务器的证书,它无法建立 SSL 握手并可能导致您看到的错误。
对于您的情况,您可以采用两种方法:
- 选择将适配器 A 到适配器 B 的调用保留在 MFP1 内部。这可以防止出站“https://”调用,您不会看到问题。此外,这有助于缩短旅行时间并防止在网络服务器上建立新连接。要启用此设置,请使用 JNDI 属性
mfp.adapter.invocation.url
。例如,如果将此 属性 的值设置为“http://localhost:9080/mfp”,适配器 B 将作为“http://localhost:9080/mfp/api/adapters/adapterB”调用。电话留在本地。有关此 属性 here. 的更多详细信息
- 如果您希望保留对适配器 B 的请求通过使用安全端点的网络服务器,那么您应该确保网络服务器的根证书可供 MFP1 JVM 的信任库使用,以便可以成功建立 SSL 握手。
我有两个javascript适配器:adapterA、adapterB
然后我需要调用adapterA,然后adapterA会调用adapterB(使用MFP.Server.invokeProcedure,在同一个mfp服务器)using this API
当我调用 mfp localhost 时,它起作用了
http://localhost:9080/mfp/api/adapters/AdapterA/test
然后我在将 mfp cer 导入 jre cacerts 后调用 https
也很好用
https://localhost:443/mfp/api/adapters/AdapterA/test
我的问题是我有 IHS 服务器来重定向 mfp 服务
当我通过 IHS http url
调用 api 时http://{domain}/mfp/api/adapters/AdapterA/test
有效
当我通过 IHS https url
调用 api 时https://{domain}/mfp/api/adapters/AdapterA/test
mfp 服务器会出现这样的错误:
com.ibm.mfp.server.js.adapter.internal.JavascriptManagerImpl E FWLST0904E:调用过程时抛出异常:在适配器中测试:adapterB java.lang.RuntimeException:javax.net.ssl.SSLHandshakeException:com.ibm.jsse2.util.j:PKIX 路径构建失败:com.ibm.security.cert.IBMCertPathBuilderException:无法找到请求目标的有效证书路径 在 com.ibm.mfp.server.js.adapter.internal.invocation.JavaScriptIntegrationLibraryImplementation.invokeProcedure(JavaScriptIntegrationLibraryImplementation.java:255)
但我的 IHS 插件只设置了 http
我怎样才能解决这个问题并避免这个问题
谢谢
当 MobileFirst 服务器创建到达适配器 B 的请求时,默认行为是根据当前正在执行的请求的 URL 构建请求。也就是说,它使用最初用于到达适配器 A 的请求,来构建到达目标适配器 B 的请求。
在情况 1 中效果很好,使用“http://..”访问网络服务器 URL。在情况 2 中,MFP1 必须使用“https://..”URL 向网络服务器发出出站调用,它需要先与网络服务器完成 SSL 握手。如果 MFP1 JVM 缺少网络服务器的证书,它无法建立 SSL 握手并可能导致您看到的错误。
对于您的情况,您可以采用两种方法:
- 选择将适配器 A 到适配器 B 的调用保留在 MFP1 内部。这可以防止出站“https://”调用,您不会看到问题。此外,这有助于缩短旅行时间并防止在网络服务器上建立新连接。要启用此设置,请使用 JNDI 属性
mfp.adapter.invocation.url
。例如,如果将此 属性 的值设置为“http://localhost:9080/mfp”,适配器 B 将作为“http://localhost:9080/mfp/api/adapters/adapterB”调用。电话留在本地。有关此 属性 here. 的更多详细信息
- 如果您希望保留对适配器 B 的请求通过使用安全端点的网络服务器,那么您应该确保网络服务器的根证书可供 MFP1 JVM 的信任库使用,以便可以成功建立 SSL 握手。