¿Cómo configurar PlayFramework2 para admitir SSL?
playframework-2.0 (6)
He leído Cómo configurar el servidor playframework para que admita SSL y también intenté seguir http://www.playframework.org/documentation/1.1.1/releasenotes-1.1#https pero no funciona para mí
muchas gracias ~
Leí el documento para Play1 porque no puedo encontrar ninguna información más actualizada para Play2 sobre https.
en application.conf, agregué estas líneas:
https.port=9443
certificate.key.file=conf/host.key
certificate.file=conf/host.cert
Escribo run
en la consola de reproducción y trato de acceder al servidor en https://localhost:9443
el navegador agotó el tiempo de espera sin que haya nada registrado en la salida de la consola
Esto es útil para probar localmente https:
activator "run -Dhttps.port=9005"
Luego, dirija su navegador a https://localhost:9005
.
Estoy usando securesocial 3.0.3M. Conjunto
securesocial.ssl = true
en securesocial.conf y deberías estar listo para ir. Luego reinicia tu sbt o activador con
JAVA_OPTS=-Dhttps.port=9443 activator run
Ir a localhost: 9443
disfrutar
La documentación para configurar la versión actual de Play (2.2.x) está aquí: http://www.playframework.com/documentation/2.2.x/ConfiguringHttps
No funcionará con el enfoque que está tomando. Está confundiendo notas de publicación de la rama 1.x con la rama 2.x.
en la rama 1.x , es posible. Las notas de la versión son suficientes y funcionó para mí.
Para la rama 2.1+ , consulte el comentario de @ Christina. Se ha agregado soporte en 2.1 y el hilo de discusión proporciona detalles.
Citando la respuesta de James Roper
En el modo dev, es muy fácil, solo:
JAVA_OPTS = -Dhttps.port = 9443 play run
Play generará una clave privada y un certificado autofirmado, que obviamente su navegador se resistirá con una gran advertencia roja. Reutilizará ese certificado autofirmado generado para cada ejecución posterior de Play, por lo que solo debería obtener el error del navegador una vez. Obviamente, este certificado autofirmado probablemente no sea lo que quieres en producción. También es importante tener en cuenta que la generación del certificado autofirmado solo funcionará en las JVM que utilizan las bibliotecas de seguridad solar (por ejemplo, Oracle y OpenJDK, pero sobre todo no IBM J9). En las JVM que no las usan, obtendrá un NoClassDefFoundError cuando intente generar el certificado.
En prod (y esta configuración también se aplica a dev) se configura de la misma manera que se configura SSL normalmente en Java, a través de las propiedades del sistema. Aquí hay un resumen:
https.port - El puerto que se debe usar
https.keyStore - La ruta al almacén de claves que contiene la clave privada y el certificado, si no se proporciona genera un almacén de claves para usted
https.keyStoreType : el tipo de almacén de claves, por defecto es "JKS"
https.keyStorePassword - La contraseña, por defecto es ""
https.keyStoreAlgorithm - El algoritmo del almacén de claves, se predetermina al algoritmo predeterminado de la plataforma
https.trustStore : esta característica no se ha implementado por completo, actualmente siempre usará el almacén de confianza de JDK para verificar los certificados del lado del cliente (que usted mismo puede configurar usted mismo) si proporciona un valor para esto o no, a menos que especifique " noCA ", en cuyo caso, utilizará un almacén de confianza que confía en todos los certificados sin validación o verificación, lo que es útil si se usa la verificación del certificado del lado del cliente web.
Para la rama 2.0 , debe poner otro servidor enfrente del juego, es decir, apache / nginx / otro que escucha en https y reenvía la solicitud para jugar en http.
Las instrucciones para configurar un servidor de interfaz están disponibles en http://www.playframework.org/documentation/2.0.1/HTTPServer
Entonces, ejecute su servidor de reproducción en un puerto. Tenga la solicitud de reenvío de apache de domain.com a 127.0.0.1:9443.
Ejemplo de configuración de 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>
Espero eso ayude.
Una cosa que hicimos fue utilizar AWS ELB para manejar nuestro SSL, luego configuramos el reenvío SSL (HTTP -> HTTPS) usando un filtro de juegos. El principal beneficio es que elimina la carga de SSL de su servidor y no tiene que ejecutar Apache o Nginx antes de jugar (como lo señala una solución).
Puedes ver mi respuesta aquí: https://.com/a/23646948/690164
También escribo un poco más sobre esto en mi blog: http://www.mentful.com/2014/05/25/play-framework-filter-for-aws-elastic-load-balancer-forward-http-to- https /