You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot配置PEM证书HTTPS报keycert别名非密钥条目错误

问题核心原因

抛出java.io.IOException: Alias name [keycert] does not identify a key entry是以下几个配置错误共同导致的:

  • keystore.properties中配置的私钥、证书路径为开发环境源码路径,项目打包为Jar后不存在src/main/resources目录结构,PEMCFG加载器无法读取到PEM文件,自然无法生成对应别名的密钥条目。
  • 启动类中手动创建了未初始化的PEM类型KeyStore实例,属于冗余代码,无实际作用,可能干扰Spring Boot内置的密钥库加载逻辑。
  • PEMCFG配置格式默认不识别无协议前缀的classpath资源路径,必须明确声明classpath:前缀才能正确读取Jar包内的资源文件。
修复方案

按以下步骤逐一修改即可:

  1. 修改src/main/resources/keystore/keystore.properties配置,将PEM文件路径替换为带classpath前缀的标准资源路径:
alias=keycert
source.key=classpath:keystore/private-key.pem
source.cert=classpath:keystore/certificate.pem

提前确认两个PEM文件确实存放在src/main/resources/keystore/目录下,构建时会被自动拷贝到classpath对应路径,打包后可正常访问。

  1. 精简启动类代码,删除冗余的KeyStore创建逻辑,仅保留PEM密钥库提供者注册即可,注意注册逻辑必须放在SpringApplication启动前执行,保证Tomcat启动前安全提供者已生效:
@SpringBootApplication
public class AnecdoticApplication {
    public static void main(String[] args) {
        Security.addProvider(new de.dentrassi.crypto.pem.PemKeyStoreProvider());
        SpringApplication.run(AnecdoticApplication.class, args);
    }
}
  1. 校验PEM文件格式合法性:

    • 私钥文件必须为PKCS#8编码格式,文件头尾标识为-----BEGIN PRIVATE KEY-----、-----END PRIVATE KEY-----。如果是传统PKCS#1格式(头尾标识带RSA字样:-----BEGIN RSA PRIVATE KEY-----),需通过openssl命令转换格式:
    openssl pkcs8 -topk8 -nocrypt -in 原始私钥文件路径 -out private-key.pem
    
    • 证书文件需为标准PEM编码,可存放单站点证书或完整证书链,不要夹带多余的文本注释。
  2. 原有application.properties中的SSL配置无需修改,保持如下配置即可:

# SSL
server.ssl.enabled=true
server.ssl.key-store=classpath:keystore/keystore.properties
server.ssl.key-store-type=PEMCFG
server.ssl.key-store-password=dummy
server.ssl.key-alias=keycert

PEMCFG类型密钥库不校验密码,配置中key-store-password字段填任意非空值均可,dummy为官方推荐的占位值,无需调整。

修改完成后重新构建启动项目,HTTPS即可正常加载,不会再出现别名不匹配的错误。


内容的提问来源于stack exchange,提问作者José María

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:57:18