Spring Boot 3.1.4:如何配置带密码的PEM格式RSA私钥证书?
问题
使用win-acme生成SSL证书后,在Spring Boot v3.1.4中部署时,无密码的私钥可正常运行,但为提升安全性改用带密码加密的RSA私钥,配置完证书、私钥并设置application.yml后,系统提示“Unrecognized private key format”错误。请问仅通过application.yml配置能否实现该需求?
报错信息
Caused by: java.lang.IllegalStateException: Error loading private key file: Unrecognized private key format at org.springframework.boot.ssl.pem.PemPrivateKeyParser.parse(PemPrivateKeyParser.java:200) at org.springframework.boot.ssl.pem.PemSslStoreBundle.createKeyStore(PemSslStoreBundle.java:92) ... 24 common frames omitted Caused by: java.lang.IllegalStateException: Unrecognized private key format at org.springframework.boot.ssl.pem.PemPrivateKeyParser.parse(PemPrivateKeyParser.java:197) ... 25 common frames omitted
当前application.yml配置
server: port: ${PORT} ssl: certificate: C:\cert\crt.pem certificate-private-key: C:\cert\key.pem key-store-password: 1234567890
私钥开头内容
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-256-CBC
解决方案
仅通过application.yml配置无法直接解决这个问题,原因和处理方式如下:
格式不兼容:Spring Boot v3.1.x的PEM解析器
PemPrivateKeyParser不支持传统BEGIN RSA PRIVATE KEY格式的加密私钥,它仅支持PKCS#8格式(BEGIN ENCRYPTED PRIVATE KEY)的加密私钥。你的私钥是传统的RSA加密格式,因此触发格式识别错误。处理步骤:
- 转换私钥格式:使用OpenSSL将现有加密私钥转换成PKCS#8格式,执行命令:
执行时需输入原私钥密码,之后可设置新密码(也可沿用原密码)。openssl pkcs8 -topk8 -in key.pem -out encrypted-key-pkcs8.pem -v2 aes-256-cbc - 修改配置文件:将
application.yml中的certificate-private-key指向转换后的PKCS#8格式私钥,保留key-store-password配置(填写私钥的加密密码):server: port: ${PORT} ssl: certificate: C:\cert\crt.pem certificate-private-key: C:\cert\encrypted-key-pkcs8.pem key-store-password: 1234567890
- 转换私钥格式:使用OpenSSL将现有加密私钥转换成PKCS#8格式,执行命令:
完成上述操作后,Spring Boot即可正确识别并加载带密码的加密私钥。
内容的提问来源于stack exchange,提问作者fudge
相关产品推荐
相关产品推荐

