纽伯警报!我将尝试对此进行简洁明了的描述。

Scala 2.10.3,播放2.2.1。

我有一个用于HTTPS的播放应用程序。我在conf/application.conf文件中有一个设置,以确保我的Play应用使用SSL(并且已经过测试,可以):

session.secure=true

但是现在,我希望我的play应用程序使用WS库连接到Web服务。该Web服务位于具有自签名SSL证书的HTTPS上。我可以在conf/application.conf文件中设置以下设置,这样我就不必处理Web服务证书了-我希望这样做。 (Web服务具有某种特殊的风味,因此我宁愿根本不处理其证书):

ws.acceptAnyCertificate=true

当我将它们都设置为true时,所有内容似乎都可以编译并运行。但是,这两个不同的设置是否相互影响,重叠和/或干扰?如果我使用AsyncHttpClient并设置SSLContext,对我的应用程序是否更安全?

我尝试在conf/application.conf中设置密钥管理器和密钥库,但我的WS调用导致SSLEngine错误-我认为这是由于我使用Play 2.2.1而对WS的SSL支持仅在Play 2.3.x +上可用

注意:
我使用WS进行以下呼叫。我需要将来的响应才能完成,并且我的函数将返回一个布尔值。我是否应该使用

def myfun : Boolean = {
    var ret : Boolean = false
    val futureResult = WS.url("https://somewhere.com").post(jsonInput) onComplete {
       case Success(response) => {
        ret = true
      }
      case Failure(e) => {
        Log.error("badness")
      }
    }
    ret
}


参考:

How do I ignore ssl validation in play framework scala ws calls

https://www.playframework.com/documentation/2.2.x/ScalaWS

https://www.playframework.com/documentation/2.3.x/WSQuickStart

最佳答案

您不应设置ws.acceptAnyCertificate。而且,如果您打算进行客户端身份验证,则仅需要密钥管理器和密钥存储。

而是将自签名证书添加到您的信任库中,或者在命令行上使用“ javax.net.ssl.trustStore”定义自定义信任库-有关详细信息,请参见http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#Customization

https://www.playframework.com/documentation/2.3.x/CertificateGeneration将引导您逐步将证书添加到信任库。

还有一个激活器模板应该可以帮助您:http://typesafe.com/activator/template/play-tls-example

关于scala - 如何在不使我的整个应用程序不安全的情况下忽略Play Framework WS SSL证书?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27326155/

10-15 08:01