为play框架2.2.4配置HTTPS信任存储

时间:2017-01-18 13:49:09

标签: java https playframework keystore truststore

我有一个应用程序,我在其中调用一些SOAP Web服务。当我调用这些服务时,我收到了无效的证书错误。

要解决此问题,我在位于路径%JAVA_HOME%/jre/lib/security/cacerts的密钥库中添加了Web服务的安全证书。 现在,当我从独立应用程序调用Web服务时,我成功地获取了数据。

但是,当我尝试从我的Web应用程序(使用 Play framework 2.2.4 构建)调用相同的Web服务时,我得到了与之前相同的错误(即无效证书)。 在搜索解决方案后,我发现我应该将play框架配置为使用该密钥库。

我正在尝试配置播放框架2.2.4以使用自定义密钥库,我有一些疑问。 (我已按照以下链接https configuration for play framework中的说明进行操作,但对我来说似乎并不清楚)

  1. 我应该在哪里指定 https.keystore https.keystorePassword 等属性?我的意思是,我应该将它们放在application.conf文件中,还是应该将它们放在操作系统的环境变量中,或者在运行应用程序时是否必须指定它们。
  2. 另外,我尝试在运行应用程序时指定这些属性(例如play -Dhttps.port=9443 -Dhttps.keyStore=<Path to the keystore> -Dhttps.keyStorePassword=<Password> run),但它不起作用。
  3. 由于我刚开始玩框架,如果有人可以分享步骤或小教程来做同样的事情,那将会非常有用。

2 个答案:

答案 0 :(得分:0)

请注意,密钥库和信任库之间存在差异。虽然前者拥有私钥,但后者包含其他方的公钥/证书。你在第一段(cacerts)中提到的是一个信任库。

因此,如果您指定https.keyStore,则表示您未配置包含您希望从其他方接受的证书的商店。

使用-Djavax.net.ssl.trustStore配置信任库。此处介绍了更多选项:https://docs.oracle.com/cd/E29587_01/PlatformServices.60x/ps_security/src/csec_ssl_jsp_start_server.html或调试指南:http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/ReadDebug.html

答案 1 :(得分:0)

You can start the play Netty server in https mode and to use certificates.

In the server can achieve it using -D parameters for Netty.

1) sbt "project pepeGrillo-server" "run -Dhttps.port=9443 -Dhttp.port=disabled -Djdk.tls.ephemeralDHKeySize=2048 
-Djdk.tls.rejectClientInitiatedRenegotiation=true 
-Dplay.server.https.keyStore.path={path-4-server-cer-for-domain}localhost.jks
-Dplay.server.https.keyStore.password={your-password}"

2)然后你需要设置播放ws客户端以使用信任存储。将以下内容添加到application.conf中。这将确保注入的ws具有使用客户端可信密钥的Web安全设置

play.ws.ssl {
  keyManager = {
    stores = [
      { type = "JKS", path = "/etc/containerHostca.jks", password = "noSe"}
    ]
  }
  trustManager = {
    stores = [
      { type = "JKS", path = "/etc/containerHosttrust.jks", password = "carloTA" }
    ]
  }
}

以下是如何创建证书

https://www.playframework.com/documentation/2.5.x/CertificateGeneration