springboot 项目,证书问题

Caused by: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available
问题:
Springboot项目,添加https 方式发布接口:
使用了自己生成的证书:

生成证书:
keytool -genkeypair -alias "tomcat" -keyalg "PKCS12" -keystore "keystore.p12"

Enter keystore password: root123
Re-enter new password: root123
What is your first and last name?

What is the name of your organizational unit?

What is the name of your organization?

What is the name of your City or Locality?

What is the name of your State or Province?

What is the two-letter country code for this unit?

Is CN=zhanghuayun, OU=huayun, O=huayun, L=shenzhen, ST=guangdong, C=0755 correct?

yaml配置:
#开启ssl验证
server.ssl.enabled=true
#证书文件位置
server.ssl.key-store=classpath:keystore.p12
#上面的密钥口令
server.ssl.key-store-password=root123
#storetype 上面的类型
server.ssl.key-store-type=PKCS12
#tomcat上面的alias 别名
server.ssl.key-alias=tomcat

然后提示就是上面:
解决添加了
sunjce_provider.jar

现在报错:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2023-02-20 13:57:27.689 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181)
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54)
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155)
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332)
at com.huayun.chat.ChatRoomApplication.main(ChatRoomApplication.java:15)
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:229)
at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:43)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178)
... 14 common frames omitted
Caused by: java.lang.IllegalArgumentException: standardService.connector.startFailed
at org.apache.catalina.core.StandardService.addConnector(StandardService.java:238)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:282)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:213)
... 16 common frames omitted
Caused by: org.apache.catalina.LifecycleException: Protocol handler start failed
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1075)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.addConnector(StandardService.java:234)
... 18 common frames omitted
Caused by: java.lang.IllegalArgumentException: Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available
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:231)
at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1208)
at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1294)
at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:614)
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1072)
... 20 common frames omitted
Caused by: java.io.IOException: Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available
at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2167)
at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:222)
at java.base/java.security.KeyStore.load(KeyStore.java:1479)
at org.apache.tomcat.util.security.KeyStoreUtil.load(KeyStoreUtil.java:67)
at org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:215)
at org.apache.tomcat.util.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:207)
at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:281)
at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:245)
at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:97)
... 26 common frames omitted
Caused by: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available
at java.base/javax.crypto.Mac.getInstance(Mac.java:191)
at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2145)
... 34 common frames omitted

仅供参考:
根据您提供的错误信息,问题出在您的应用程序在尝试使用 HmacPBESHA256 算法时出现了 java.security.NoSuchAlgorithmException 异常。

要解决此问题,您可以尝试以下步骤:

1.确保您使用的 Java 版本支持 HmacPBESHA256 算法。该算法在 Java 8u151 及更高版本中可用。

2.确保您已经正确安装了 JDK,并且它已经被正确配置。

3.检查您的应用程序的依赖项是否正确。您可以尝试删除依赖项并重新构建项目以查看是否能够解决该问题。

4.检查您的证书文件是否已正确生成并被正确配置。请确保您的证书文件正确地包含了所有必要的信息,并且它的路径和密码都已正确配置在您的应用程序中。

5.检查您的应用程序配置是否正确。请确保您的 YAML 文件中的所有配置都已正确设置。

6.检查您的日志文件以获取更多详细信息,了解应用程序启动时发生了什么。您可以尝试在应用程序启动时使用 --debug 标志来获取更多详细信息。

7.最后,您可以尝试更新您的 JDK 版本以查看是否能够解决该问题。

根据错误提示,您的代码似乎缺少 HmacPBESHA256 加密算法,因此 Tomcat 无法使用 SSL 连接,进而导致启动失败。

这个问题可能是由于 Java 运行时环境中缺少 JCE(Java Cryptography Extension)的问题导致的,因为该扩展包中包含了更多的加密算法。您可以通过以下步骤来解决该问题:

1、去到 Oracle 的 Java SE 下载页面,下载适用于您的 Java 版本的 “Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files”。
2、将下载的 zip 文件解压到一个临时目录中。
3、找到您的 Java 安装目录下的 jre/lib/security 目录。这个目录中应该包含两个文件:local_policy.jar 和 US_export_policy.jar。
4、备份这两个文件并将其替换为您从下载页面下载的解压缩的文件中的相应文件。
5、重新启动您的 Spring Boot 应用程序,应该就可以解决这个问题了。
如果这些步骤没有解决问题,您还可以尝试升级您的 Java 运行时环境,以便获得更多的加密算法。