首页 > 解决方案 > 如何将外部 ssl 证书导入 java 本地密钥库?

问题描述

我需要将 ssl 证书导入 java local keystore(cacerts) 才能访问远程 ldaps 服务器。我已经运行了以下命令:

keytool -keystore C:\Program Files\Java\jdk1.8.0_211\jre\lib\security\cacerts -import -alias myalias -file <PATH_TO_CERTIFICATE>/certificate.cer

证书已成功添加到密钥库:

keytool -list -alias myalias -keystore C:\Program Files\Java\jdk1.8.0_211\jre\lib\security\cacerts
Enter keystore password:
myalias, 24.10.2019, trustedCertEntry

我的应用程序属性:

  ssl:
    key-alias: myalias
    key-store-password: changeit
    key-store: C:\Program Files\Java\jdk1.8.0_211\jre\lib\security\cacerts

当我运行应用程序时,出现以下异常:

Caused by: java.lang.IllegalArgumentException: jsse.alias_no_key_entry
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:99)
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:71)
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:218)
    at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1124)
    at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1210)
    at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:586)
    at org.apache.catalina.connector.Connector.startInternal(Connector.java:1005)
    ... 14 more
Caused by: java.io.IOException: jsse.alias_no_key_entry
    at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:328)
    at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:247)
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:97)
    ... 20 more

我正在使用 Spring Boot 2.2.0

谁知道是什么问题?

标签: spring-bootsslldapcertificatekeystore

解决方案


您在 application.properties 中所做的是,您正在保护您的 springboot 应用程序。这与您尝试做的不同(调用 ldaps 服务器)。

当您将 ldap 服务器证书添加到您的 cacerts 中时,您无需执行任何其他操作。你可以直接打电话。

如果您在拨打电话时遇到 PKIX 异常,那么您需要确保 ldap 服务器证书的 CA 和 SubCA(s) 也是受信任的。


推荐阅读