码头:初始化密钥库时出错

Posted

技术标签:

【中文标题】码头:初始化密钥库时出错【英文标题】:Jetty: Error initializing keystore 【发布时间】:2018-06-23 20:03:26 【问题描述】:

对于初学者,我已经在 *** 上参考了这些问题,但它们并没有解决我的问题,因此创建了一个新问题:

java.io.IOException: Invalid Keystore format

tomcat 7 ssl invalid keystore format

问题:

在将 SAML 与我的 Jetty Web 应用程序集成时(按照教程:https://developer.okta.com/blog/2017/03/16/spring-boot-saml),我收到以下错误:

org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.RuntimeException: Error initializing keystore

我尝试从多个版本的 JDK 创建密钥库,但对于所有文件,我都收到相同的错误。

我也没有使用 maven。

编辑:

异常跟踪:

unavailable Error creating bean with name 'springSecurityFilterChain' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.RuntimeException: Error initializing keystore
FAILED o.e.j.s.ServletContextHandler@550dbc7a/api,null,STARTING: javax.servlet.ServletException: org.springframework.web.servlet.DispatcherServlet-7b2bbc3@bef2d67e==org.springframework.web.servlet.DispatcherServlet,-1,false org.springframework.web.servlet.DispatcherServlet-7b2bbc3@bef2d67e==org.springframework.web.servlet.DispatcherServlet,-1,false
FAILED  
Error Details:
     org.springframework.web.servlet.DispatcherServlet-7b2bbc3@bef2d67e==org.springframework.web.servlet.DispatcherServlet,-1,false
Server exiting.

【问题讨论】:

你看过这个吗? ***.com/questions/26764806/… 是的,我做到了。它给出了解决方案,因为“maven 可能正在过滤掉 jks 文件”。我没有使用我的问题中提到的 Maven。 keytool 对这个文件有效吗?试试 C:\Java\jdk_1.7.3\bin>keytool -list keystore.jks 我得到“非法选项:keystore.jks” 更正:keytool -list -keystore keystore.jks 给出正确的输出。没有错误 【参考方案1】:

所以下载了源码,调试了一阵子,才发现问题所在。

原来,这条来自源代码的行导致了问题(我在我的问题中提到的链接使用此代码): Spring Security with SAML

我更改了以下行:

DefaultResourceLoader loader = new DefaultResourceLoader();
Resource storeFile = loader.getResource(keyStore.getStoreFilePath());

Resource storeFile = new FileSystemResource(keyStore.getStoreFilePath());

而且效果很好。我所做的唯一更改是使用FileSystemResource 而不是DefaultResourceLoader

虽然,在不同的应用程序中,不需要更改,但我不确定为什么它无法在 1 个应用程序中读取相同的文件而在另一个应用程序中失败。需要更多调试。但是,我正在分享解决方案,以防有人偶然发现同样的问题。

【讨论】:

DefaultResourceLoader 解析类路径资源,而 FileSystemResourceLoader 将普通路径解析为文件系统资源。来源:docs.spring.io/spring-framework/docs/current/javadoc-api/org/…

以上是关于码头:初始化密钥库时出错的主要内容,如果未能解决你的问题,请参考以下文章

将公共证书导入密钥库时出错

使用多个读卡器加载 PKCS 密钥库时出错

由于 ssh 密钥,Git 推送失败:主机密钥验证失败。从码头工人内部

《java编程思想》 初始化与清理

将码头与 Repast simphony 一起使用时出错

Rails:运行 wkhtmltopdf 时出错——(加载共享库时出错)