我对Play Framework很陌生,我只是第一次尝试让HTTPS在Java 8上使用2.4.2,我可以让它使用默认的密钥存储库,而不是使用我自己的密钥存储库。我在build.sbt中配置了工作默认密钥存储库
javaOptions ++= Seq(
"-Dhttps.port=9443"
)然后,配置您自己的密钥存储库的正式文件对我来说有点太抽象了。它提到了在application.conf中配置它,但没有说明如何配置,也没有在命令行上进行配置,但没有使用Java示例。谷歌会公布一些Scala的例子,但我不能哄骗他们,因为他们使用的是devSettings这样的东西,这些东西在Java世界中似乎并不常见,或者至少我不太懂Play和Scala,不足以控制它们。
据我所知,我似乎在build.sbt中使用了自己独特的配置
javaOptions ++= Seq(
"-Dhttps.port=9443",
"-Dhttps.keyStore.path=keystore.jks",
"-Dhttps.keyStore.password=password")它构建并运行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)但是在第一个https:// access中,我在Actuator中得到了一个无穷的堆栈跟踪:
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]
...我的第一个想法是,我没有正确地配置它,但我还没有找到一个明确的指南播放2.4。我开始怀疑我的谷歌搜索能力了。我发现了很多关于前端代理和避免SSL终止的引用,但是我并不是在开发一个公共网站,并且发现这种方法太过分了。
我不知道它是否是一只红鲱鱼,但是Netty项目很久以前就放弃了org.jboss.netty,现在使用了io.netty。我在堆栈跟踪中看到了org.jboss.netty,并播放了2.4.2,它似乎使用的是Netty3.10.3.Final,它非常古老。我碰巧熟悉Netty,在生产中使用了4.x,而5.x目前在Alpha中。为什么游戏被困在过去了?我该担心吗?
我发现了几个似乎密切相关的问题,比如游戏中的一个bug 2.2.x和AHC中的一个小虫 ( Play uses),但这两个问题似乎都在我使用的2.4.2游戏之前就已经解决了。尽管如此,我还是尝试了一些修复方法,比如升级异步-http-客户端依赖关系,不包括异步-http-客户端中的org.jboss.netty传递依赖关系,以及升级到Netty 3.10.4。
所以现在我被困住了,但我觉得我只是错过了一个入门指南。也许所有这些依赖问题和相关的bug只是浪费时间?
发布于 2015-07-31 11:14:45
所以在贴出问题5分钟后,我想出了答案.我的配置键错了,和密钥存储路径需要是绝对的或相对于项目根(即添加conf/如果它在您的conf文件夹中):
javaOptions ++= Seq(
"-Dhttps.port=9443",
"-Dhttps.keyStore=conf/keystore.jks",
"-Dhttps.keyStorePassword=password")我对钥匙的错误是使用了点根据文件
https.keyStore.path
https.keyStore.password而不是:
https.keyStore
https.keyStorePassword我不知道如何从dot.notation到camelCase,甚至不知道我在这里配置什么。这些参数更像标准的JVM参数javax.net.ssl.keyStore和javax.net.ssl.keyStorePassword,但并不完全如此。我觉得我错过了一个窍门。如果Play报告说它找不到keystore而不是NPE,那就太好了,但是由于我似乎在配置JVM,所以除非有另一种方法来配置这些东西,否则可能对它无能为力.带着像样的文件!
https://stackoverflow.com/questions/31744167
复制相似问题