我使用以下命令创建了自签名证书:
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提供程序:
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
答案 0 :(得分:2)
今天,我只是遇到这个问题,当未正确配置application.properties文件中的安全性配置时,就会出现此问题,这会导致证书链中断。
我使用的是
server.ssl.key-password=123456789
代替
server.ssl.key-store-password=123456789
这样的小问题可能会引起问题。
答案 1 :(得分:1)
当使用BouncyCastle作为PKCS12密钥存储提供程序并且密钥别名使用不正确的大写字母时,也会发生这种情况。
例如(不正确):
server.ssl.key-alias=17B2E92E5694C7AE11A65C4A4EBFC75558399E05
代替(正确):
server.ssl.key-alias=17b2e92e5694c7ae11a65c4a4ebfc75558399e05
此错误的奇怪之处在于找到了密钥,因此显然不区分大小写,但是对ks.getCertificateChain(keyAlias)
的检查是。