如何配置PlayFramework2以支持SSL?

时间:2012-05-25 03:58:00

标签: ssl playframework playframework-2.0

我读过 How to configure playframework server to support 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访问服务器而没有在控制台输出中记录任何内容

6 个答案:

答案 0 :(得分:24)

它不适用于您正在采取的方法。您错误地将1.x分支的发行说明与2.x分支一起发布。

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

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

引用James Roper的回应

  

在开发模式下,它非常简单,只需:

     

JAVA_OPTS = -Dhttps.port = 9443 play run

     

Play将生成私钥和自签名证书   很明显,你的浏览器会对一个大红色警告发出警告。它会   重用为每个后续运行生成自签名证书   Play,所以你应该只得到一次浏览器错误。明显   这个自签名证书可能不是你想要的   生产。另外需要注意的是自签名   证书生成仅适用于使用sun的JVM   安全库(例如Oracle和OpenJDK,但最值得注意的不是IBM   J9)。在不使用这些的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

提供了设置前端服务器的说明

所以在端口上运行播放服务器。将domain.com的apache转发请求发送到127.0.0.1:9443。

示例apache config

    <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>

希望它有所帮助。

答案 1 :(得分:5)

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

答案 2 :(得分:4)

现在您似乎需要一个为您管理SSL的反向代理。我找到了ticketthread来讨论这个问题。

答案 3 :(得分:3)

这对本地测试https非常有用:

activator "run -Dhttps.port=9005"

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

答案 4 :(得分:0)

我们做的一件事是使用AWS ELB来处理我们的SSL,然后使用播放过滤器设置SSL转发(HTTP - &gt; 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/

答案 5 :(得分:0)

我正在使用securesocial 3.0.3M。设置

$('a').css('border-top-color', 'red');
在securesocial.conf中你应该很高兴。 然后使用

重新启动sbt或激活器
securesocial.ssl = true 

转到localhost:9443

享受