2012-05-25 5 views
18

ho letto How to configure playframework server to support ssl e ho anche cercato di seguire http://www.playframework.org/documentation/1.1.1/releasenotes-1.1#https ma non funziona per meCome configurare PlayFramework2 per supportare SSL?

molte grazie ~

ho letto il documento per Play1 perché non riesco a trovare più aggiornato informazioni per Play2 su https.

in application.conf, ho aggiunto queste righe:

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

digito run nella console di gioco, e tenta di accedere al server presso https://localhost:9443 il browser è scaduta senza nulla registrato l'output della console

+0

Che cosa non funziona? Fornisci ulteriori informazioni come stacktraces e i tuoi file di configurazione. Inoltre hai letto la documentazione per Play 1 e stai cercando di configurare SSL per Play 2, quindi stai leggendo la documentazione errata –

+0

@ Li-o Ho aggiornato con ulteriori informazioni. Hai una documentazione aggiornata per Play2 sulla configurazione di https? Potresti condividerlo con me ~? Grazie mille ~ – Chris

risposta

24

Non funzionerà con l'approccio che stai prendendo. Si stanno scambiando le note di rilascio del ramo 1.x con il ramo 2.x.

nel ramo 1.x, è possibile. Le note di rilascio sono sufficienti e hanno funzionato per me.

Per il ramo 2.1+, fare riferimento al commento di @ Christina. Il supporto è stato aggiunto in 2.1 e il thread di discussione fornisce dettagli.

Citando la risposta di James Roper

In modalità dev, è molto facile, basta:

JAVA_OPTS = -Dhttps.port = 9443 Giocare Run

gioco genererà una chiave privata e di auto certificato firmato, che ovviamente il tuo browser sarà bloccato con un grande avvertimento rosso. Sarà il riutilizzo di che ha generato un certificato autofirmato per ogni successiva esecuzione di Play, quindi è necessario ottenere l'errore del browser solo una volta. Ovviamente questo certificato autofirmato non è probabilmente quello che vuoi nella produzione . È inoltre importante notare che la generazione del certificato autofirmato funziona solo su JVM che utilizzano le librerie di sicurezza sole (ad es. Oracle e OpenJDK, ma in particolare non IBM J9). Su JVM che non li utilizzano, si otterrà un valore NoClassDefFoundError quando tenta di generare il certificato.

In prod (e questo vale anche per config DEV) si configura molto stesso modo in cui si configura SSL normalmente in Java, tramite sistema proprietà. Ecco un riassunto:

https.port - La porta che deve essere utilizzato

https.keyStore - Il percorso per l'archivio di chiavi contenente la chiave privata e il certificato, se non fornito genera un archivio chiavi per voi

https.keyStoreType - La chiave tipo negozio, il default è "JKS"

https.keyStorePassword - La parola d'ordine, default ""

https.keyStoreAlgorithm - L'algoritmo di chiavi, 0.123.516,41 miladefault è l'algoritmo di piattaforme di default

https.trustStore - Questa funzione non è stata pienamente attuata, attualmente si utilizzerà sempre il negozio di fiducia JDK per la verifica dei certificati lato client (che si può naturalmente configure te stesso) se fornisci un valore per questo o meno, a meno che non specifichi "noCA", nel qual caso utilizzerà un negozio di fiducia che si fida di tutti i certificati senza convalida o verifica, che è utile se si utilizza client webid verifica del certificato laterale.

per 2,0 ramo, bisogna mettere un altro server Infront di gioco cioè sia apache/nginx/altra che ascolta su https e inoltra la richiesta di giocare in http.

istruzioni per impostare un server di front-end sono disponibili presso http://www.playframework.org/documentation/2.0.1/HTTPServer

Quindi eseguire il server di gioco su una porta. Avere richiesta di apache forward da domain.com a 127.0.0.1:9443.

Esempio di configurazione di apache

<VirtualHost *:443> 

    ServerAdmin [email protected] 
    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> 

Speranza che aiuta.

+7

Anche se questo era vero al momento in cui è stato scritto lasciatemi aggiungere che il supporto SSL è stato aggiunto a Play 2.1 come indicato da [questo Argomento di Google Gruppi] (https://groups.google.com/d/topic/play-framework/FeTUDQwaEPg/discussion). – Christina

+0

Grazie per l'aggiornamento. Modificherò la risposta – Nasir

+0

Se si crea un certificato SSL, ovvero non si utilizza il certificato autofirmato, la chiave pubblica del certificato creato deve essere importata nei browser dei client di Play? –

4

In questo momento sembra che sia necessario un proxy inverso per gestire l'SSL. Ho trovato uno ticket e uno thread discutendo di questo.

+0

Grazie per l'aiuto ~ lettura informativa, continuerò a guardare il problema ~ – Chris

0

Una cosa che abbiamo fatto è stato quello di usare AWS ELB per gestire il nostro SSL, l'installazione l'inoltro SSL (HTTP - > HTTPS) utilizzando i filtri di riproduzione. Il vantaggio principale, prende il carico SSL dal server e non è necessario eseguire Apache o Nginx di fronte al gioco (come indicato da alcune soluzioni).

Potete vedere la mia risposta qui: https://stackoverflow.com/a/23646948/690164

Scrivo anche un po 'più su di esso nel mio blog: http://www.mentful.com/2014/05/25/play-framework-filter-for-aws-elastic-load-balancer-forward-http-to-https/

0

sto usando 3.0.3M securesocial. Impostare

securesocial.ssl = true 

in securesocial.conf e si dovrebbe essere buono per andare. Quindi riavviare lo SBT o attivatore con

JAVA_OPTS=-Dhttps.port=9443 activator run 

Vai a localhost: 9443

godono

3

Questo è utile per https test a livello locale:

activator "run -Dhttps.port=9005" 

quindi puntare il browser per https://localhost:9005 .