Spring Boot配置购买的SSL证书启动失败,报DerInputStream错误
问题根源分析
兄弟,你遇到的DerInputStream.getLength(): lengthTag=109, too big错误,本质是生成的PKCS12密钥库格式损坏,问题出在创建密钥库的步骤上:
你执行的keytool -import命令是用来将公钥证书导入到已有的密钥库中,但你却传入了hanzien_de.key这个私钥文件——这完全不符合该命令的使用场景,直接导致生成的keystore_hanzien.de.p12是一个无效的PKCS12文件,Tomcat加载时无法解析DER格式,自然启动失败。
正确的解决步骤
购买的SSL证书一般包含三个核心文件:你的域名证书(比如hanzien_de.crt)、CA中间证书链(比如ca_bundle.crt)、你当初申请证书时生成的私钥文件hanzien_de.key。你需要用openssl命令把这些文件合并成合法的PKCS12密钥库,具体操作如下:
- 执行openssl命令生成有效PKCS12文件:
openssl pkcs12 -export -in hanzien_de.crt -inkey hanzien_de.key -certfile ca_bundle.crt -name tomcat -out keystore_hanzien.de.p12
执行时会提示你设置一个密码,这个密码要和后续配置里的key-store-password严格一致。
参数说明:
-export:指定生成PKCS12格式的导出文件-in:你的域名证书文件路径-inkey:对应的私钥文件路径-certfile:CA中间证书链文件路径(必须加上,否则浏览器会提示证书不被信任)-name:证书别名,要和你application.properties里的server.ssl.key-alias=tomcat一致-out:输出的PKCS12文件路径
替换旧的密钥库文件
把生成的新keystore_hanzien.de.p12放到项目的classpath:keystore/目录下,替换原来的无效文件。核对配置
确保application.properties里的配置和你生成文件时的设置匹配:
# ============================================================== # = SSL配置 # ============================================================== security.require-ssl=true server.ssl.key-store-type=PKCS12 server.ssl.key-store=classpath:keystore/keystore_hanzien.de.p12 server.ssl.key-store-password=你在openssl命令中设置的密码 server.ssl.key-alias=tomcat
额外注意事项
- 别再用
keytool -import处理私钥文件了,这个命令的作用是导入公钥证书到密钥库,不是用来合并私钥和证书生成新密钥库的。 - 如果你的私钥文件设置了密码保护,执行openssl命令时会提示你输入私钥密码,确保你知道这个密码。
- 生成PKCS12时的密码要和配置里的
key-store-password完全一致,大小写、特殊字符都不能错。
内容的提问来源于stack exchange,提问作者tobi
相关产品推荐
相关产品推荐

