18

我已经阅读 了如何配置 playframework 服务器以支持 ssl ,我也尝试关注http://www.playframework.org/documentation/1.1.1/releasenotes-1.1#https但它对我不起作用

非常感谢~

我阅读了 Play1 的文档,因为我找不到更多关于 https 的 Play2 更新信息。

在 application.conf 中,我添加了以下几行:

https.port=9443
certificate.key.file=conf/host.key
certificate.file=conf/host.cert

run在播放控制台中输入,并尝试在https://localhost:9443浏览器超时时访问服务器,而控制台输出中没有任何记录

4

6 回答 6

24

它不适用于您采用的方法。您将 1.x 分支的发行说明误认为 2.x 分支。

在 1.x 分支中,这是可能的。发行说明就足够了,它们对我有用。

对于 2.1+ 分支,请参考@Christina 的评论。2.1 中添加了支持,讨论线程提供了详细信息。

引用詹姆斯罗珀的回应

在开发模式下,这很容易,只需:

JAVA_OPTS=-Dhttps.port=9443 播放运行

Play 将生成一个私钥和自签名证书,显然您的浏览器会以红色大警告阻止。它将为 Play 的每次后续运行重用生成的自签名证书,因此您应该只收到一次浏览器错误。显然,这个自签名证书可能不是您在生产中想要的。还需要注意的是,自签名证书生成仅适用于使用 sun 安全库(例如 Oracle 和 OpenJDK,但最值得注意的是 IBM J9)的 JVM。在不使用这些的 JVM 上,当它尝试生成证书时,您将收到 NoClassDefFoundError。

在 prod 中(并且此配置也适用于 dev),您配置它的方式与您通常在 Java 中通过系统属性配置 SSL 的方式非常相似。这是一个摘要:

https.port - 应该使用的端口

https.keyStore - 包含私钥和证书的密钥库的路径,如果未提供,则会为您生成一个密钥库

https.keyStoreType - 密钥存储类型,默认为“JKS”

https.keyStorePassword - 密码,默认为 ""

https.keyStoreAlgorithm - 密钥存储算法,默认为平台默认算法

https.trustStore - 此功能尚未完全实现,目前无论您是否为此提供值,它都将始终使用 JDK 信任库来验证客户端证书(您当然可以自己配置),除非您指定“ noCA”,在这种情况下,它将使用一个信任存储,该信任存储信任所有没有验证或验证的证书,这对于使用 webid 客户端证书验证很有用。

对于 2.0 分支,您必须在播放前放置另一台服务器,即 apache/nginx/other 监听 https 并转发请求以在 http 中播放。

设置前端服务器的说明可在http://www.playframework.org/documentation/2.0.1/HTTPServer获得

因此,在端口上运行您的播放服务器。让 apache 将请求从 domain.com 转发到 127.0.0.1:9443。

示例 Apache 配置

    <VirtualHost *:443>

  ServerAdmin webmaster@localhost
  ServerName example.com
  ServerAlias *.example.com

  ErrorLog ${APACHE_LOG_DIR}/error.log

  # Possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
  ProxyPreserveHost On
#  ProxyPass  /excluded !
  ProxyPass / http://127.0.0.1:9000/
  ProxyPassReverse / http://127.0.0.1:9000/


  #   SSL Engine Switch:
  #   Enable/Disable SSL for this virtual host.
  SSLEngine on

  #   A self-signed (snakeoil) certificate can be created by installing
  #   the ssl-cert package. See
  #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
  #   If both key and certificate are stored in the same file, only the
  #   SSLCertificateFile directive is needed.
  SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
  SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key


  #   Certificate Authority (CA):
  #   Set the CA certificate verification path where to find CA
  #   certificates for client authentication or alternatively one
  <FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
  </FilesMatch>
  <Directory /usr/lib/cgi-bin>
    SSLOptions +StdEnvVars
  </Directory>

  BrowserMatch "MSIE [2-6]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
  # MSIE 7 and newer should be able to use keepalive
  BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>

希望能帮助到你。

于 2012-05-25T17:08:23.190 回答
5

设置当前版本 Play (2.2.x) 的文档在这里: http ://www.playframework.com/documentation/2.2.x/ConfiguringHttps

于 2014-04-18T01:25:02.827 回答
4

现在您似乎需要一个反向代理来为您管理 SSL。我找到了一张票和一个讨论这个的线程。

于 2012-05-25T15:57:49.667 回答
3

这对于本地测试 https 很有用:

activator "run -Dhttps.port=9005"

然后将浏览器指向https://localhost:9005.

于 2015-12-22T18:18:19.120 回答
0

我们做的一件事是使用 AWS ELB 来处理我们的 SSL,然后使用播放过滤器设置 SSL 转发(HTTP -> HTTPS)。主要好处是减轻了服务器的 SSL 负载,并且您不必在游戏前运行 Apache 或 Nginx(正如一些解决方案指出的那样)。

你可以在这里看到我的答案: https ://stackoverflow.com/a/23646948/690164

我还在我的博客中写了更多关于它的内容: http ://www.mentful.com/2014/05/25/play-framework-filter-for-aws-elastic-load-balancer-forward-http-to- https/

于 2014-06-18T15:25:21.527 回答
0

我正在使用securesocial 3.0.3M。放

securesocial.ssl = true 

在securesocial.conf中,您应该一切顺利。然后重启你的 sbt 或激活器

JAVA_OPTS=-Dhttps.port=9443 activator run

转到本地主机:9443

请享用

于 2015-09-25T16:39:27.557 回答