纽伯警报!我将尝试对此进行简洁明了的描述。
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/