Java 由于Boxfuse开发虚拟机上的SSL错误,Spring引导应用程序无法启动

Java 由于Boxfuse开发虚拟机上的SSL错误,Spring引导应用程序无法启动,java,ssl,spring-boot,jce,boxfuse,Java,Ssl,Spring Boot,Jce,Boxfuse,我有一个具有以下SSL配置的Spring引导应用程序: application.yml 正确的特定于环境的密钥存储存在于类路径中,并且在启动后可以访问,这已通过使用以下PowerShell脚本从控制台手动启动进行验证: 开发人员ps1 手动启动后,应用程序在本地主机上成功启动,并且在生产和开发模式下都可用,并具有正确的证书。 现在,我尝试使用以下命令在PowerShell中以Boxfuse应用程序的形式启动它: boxfuse run target\myapp-1.0.0.12314.jar -

我有一个具有以下SSL配置的Spring引导应用程序:

application.yml

正确的特定于环境的密钥存储存在于类路径中,并且在启动后可以访问,这已通过使用以下PowerShell脚本从控制台手动启动进行验证:

开发人员ps1

手动启动后,应用程序在本地主机上成功启动,并且在生产和开发模式下都可用,并具有正确的证书。 现在,我尝试使用以下命令在PowerShell中以Boxfuse应用程序的形式启动它:

boxfuse run target\myapp-1.0.0.12314.jar -env=dev "-envvars.X_KEYSTORE_PASSWORD=correctpassword"
应用程序无法使用此stacktrace启动:

vb-c2b995f3 -> 2016-11-17 15:31:56.659 ERROR 636 --- [           main] o.apache.catalina.core.StandardService   : Failed
 to start connector [Connector[HTTP/1.1-443]]
vb-c2b995f3 ->
vb-c2b995f3 -> org.apache.catalina.LifecycleException: Failed to start component [Connector[HTTP/1.1-443]]
vb-c2b995f3 ->  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:158)
vb-c2b995f3 ->  at org.apache.catalina.core.StandardService.addConnector(StandardService.java:225)
vb-c2b995f3 ->  at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedC
onnectors(TomcatEmbeddedServletContainer.java:234)
...
vb-c2b995f3 -> Caused by: java.lang.IllegalArgumentException: java.io.IOException: DerInputStream.getLength(): lengthTag
=109, too big.
vb-c2b995f3 ->  at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:103)
vb-c2b995f3 ->  at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:81)
...
vb-c2b995f3 -> Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
vb-c2b995f3 ->  at sun.security.util.DerInputStream.getLength(DerInputStream.java:561)
vb-c2b995f3 ->  at sun.security.util.DerValue.init(DerValue.java:365)
vb-c2b995f3 ->  at sun.security.util.DerValue.<init>(DerValue.java:320)
vb-c2b995f3 ->  at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1914)
vb-c2b995f3->2016-11-17 15:31:56.659错误636---[main]o.apache.catalina.core.StandardService:失败
启动连接器[connector[HTTP/1.1-443]]
vb-c2b995f3->
vb-c2b995f3->org.apache.catalina.LifecycleException:无法启动组件[Connector[HTTP/1.1-443]]
vb-c2b995f3->org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:158)
vb-c2b995f3->位于org.apache.catalina.core.StandardService.addConnector(StandardService.java:225)
vb-c2b995f3->位于org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedC
连接器(TomcatEmbeddedServletContainer.java:234)
...
vb-c2b995f3->原因:java.lang.IllegalArgumentException:java.io.IOException:DerInputStream.getLength():lengthTag
=109,太大了。
vb-c2b995f3->位于org.apache.tomcat.util.net.AbstractJsseEndpoint.CreateSLContext(AbstractJsseEndpoint.java:103)
vb-c2b995f3->org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:81)
...
vb-c2b995f3->由以下原因引起:java.io.IOException:DerInputStream.getLength():lengthTag=109,太大。
vb-c2b995f3->at sun.security.util.DerInputStream.getLength(DerInputStream.java:561)
vb-c2b995f3->at sun.security.util.DerValue.init(DerValue.java:365)
vb-c2b995f3->at sun.security.util.DerValue.(DerValue.java:320)
vb-c2b995f3->at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1914)
是什么让这两种启动应用程序的方式如此不同?我怎样才能修好它

UPD:通过将密钥存储转换为JKS格式并将密钥存储类型设置为PKCS12,问题得到了解决

UPD2:问题的根本原因如下:

密钥长度可能指向可能需要启用的JDK无限强度加密。请参见

事实上,这是我的配置中缺少的一个步骤,但是将策略文件简单地放在src/main/resources中没有帮助。它们应该位于最终可执行JAR文件的根目录中,还是从BOOT-INF/classes中获取?换句话说,Boxfuse无限强度加密策略的自动拾取机制是否与Spring Boot Maven插件执行目标“重新打包”兼容?编辑:我已尝试将策略文件放在JAR的根目录中-没有帮助。仅供参考,您可以通过在调试模式(-X)下运行来检查Boxfuse是否正确找到您的无限强度加密JAR。然后您会看到一条消息,如“Overriding JRE local_policy.jar with version include in payload…”,是的,Boxfuse会在
BOOT-INF/classes/
中搜索它们。经过进一步思考,我现在倾向于认为密钥库已损坏或未找到,但这也不能解释为什么命令行中使用完全相同的jar文件。然而,最好的办法可能只是快速启动调试会话,看看发生了什么。当我将密钥库转换为JKS时,问题已经解决了。问题是应用程序将cacerts/cacerts视为PKCS12,可能是因为server.ssl.key-store-type设置。如果Boxfuse总是将FF cacerts文件添加到VM映像,这可能就是原因。
boxfuse run target\myapp-1.0.0.12314.jar -env=dev "-envvars.X_KEYSTORE_PASSWORD=correctpassword"
vb-c2b995f3 -> 2016-11-17 15:31:56.659 ERROR 636 --- [           main] o.apache.catalina.core.StandardService   : Failed
 to start connector [Connector[HTTP/1.1-443]]
vb-c2b995f3 ->
vb-c2b995f3 -> org.apache.catalina.LifecycleException: Failed to start component [Connector[HTTP/1.1-443]]
vb-c2b995f3 ->  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:158)
vb-c2b995f3 ->  at org.apache.catalina.core.StandardService.addConnector(StandardService.java:225)
vb-c2b995f3 ->  at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedC
onnectors(TomcatEmbeddedServletContainer.java:234)
...
vb-c2b995f3 -> Caused by: java.lang.IllegalArgumentException: java.io.IOException: DerInputStream.getLength(): lengthTag
=109, too big.
vb-c2b995f3 ->  at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:103)
vb-c2b995f3 ->  at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:81)
...
vb-c2b995f3 -> Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
vb-c2b995f3 ->  at sun.security.util.DerInputStream.getLength(DerInputStream.java:561)
vb-c2b995f3 ->  at sun.security.util.DerValue.init(DerValue.java:365)
vb-c2b995f3 ->  at sun.security.util.DerValue.<init>(DerValue.java:320)
vb-c2b995f3 ->  at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1914)