【问题标题】:Configure HTTPS trust storefor play framework 2.2.4为 play framework 2.2.4 配置 HTTPS 信任库
【发布时间】:2017-06-02 22:26:40
【问题描述】:

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


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


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

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

  1. 我应该在哪里指定 https.keystorehttps.keystorePassword 等属性?我的意思是,我应该将它们放在application.conf 文件中,还是应该将它们放在操作系统的环境变量中,或者我必须在运行应用程序时指定它们。
  2. 另外,我曾尝试在运行应用程序时指定这些属性(如 play -Dhttps.port=9443 -Dhttps.keyStore=<Path to the keystore> -Dhttps.keyStorePassword=<Password> run),但它不起作用。

由于我是新手,如果有人可以分享步骤或小教程来做同样的事情,那将非常有帮助。

【问题讨论】:

    标签: java https playframework keystore truststore


    【解决方案1】:

    请注意,密钥库和信任库之间存在差异。前者持有私钥,后者包含其他方的公钥/证书。您在第一段(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

    【讨论】:

    • 感谢您的指正。您能否分享一些有关如何为 play framework 2.2.4 配置信任库的信息?
    • 您是否尝试过调试选项?另外,请注意,如果您有信任库的密码,则可以设置另一个属性。
    • 我意识到我必须单独设置一个密码属性,我做到了。我担心的是,对于游戏框架,您提到的属性具有不同的名称,而您提供的属性不起作用。您共享的链接是针对 Tomcat 的。(我想)。
    • 没有。您提供的链接(https 配置)是关于播放框架是否通过 https 服务的。因此,您需要一个密钥库,因此属性有一个名为 https.* 的前缀。您需要的是信任库,它定义了接受哪些证书。我提供的链接不是关于 tomcat,而是关于 JVM。如果您启用调试,您将看到您从服务器获得哪些证书以及您的 JVM 使用哪些证书来验证它们。
    • 好的,我试试看。
    【解决方案2】:
    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) 然后您需要设置 play ws 客户端以使用信任存储。将以下内容添加到 application.conf。这将确保注入的 ws 具有网络安全设置以使用您的客户端受信任的密钥

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-04
      • 2016-07-02
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多