Sono nuovo nel Play Framework e sto solo cercando di far funzionare HTTPS per la prima volta con 2.4.2 su Java 8. Posso farlo funzionare con il keystore predefinito ma non con il mio keystore. Ho configurato l'archivio di chiavi di default lavorare in build.sbt
:Come configurare Play! 2.4.2 Keystore HTTPS?
javaOptions ++= Seq(
"-Dhttps.port=9443"
)
Poi il official documentation per configurare il proprio chiavi diventa un po 'troppo astratto per me. Menziona la sua configurazione in application.conf
ma non dice come, o sulla riga di comando ma non con un esempio Java. Googling rivela alcuni esempi di Scala ma non li posso ingannare perché usano cose come devSettings
che non sembrano venire in contatto con il mondo Java, o almeno non capisco Play e Scala abbastanza da riuscire a controllarle.
Quindi per quanto ne so mi sembra di usare la mia propria configurazione unica in build.sbt
:
javaOptions ++= Seq(
"-Dhttps.port=9443",
"-Dhttps.keyStore.path=keystore.jks",
"-Dhttps.keyStore.password=password")
Si costruisce e gestisce ok:
p.c.s.NettyServer - Listening for HTTPS on port /0:0:0:0:0:0:0:0:9443
play.api.Play - Application started (Dev)
Ma sui primi https: // accesso ottengo una traccia stack infinita nell'interfaccia utente attuatore:
play.core.server.NettyServer$PlayPipelineFactory - cannot load SSL context
java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_45]
...
play.core.server.netty.PlayDefaultUpstreamHandler - Exception caught in Netty
java.lang.IllegalArgumentException: empty text
at org.jboss.netty.handler.codec.http.HttpVersion.<init>(HttpVersion.java:89) ~[netty-3.10.3.Final.jar:na]
...
Il mio primo pensiero è che non sono confi guring correttamente ma non sono riuscito a trovare una guida definitiva per Play 2.4. Sto seriamente iniziando a mettere in discussione i miei poteri su Google. Trovo molti riferimenti ai proxy front-end ed evito la terminazione SSL in Play, ma non sto sviluppando un sito Web pubblico e trovo che questo approccio sia eccessivo.
Non so se si tratta di una falsa pista ma il progetto Netty ha lasciato cadere lo org.jboss.netty
molto tempo fa e ora utilizza io.netty
. Vedo org.jboss.netty su tutta la traccia dello stack e Play 2.4.2 sembra utilizzare Netty 3.10.3.Final che è molto vecchio. Ho familiarità con Netty e ho usato 4.x in produzione mentre 5.x è attualmente in Alpha. Perché Play è bloccato in passato qui? Dovrei essere preoccupato?
Ho trovato diversi problemi che sembrano strettamente correlati come a bug in Play 2.2.x e a bug in AHC (che Play utilizza), ma entrambi sembrano essere stati risolti molto prima del Play 2.4.2 che sto usando. Tuttavia ho provato delle correzioni come l'aggiornamento della dipendenza async-http-client, escludendo la dipendenza transitiva org.jboss.netty da async-http-client e l'aggiornamento a Netty 3.10.4.Final.
Così ora sono bloccato, ma mi sento come se mi mancasse una guida introduttiva. Forse tutti questi problemi di dipendenza e bug correlati sono solo una perdita di tempo?
https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#InstallationAndCustomization –
@WillSargent Stai dicendo che io _am_ impostando direttamente parametri JVM qui con 'javaOptions' ? Dovrebbe essere il mio obiettivo? Cioè non c'è un altro modo per applicare queste impostazioni con qualcosa come 'devSettings'? Non sono sicuro di cosa otterrei qui, ma forse più controllo sulle diverse distribuzioni di sviluppo e produzione? Sembra anche che queste opzioni Java non si applichino ai miei test (non è possibile testare l'applicazione ssl). Questo è probabilmente dovuto alla mia mancanza di comprensione con il framework di testing tanto quanto qualsiasi altra cosa, ma come ho detto mi sento come se avessi configurato lo ssl al livello sbagliato. – Josh