LetsEncrypt cert as p12 在 Spring Boot 中未通过 instanceof CertEntry 测试

LetsEncrypt cert as p12 fails instanceof CertEntry test in Spring Boot

我使用 LetsEncrypt 的 certbot 生成了证书和密钥 pems:

sudo certbot certonly -a standalone -d footeware.ca

...并将它们转换为 p12:

openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name tomcat -CAfile chain.pem -caname root

我将 p12 移到我的开发机器上,放到我的 eclipse 项目的资源文件夹中。 当我启动应用程序并通过 sun.security.pkcs12.PKCS12KeyStore#engineIsCertificateEntry 进行调试时,它找到了别名条目,但声明它不是 instanceof sun.security.pkcs12.PKCS12KeyStore.CertEntry 而是一个 sun.security.pkcs12.PKCS12KeyStore$PrivateKeyEntry 所以它失败了:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

p12 上的 keytool -list:

Alias name: tomcat
Creation date: Jan. 3, 2022
Entry type: PrivateKeyEntry
Certificate chain length: 3
Certificate[1]:
Owner: CN=footeware.ca
Issuer: CN=R3, O=Let's Encrypt, C=US

我做错了什么? PrivateKeyEntry 应该是其他东西吗?

感谢@Saif link。 我做了:

sudo update-ca-certificates -f
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

...并使用了我原来的 keystore.p12(似乎没有任何问题)。 解决方案是将我的 application.properties' 值更改为:

server.ssl.trust-store=file:/etc/ssl/certs/java/cacerts
server.ssl.trust-store-password=changeit
server.ssl.trust-store-type=JKS

我一直在将这些属性设置为 keystore.p12,认为它们是一样的(菜鸟)。 我部署并启动了 appication jar,将我的路由器设置为将 443 转发到我的 server@8443(而不是原来的 80 到 8090)并且我有一个快乐的 https 指示器!

现在我只需要修复升级 bootstrap 似乎导致的损坏 css。痛苦的是证书阻止我现在使用本地主机,因为它只支持 footeware.ca。 有什么想法吗?