java - KeyStore 和 TrustStore 加载失败 - 私钥必须附有证书链
问题描述
我使用以下命令创建了一个自签名证书:
keytool -genkeypair -keyalg RSA -alias test-api -keystore test-api.p12 -storepass password -validity 3650 -keysize 2048 -storetype pkcs12
然后我将此密钥库导入新的信任库:
keytool -import -trustcacerts -alias test-api-2018 -file test.crt -keystore trusted-keystore.p12 -storetype pkcs12
在 Java 中,创建自定义 SSL 存储提供程序 ( org.springframework.boot.context.embedded.SslStoreProvider
)。作为其中的一部分,使用以下 Java 代码加载了密钥库和信任库:
try {
try (final InputStream keyStoreStream = new ByteArrayInputStream(Base64.decode(keyStoreEncoded))) {
keyStore = KeyStore.getInstance(KEYSTORE_TYPE_PKCS12);
LOGGER.info("Loading a KeyStore object based on the decoded value.");
keyStore.load(keyStoreStream, serverSslKeyPassword.toCharArray());
}
....
trustStore.load(trustStoreStream, serverSslTrustStorePassword.toCharArray());
}
EmbeddedServletContainerCustomizer
创建并设置 SSL Provider的自定义实现:
public void customize(final ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {
configurableEmbeddedServletContainer.setSslStoreProvider(awsSslStoreProvider);
}
由于以下错误,应用程序无法启动:
Caused by: java.lang.IllegalArgumentException: Private key must be accompanied by certificate chain
at java.security.KeyStore.setKeyEntry(KeyStore.java:1136)
at org.apache.tomcat.util.net.jsse.JSSEUtil.getKeyManagers(JSSEUtil.java:253)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:114)
... 19 common frames omitted
解决方案
我只是把这个问题带到今天,当 application.properties 文件中的安全配置配置不正确时,就会出现问题,这会导致证书链中断。
在我的情况下,我使用
server.ssl.key-password=123456789
代替
server.ssl.key-store-password=123456789
像这样的小问题可能会导致问题。
推荐阅读
- html5-canvas - 在画布/ Phaser 3 中创建表格(优先级)
- android - Firebase 基于查询的安全规则不适用于模拟器
- c++ - 简化可扩展的“对数据 Y 执行操作 X”框架
- python - Pandas:根据列表设置值
- reactjs - eslint-plugin-react 使用 Render 返回语法错误
- django - Django中的IP地址超链接
- angular - 如何在 Angular 5 应用程序中使用 Mapbox?
- python - Django - 将 Auth 用户名更改为 Autofield 会破坏代码
- python - pycharm 通过控制台运行代码
- android - Firebase RecyclerView OnDataChanged 仅显示最后一个元素