Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何配置播放!2.4.2 HTTPS密钥库?_Java_Playframework_Playframework 2.0 - Fatal编程技术网

Java 如何配置播放!2.4.2 HTTPS密钥库?

Java 如何配置播放!2.4.2 HTTPS密钥库?,java,playframework,playframework-2.0,Java,Playframework,Playframework 2.0,我对Play框架还不熟悉,只是第一次尝试使用Java8上的2.4.2实现HTTPS。我可以让它使用默认密钥库,但不能使用我自己的密钥库。我在build.sbt中配置了工作默认密钥库: javaOptions ++= Seq( "-Dhttps.port=9443" ) javaOptions ++= Seq( "-Dhttps.port=9443", "-Dhttps.keyStore.path=keystore.jks", "-Dhttps.keyStore.

我对Play框架还不熟悉,只是第一次尝试使用Java8上的2.4.2实现HTTPS。我可以让它使用默认密钥库,但不能使用我自己的密钥库。我在
build.sbt
中配置了工作默认密钥库:

javaOptions ++= Seq(
    "-Dhttps.port=9443"
)
javaOptions ++= Seq(
    "-Dhttps.port=9443",
    "-Dhttps.keyStore.path=keystore.jks",
    "-Dhttps.keyStore.password=password")
然后,配置自己的密钥库的方法对我来说有点太抽象了。它提到在
application.conf
中配置它,但没有说明如何配置,或者在命令行中配置它,但没有使用Java示例。谷歌搜索揭示了一些Scala示例,但我无法哄骗他们,因为他们使用了Java世界似乎没有遇到的
devSettings
,或者至少我不太了解Play和Scala,无法掌握它们

据我所知,我似乎在
build.sbt
中使用自己独特的配置:

javaOptions ++= Seq(
    "-Dhttps.port=9443"
)
javaOptions ++= Seq(
    "-Dhttps.port=9443",
    "-Dhttps.keyStore.path=keystore.jks",
    "-Dhttps.keyStore.password=password")
它构建并运行正常:

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时,我在执行器UI中得到了一个无休止的堆栈跟踪:

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]
    ...
play.core.server.NettyServer$PlayPipelineFactory-无法加载SSL上下文
java.lang.reflect.InvocationTargetException:null
在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)~[na:1.8.0\u 45]
...
play.core.server.netty.playdaultUpstreamHandler-在netty中捕获异常
java.lang.IllegalArgumentException:空文本
在org.jboss.netty.handler.codec.http.HttpVersion.(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似乎使用netty 3.10.3.Final,这是非常古老的。我碰巧熟悉Netty,在生产中使用了4.x,而5.x目前在Alpha中。为什么这里的游戏停留在过去?我应该担心吗

我发现了几个似乎密切相关的问题,比如and(哪个游戏使用),但这两个问题似乎在我使用的游戏2.4.2之前就已经解决了。尽管如此,我还是尝试了一些修复,比如升级异步http客户端依赖项,从异步http客户端中排除org.jboss.netty可传递依赖项,并升级到netty 3.10.4.Final


所以现在我陷入困境,但我觉得我只是错过了一个入门指南。也许所有这些依赖性问题和相关bug都只是浪费时间?

所以在发布问题5分钟后,我就明白了。。。我的配置密钥错误密钥库路径必须是绝对路径或相对于项目根目录的路径(即添加conf/如果它在conf文件夹中):

我在钥匙上的错误是使用圆点:

而不是:

https.keyStore
https.keyStorePassword

我不知道如何从dot.notation到camelCase,甚至不知道我在这里到底配置了什么。这些参数更像是标准的JVM参数
javax.net.ssl.keyStore
javax.net.ssl.keystrepassword
,但并不完全相同。我觉得我错过了一个技巧。如果Play报告它找不到密钥库而不是NPE,那也很好,但是因为我似乎正在配置JVM,所以Play对此可能无能为力,除非有其他方法来配置这些东西。。。有像样的文档

@WillSargent你是说我在这里用
javaOptions
直接设置JVM参数吗?这应该是我的目标吗?也就是说,是否有其他方法可以将这些设置应用于
devSettings
?我不确定我在这里会得到什么,但也许可以对不同的开发和生产部署进行更多的控制?这些javaOptions似乎也不适用于我的测试(无法测试ssl强制)。这可能是因为我对测试框架缺乏了解,正如我所说的,我觉得我在错误的级别配置了ssl。HTTPS文档中的设置应该出现在application.conf中,但它们也应该可以从系统属性中工作。你能在提交一个问题,我来看看吗?另外,SSL引擎提供程序的源代码(配置HTTPS以便播放)在这里:当你通过application.conf发现配置不起作用时,你是如何运行你的应用程序的?(第一次发表评论,没有意识到enter将提交而不是添加新行!)我的意思是,您是在使用activator/sbt运行任务,还是在准备应用程序并运行生成的脚本?我这样问是因为在为自己弄明白一些事情时,我注意到:“这意味着HTTP服务器在启动时无法访问application.conf文件……相反,您需要使用系统属性或上面所示的devSettings设置……”我在activator/sbt下本地运行,“无法访问”注释让我尝试了build.sbt中的
devSettings
,但它随后抱怨devSettings未定义,而且无论如何,我无法确定应该是什么键。当时我偶然发现了
javaOptions
,但正如我所说的,这感觉是错误的,我想了解如何在Play+Java中使用devSettings应用这些设置。