Como configurar o Play! 2.4.2 Keystore HTTPS?
Eu sou novo no Play Framework e só estou tentando obter o HTTPS pela primeira vez com o 2.4.2 no Java 8. Posso fazê-lo funcionar com o keystore padrão, mas não com o meu próprio keystore. Eu configurei otrabalhando keystore padrão embuild.sbt
:
javaOptions ++= Seq(
"-Dhttps.port=9443"
)
Então odocumentação oficial para configurar seu próprio keystore fica um pouco abstrato demais para mim. Menciona configurá-lo emapplication.conf
mas não diz como, ou na linha de comando, mas não com um exemplo de Java. O Google revela alguns exemplos do Scala, mas não posso convencê-los, pois eles usam coisas comodevSettings
que não parecem se deparar com o mundo Java, ou pelo menos eu não entendo Play e Scala o suficiente para controlá-los.
Até onde eu sei, parece que estou usando minha própria configuração exclusiva nobuild.sbt
:
javaOptions ++= Seq(
"-Dhttps.port=9443",
"-Dhttps.keyStore.path=keystore.jks",
"-Dhttps.keyStore.password=password")
Ele cria e roda 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)
Mas, no primeiro acesso https: //, recebo um rastreamento de pilha sem fim na interface do usuário do atuador:
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]
...
Meu primeiro pensamento é que não estou configurando corretamente, mas não consegui encontrar um guia definitivo para o Play 2.4. Estou seriamente começando a questionar meus poderes no Google. Eu encontro muitas referências a proxies de front-end e evito a terminação SSL no Play, mas não estou desenvolvendo um site público e acho que essa abordagem é um exagero.
Não sei se é um arenque vermelho, mas o projeto Netty deixou cair oorg.jboss.netty
há muito tempo e agora usaio.netty
. Vejo org.jboss.netty em todo o rastreamento de pilha e o Play 2.4.2 parece estar usando o Netty 3.10.3.Final, que é muito antigo. Por acaso, eu estou familiarizado com o Netty e usei o 4.x na produção, enquanto o 5.x está atualmente no Alpha. Por que o Play está preso no passado aqui? Eu deveria estar preocupado?
Encontrei vários problemas que parecem intimamente relacionados, comoum erro no Play 2.2.x eum bug no AHC (que o Play usa), mas ambos parecem ter sido corrigidos bem antes do Play 2.4.2 que estou usando. No entanto, tentei fazer correções, como atualizar a dependência do async-http-client, excluir a dependência transitiva org.jboss.netty do async-http-client e atualizar para o Netty 3.10.4.Final.
Então agora estou preso, mas sinto que estou perdendo um guia de introdução. Talvez todos esses problemas de dependência e bugs relacionados sejam apenas uma perda de tempo?