Play Framework 提供 HTTPS 内容
Posted
技术标签:
【中文标题】Play Framework 提供 HTTPS 内容【英文标题】:Play Framework serve HTTPS content 【发布时间】:2014-07-08 22:16:45 【问题描述】:我是一个新手,我正在尝试至少在登录和注册页面上使用 HTTPS,以便对敏感的用户数据有更高的安全性。 我对此有一系列问题:
我已将我的 play 应用程序配置为在具有 https.port 属性的 application.conf 文件中使用 https。但是在我的开发环境中,除非我使用以下命令,否则我似乎无法使用 https 功能启动服务器:play -Dhttps.port=<port>
为什么会这样?我认为我可以使用 dev.conf(现在是 application.conf)文件来执行此操作。我不能在使用配置文件中指定的这种设置时以开发模式启动服务器吗?
虽然我用 https 功能启动服务器,但是在游戏中使用 https 的正确方法是什么?我已经创建了一个我使用的 java 密钥库,并尝试使用 redirect(securedIndexCall.absoluteURL(request, secure))
将请求(从控制器)重定向到 https url。但它似乎至少在我的开发环境(本地主机)上不起作用。日志指定异常,例如:
java.lang.IllegalArgumentException: empty text
java.lang.IllegalArgumentException: invalid version format: M¥å/=<junk characters continue>
我应该在整个应用程序上使用 https,还是只保护登录和注册请求就足够了?
我觉得提供的官方文档相当不足,我在这里试图弄清楚我应该如何做到这一点。
任何帮助将不胜感激!
【问题讨论】:
这应该是 3 个问题,而不是 1 个。恐怕这个问题太笼统了。另外,我建议您使用 HTTP 前端服务器,例如nginx. 【参考方案1】:我同意 Fernando 的观点,我认为设置前端 Web 服务器更容易。在我的例子中,我使用了 Lighttpd,它的设置相当简单。我建议:
-
按照这些说明配置 Lighttpd(在这个阶段,不要担心 HTTPS,只要让 HTTP 工作):http://www.playframework.com/documentation/2.3.x/HTTPServer
然后在 Lighttpd 中配置 HTTPS:http://redmine.lighttpd.net/projects/1/wiki/HowToSimpleSSL。如果您打算购买 SSL 证书,则可以设置更多选项(例如中间证书)。以下页面有更多信息:http://redmine.lighttpd.net/projects/1/wiki/Docs_SSL
回答您的主要问题:
1) 在 Play 中启用 HTTPS
是的,您必须在启动时明确表示要使用 HTTPS http://www.playframework.com/documentation/2.3.x/ConfiguringHttps
2) “java.lang.IllegalArgumentException”错误信息
密钥库可能存在问题。这篇 SO 文章似乎讨论得更详细:Play framework 2.2.1 HTTPs fails on connection attempt
3) 登录页面或整个应用的 SSL
就个人而言,我会选择整个应用程序。如果您花时间设置 HTTPS,我认为您不妨覆盖整个网站。我想在运行 HTTPS 时会有轻微的性能开销,但实际上这不是你会注意到的。
【讨论】:
我之所以想玩直接使用HTTPS,是因为应用会部署在云端(Heroku),不知道有没有可能设置前端web服务器。 我从未尝试过,但我认为这是 Heroku 在您购买 SSL 插件 (addons.heroku.com/ssl) 时会处理的问题。我认为您的应用不需要了解 SSL。它们可能具有与我为负载平衡描述的设置类似的设置(即,将请求定向到应用程序实例的 Web 服务器)。 我发现了为什么会抛出这些异常。我虽然在开发模式下播放从 application.conf 读取 https 配置。然而,这不是真的。事实上,这些异常是因为 play 无法访问密钥库而引起的。我必须传递所有需要的参数才能正常工作:play debug -Dhttps.port=<httpsport> -Dhttps.keyStore=<keystore> -Dhttps.keyStorePassword=<keystorepassword>
【参考方案2】:
您应该为 HTTPS 使用前端服务器,并为整个应用程序使用 HTTPS。
请查看Setting up a front end HTTP server 并查看注释掉的 nginx 设置。
【讨论】:
以上是关于Play Framework 提供 HTTPS 内容的主要内容,如果未能解决你的问题,请参考以下文章
测试期间可以在 Play Framework 中启用 HTTPS 侦听吗?
无法使用 Play Framework 向浏览器提供文件以供下载
Play Framework Secure Module:登录JSON响应接口