KeyStore 和 TrustStore 加载失败 - 私钥必须附有证书链

问题描述 投票:0回答:2

我使用以下命令创建了自签名证书:

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
java ssl keystore
2个回答
46
投票

application.properties
文件中的安全配置配置不正确时,就会出现此问题。这会导致证书链断裂。

就我而言,我使用了

 server.ssl.key-password=123456789

而不是

server.ssl.key-store-password=123456789

2
投票

当使用 BouncyCastle 作为 PKCS12 密钥存储提供程序并且密钥别名使用不正确的大写字母时,也会发生这种情况。

例如(不正确):

server.ssl.key-alias=17B2E92E5694C7AE11A65C4A4EBFC75558399E05

相反(正确):

server.ssl.key-alias=17b2e92e5694c7ae11a65c4a4ebfc75558399e05

这个错误的奇怪之处在于找到了密钥,所以显然不区分大小写,但对

ks.getCertificateChain(keyAlias)
的检查是。

© www.soinside.com 2019 - 2024. All rights reserved.