我们正在尝试让 Play 设置与我们的内部 CRM 对话。我们之前的所有应用程序都是在一个矫枉过正的 JSF 框架 (ICEfaces) 中编写的 - 但它们在与我们的 CRM 对话时工作良好,因为 JSF 应用程序部署在 glassfish 盒子上,我们安装了 glassfish 的证书以便能够与之通信我们的 CRM 网络服务。
现在我们正试图让 play 做同样的事情,但我们遇到了一些困难,因为我们想在 netty 上运行 play 应用程序。我们如何将证书导入密钥库(或类似的),以便它们可以与我们的 CRM 通信?由于 CRM 在我们公司内部,因此证书是自签名的并根据需要分发。
我在播放配置文件中尝试了以下内容 - 但我不确定这个,因为这些配置属性似乎更多地用于播放服务器本身,而不是用于播放应用程序与另一个服务通信。
# Keystore
trustmanager.algorithm=jks
ssl.KeyManagerFactory.algorithm=SunX509
keystore.algorithm=jks
keystore.password=changeit
keystore.file=conf/cacerts.jks
我们的其他开发人员之一能够让它工作,但我们必须将它直接放在我们的代码中,这并不理想。
System.setProperty("javax.net.ssl.trustStore", "C:/webapps/playapp1/cacerts.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
System.setProperty("javax.net.ssl.keyStoreType", "jks");
System.setProperty("javax.net.ssl.keyStore", "C:/webapps/playapp1/keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
请注意,我们的 CRM 构建了一个 jar 文件,我们将其放入 JSF 或播放为我们包装 web 服务的应用程序,因此我们不必为每个服务构建客户端代码(类似于您下载的 jar,亚马逊的 S3 服务)。该服务 jar 在下面使用 Jersey 通过 XML / Rest 与我们的服务进行通信。当我们不使用 SSL 时,它在播放框架中工作得很好。