我无法使用 Spring Boot 2.2.8 和 Undertow 加载 keystore.p12 或 .jks

Posted

技术标签:

【中文标题】我无法使用 Spring Boot 2.2.8 和 Undertow 加载 keystore.p12 或 .jks【英文标题】:I can`t load keystore.p12 or .jks with Spring Boot 2.2.8 and Undertow 【发布时间】:2020-10-18 13:31:01 【问题描述】:

我有这个属性文件:

server:
  port: 8443
  http2:
    enabled: true
  ssl:
    enabled: true
    key-store: classpath:keystore.p12
    key-store-password: admin00
    key-store-type: PKCS12
    key-alias: tomcat

我在资源文件夹中有 p12:

当我启动应用程序时显示此错误:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-06-28 10:21:55.068 ERROR 8380 --- [           main] o.s.b.SpringApplication                  : Application run failed

org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is java.lang.IllegalStateException: org.springframework.boot.web.server.WebServerException: Could not load key store 'classpath:keystore.p12'

我将 p12 复制到另一个文件夹 (/mnt/d/KeyStores/):

我测试: 密钥库:/mnt/d/KeyStores/keystore.p12

密钥库:D:\KeyStores\keystore.p12

密钥库:文件:/mnt/d/KeyStores/keystore.p12

密钥存储:文件:D:\KeyStores\keystore.p12

密钥库:file:///D:/KeyStores/keystore.p12

密钥库:file:///D://KeyStores//keystore.p12

密钥库:file:///D:\KeyStores\keystore.p12

同样的结果。我正在使用undertow:

package com.oesia.mako.config

import io.undertow.UndertowOptions
import org.springframework.boot.web.embedded.undertow.UndertowBuilderCustomizer
import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class UndertowConfig 

    @Bean
    fun embeddedServletContainerFactory(): UndertowServletWebServerFactory 
        val factory = UndertowServletWebServerFactory()
        factory.addBuilderCustomizers(UndertowBuilderCustomizer  builder ->
            builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true)
                    .setServerOption(UndertowOptions.HTTP2_SETTINGS_ENABLE_PUSH,true)
        )
        return factory
    


我的 gradle 文件是:

buildscript 
    ext 
        kotlinVersion = '1.3.72'
        springBootVersion = '2.2.8.RELEASE'
        springDocVersion = '1.3.9'
        groovyVersion = '2.5.12'
        groovySpockVersion = '1.2-groovy-2.5'
        validationApiVersion = '2.0.1.Final'
        liquibaseCoreVersion = '3.6.3'
        liquibaseVersion = '2.0.1'
        myBatisVersion = '3.4.5'
        injectVersion = '1'
        gitPropertiesVersion = '1.4.21'
        plantUMLVersion = '0.1.+'
        keycloakVersion = '4.0.0.Final'
        keycloakUndertowVersion = '6.0.0'
        postgreSQLVersion = '42.2.5'
        alpnBootVersion = '8.1.13.v20181017'
        sl4jVersion = '1.7.25'
        testLoggerVersion = '1.6.0'
        gradleTestsetsVersion = '3.0.1'
    
    repositories 
        mavenLocal()
        mavenCentral()
        maven  url "https://repo.spring.io/snapshot" 
        maven  url "https://repo.spring.io/milestone" 
        maven  url "https://plugins.gradle.org/m2/" 
    
    dependencies 
        classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
        classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion")
        classpath("be.jlr-home.gradle:plantumlPlugin:$plantUMLVersion")
        classpath("com.adarshr.test-logger:com.adarshr.test-logger.gradle.plugin:$testLoggerVersion")
        classpath("org.liquibase:liquibase-core:$liquibaseCoreVersion")
        classpath("org.liquibase:liquibase-gradle-plugin:$liquibaseVersion")
// Descomentar si se tiene git
//      classpath("gradle.plugin.com.gorylenko.gradle-git-properties:gradle-git-properties:$gitPropertiesVersion")
    


apply plugin: 'maven-publish'
apply plugin: 'groovy'
apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
apply plugin: 'jacoco'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'plantuml'
apply plugin: 'com.adarshr.test-logger'
apply plugin: 'liquibase'

group = 'com.oesia.mako'
rootProject.archivesBaseName = 'mako'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

compileKotlin 
    kotlinOptions.jvmTarget = "1.8"

compileTestKotlin 
    kotlinOptions.jvmTarget = "1.8"


repositories 
    mavenLocal()
    mavenCentral()
    maven  url "https://repo.spring.io/snapshot" 
    maven  url "https://repo.spring.io/milestone" 


sourceSets 
    main 
        kotlin 
            srcDir 'src/main/kotlin'
            srcDir 'src/main/customized/kotlin'
            srcDir 'src/main/generated/kotlin'
        
    
    test 
        groovy 
            srcDir 'src/test/groovy'
        
    


configurations 
    all 
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
        exclude group: 'ch.qos.logback', module: 'logback-classic'
    


dependencies 
    implementation("javax.inject:javax.inject:$injectVersion")
    implementation("org.springdoc:springdoc-openapi-ui:$springDocVersion")
    implementation("org.springdoc:springdoc-openapi-data-rest:$springDocVersion")
    implementation("org.springdoc:springdoc-openapi-kotlin:$springDocVersion")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
    implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion")
    implementation("javax.validation:validation-api:$validationApiVersion")
    implementation("com.oesia.cleanarchitecture:commons-domain:+")
    implementation("com.oesia.cleanarchitecture:commons-infrastructure:+")
    implementation("com.oesia.mako:mako-rrhh-domain:+")
    implementation("com.oesia.mako:mako-rrhh-usecases:+")
    implementation("com.oesia.mako:mako-rrhh-adapter:+")
    implementation("com.oesia.mako:mako-rrhh-config:+")
    implementation("org.springframework.boot:spring-boot-starter-security")
    implementation("org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:$springBootVersion")
    implementation("org.springframework.boot:spring-boot-starter-hateoas")
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    implementation("org.springframework.boot:spring-boot-starter-jdbc")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-undertow")
    implementation("org.springframework.boot:spring-boot-starter-log4j2:$springBootVersion")
    implementation("org.postgresql:postgresql:$postgreSQLVersion")
    testRuntimeOnly("net.bytebuddy:byte-buddy:1.9.1")          // allows mocking of classes (in addition to interfaces)
    testRuntimeOnly("org.objenesis:objenesis:2.6")    // allows mocking of classes without default constructor (together with CGLIB)
    // Liquibase
    liquibaseRuntime("org.liquibase:liquibase-core:$liquibaseCoreVersion")
    liquibaseRuntime("org.liquibase:liquibase-groovy-dsl:$liquibaseVersion")
    liquibaseRuntime("ch.qos.logback:logback-core:1.2.3")
    liquibaseRuntime("ch.qos.logback:logback-classic:1.2.3")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    //implementation("org.keycloak:keycloak-spring-boot-2-starter:$keycloakVersion")
    //implementation("org.keycloak:keycloak-undertow-adapter:$keycloakUndertowVersion")
    testImplementation("org.codehaus.groovy:groovy-all:$groovyVersion")
    testImplementation("org.spockframework:spock-core:$groovySpockVersion")
    testImplementation("org.spockframework:spock-spring:$groovySpockVersion")
    // optional dependencies for using Spock
    testImplementation("org.hamcrest:hamcrest-core:1.3") // only necessary if Hamcrest matchers are used


testlogger 
    // pick a theme - mocha, standard, plain, mocha-parallel, standard-parallel or plain-parallel
    theme 'mocha'
    // set to false to disable detailed failure logs
    showExceptions true
    // set threshold in milliseconds to highlight slow tests
    slowThreshold 2000
    // displays a breakdown of passes, failures and skips along with total duration
    showSummary true
    // set to false to hide passed tests
    showPassed true
    // set to false to hide skipped tests
    showSkipped true
    // set to false to hide failed tests
    showFailed true
    // enable to see standard out and error streams inline with the test results
    showStandardStreams false
    // set to false to hide passed standard out and error streams
    showPassedStandardStreams true
    // set to false to hide skipped standard out and error streams
    showSkippedStandardStreams true
    // set to false to hide failed standard out and error streams
    showFailedStandardStreams true


def changeLog = "./schema/ddl/database-changelog-master.yml"

task liquibaseDev 
    println "executing dev liquibase"
    liquibase 
        activities 
            main 
                changeLogFile changeLog
                url 'jdbc:postgresql://localhost:5432/mako'
                username 'mako'
                password 'mako'
            
        
        

task liquibaseInt 
    println "executing int liquibase"
    liquibase 
        activities 
            main 
                changeLogFile changeLog
                url 'jdbc:postgresql://localhost:5432/mako'
                username 'mako'
                password 'mako'
            
        
        

task liquibasePre 
    println "executing pre liquibase"
    liquibase 
        activities 
            main 
                changeLogFile changeLog
                url 'jdbc:postgresql://localhost:5432/mako'
                username 'mako'
                password 'mako'
            
        
        

task liquibasePro 
    println "executing pro liquibase"
    liquibase 
        activities 
            main 
                changeLogFile changeLog
                url 'jdbc:postgresql://localhost:5432/mako'
                username 'mako'
                password 'mako'
            
        
        


jacoco 
    toolVersion = "0.8.3"
    reportsDir = file("$buildDir/customJacocoReportDir")


jacocoTestReport 
    reports 
        xml.enabled false
        csv.enabled false
        html.destination file("$buildDir/jacocoHtml")
    


bootRun 
    if ( project.hasProperty('jvmArgs') ) 
        jvmArgs = (project.jvmArgs.split("\\s+") as List)
    


plantuml 
    sourcePath = 'src/main/kotlin' +
            'src/main/customized/kotlin' +
            'src/main/generated/kotlin'


publishing 
    publications 
        mavenJava(MavenPublication) 
            from components.java
        
    

如何使用 Spring Boot 2.2.8 和 Undertow 配置 https?。我认为这在旧版本的 Spring Boot 中运行。使用 http 运行良好,仅使用 https 崩溃,因为不加载 p12 文件。

我将 p12 更改为 jks 等效项并出现相同的错误:

server:
  port: 8443
  http2:
    enabled: true
  ssl:
    key-store: classpath:keystore.jks    
    key-store-password: admin00
    key-store-type: JKS
    key-alias: tomcat

输出:

2020-06-29 10:21:55.915  WARN 12772 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is java.lang.IllegalStateException: org.springframework.boot.web.server.WebServerException: Could not 
load key store 'classpath:keystore.jks'
2020-06-29 10:21:55.981  INFO 12772 --- [           main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-06-29 10:21:56.042 ERROR 12772 --- [           main] o.s.b.SpringApplication                  : Application run failed      

org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is java.lang.IllegalStateException: org.springframework.boot.web.server.WebServerException: Could not load key store 'classpath:keystore.jks'
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:156) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:545) ~[springc 
ontext-5.2.7.RELEASE.jar:5.2.7.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at com.oesia.mako.MakoApplicationKt.main(MakoApplication.kt:10) [main/:?]
Caused by: java.lang.IllegalStateException: org.springframework.boot.web.server.WebServerException: Could not load key store 'classpath:keystore.jks'
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.getKeyManagers(SslBuilderCustomizer.java:125) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.customize(SslBuilderCustomizer.java:75) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.customizeSsl(UndertowServletWebServerFactory.java:252) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.createBuilder(UndertowServletWebServerFactory.java:239) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.getWebServer(UndertowServletWebServerFactory.java:220) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:180) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:153) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        ... 8 more
Caused by: org.springframework.boot.web.server.WebServerException: Could not load key store 'classpath:keystore.jks'
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.loadStore(SslBuilderCustomizer.java:188) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.loadKeyStore(SslBuilderCustomizer.java:169) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.getKeyStore(SslBuilderCustomizer.java:143) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.getKeyManagers(SslBuilderCustomizer.java:110) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.customize(SslBuilderCustomizer.java:75) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.customizeSsl(UndertowServletWebServerFactory.java:252) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.createBuilder(UndertowServletWebServerFactory.java:239) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.getWebServer(UndertowServletWebServerFactory.java:220) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:180) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:153) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        ... 8 more
Caused by: java.io.IOException: Invalid keystore format
        at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:663) ~[?:1.8.0_211]
        at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56) ~[?:1.8.0_211]
        at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224) ~[?:1.8.0_211]
        at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70) ~[?:1.8.0_211]
        at java.security.KeyStore.load(KeyStore.java:1445) ~[?:1.8.0_211]
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.loadStore(SslBuilderCustomizer.java:184) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.loadKeyStore(SslBuilderCustomizer.java:169) ~[spi 
ng-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.getKeyStore(SslBuilderCustomizer.java:143) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.getKeyManagers(SslBuilderCustomizer.java:110) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.customize(SslBuilderCustomizer.java:75) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.customizeSsl(UndertowServletWebServerFactory.java:252) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.createBuilder(UndertowServletWebServerFactory.java:239) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.getWebServer(UndertowServletWebServerFactory.java:220) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:180) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:153) ~[spring-boot-2.2.8.RELEASE.jar:2.2.8.RELEASE]
        ... 8 more


> Task :bootRun FAILED

【问题讨论】:

【参考方案1】:

Jusy 包含此依赖项。它用于加载证书并启用 SSL

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

【讨论】:

提前致谢。但是我解决了重新生成de jks的问题。已损坏,这就是问题所在。【参考方案2】:

jks 已损坏。我用以下方法测试了 jks:

keytool.exe -list -v -keystore keystore.jks 

我可以看到它已损坏。

然后我重新生成 jks:

keytool.exe -genkeypair -alias tomcat -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 9650 -storepass admin00

我的属性是:

server:
  port: 8443
  http2:
    enabled: true
  ssl:
    enabled: true
    key-store: classpath:keystore.jks
    key-store-password: admin00
    key-store-type: JKS
    trust-store-type: JKS
    key-alias: tomcat

应用运行正常:

 __  __  _____  __ ___ _____     _____  _____  ___     _____  _____  _____  ____ 
/  \/  \/  _  \|  |  //  _  \   /  _  \/  _  \/___\   /  _  \/   __\/  ___>/    \
|  \/  ||  _  ||  _ < |  |  |   |  _  ||   __/|   |   |  _  <|   __||___  |\-  -/
\__ \__/\__|__/|__|__\\_____/   \__|__/\__/   \___/   \__|\_/\_____/<_____/ |__|
2020-07-08 17:54:14.735  INFO 4212 --- [           main] c.o.m.MakoApplicationKt                  : Starting MakoApplicationKt on DESKTOP-1MRHH61 with PID 4212 (D:\Workspaces\CleanArchitecture2\Mako\mako-rrhh-app\build\classes\kotlin\main started by jagilberte in D:\Workspaces\CleanArchitecture2\Mako\mako-rrhh-app)
2020-07-08 17:54:14.751  INFO 4212 --- [           main] c.o.m.MakoApplicationKt                  : The following profiles are active: dev
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/jagilberte/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-simple/1.7.30/e606eac955f55ecf1d8edcccba04eb8ac98088dd/slf4j-simple-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/jagilberte/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-slf4j-impl/2.12.1/14973e22497adaf0196d481fb99c5dc2a0b58d41/log4j-slf4j-impl-2.12.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]   
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
2020-07-08 17:54:17.288  WARN 4212 --- [           main] i.u.w.jsr                                : UT026010: Buffer pool was 
not set on WebSocketDeploymentInfo, the default pool will be used
2020-07-08 17:54:17.322  INFO 4212 --- [           main] i.u.servlet                              : Initializing Spring embedded WebApplicationContext
2020-07-08 17:54:17.323  INFO 4212 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2482 ms
2020-07-08 17:54:18.606  INFO 4212 --- [           main] o.s.a.f.CglibAopProxy                    : Unable to proxy interface-implementing method [public final void org.springframework.dao.support.DaoSupport.afterPropertiesSet() throws java.lang.IllegalArgumentException,org.springframework.beans.factory.BeanInitializationException] because it is marked as final: Consider using interface-based JDK proxies instead!
2020-07-08 17:54:18.836  INFO 4212 --- [           main] o.s.s.c.ThreadPoolTaskExecutor           : Initializing ExecutorService 'applicationTaskExecutor'
2020-07-08 17:54:20.428  INFO 4212 --- [           main] o.s.s.w.DefaultSecurityFilterChain       : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@707f4647, org.springframework.security.web.context.SecurityContextPersistenceFilter@6644bdf5, org.springframework.security.web.header.HeaderWriterFilter@f44d033, org.springframework.security.web.authentication.logout.LogoutFilter@2c15034f, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@5ad40184, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7c9ea1d0, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@7497a554, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4b8a0d03, org.springframework.security.web.session.SessionManagementFilter@25e95af1, org.springframework.security.web.access.ExceptionTranslationFilter@4a58e0e9, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@2f75a9b1]
2020-07-08 17:54:20.528  INFO 4212 --- [           main] o.s.b.a.e.w.EndpointLinksResolver        : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-07-08 17:54:20.644  INFO 4212 --- [           main] i.undertow                               : starting server: Undertow 
- 2.0.30.Final
2020-07-08 17:54:20.653  INFO 4212 --- [           main] o.xnio                                   : XNIO version 3.3.8.Final  
2020-07-08 17:54:20.667  INFO 4212 --- [           main] o.x.nio                                  : XNIO NIO Implementation Version 3.3.8.Final
2020-07-08 17:54:20.782  INFO 4212 --- [           main] o.s.b.w.e.u.UndertowServletWebServer     : Undertow started on port(s) 8443 (https) with context path '/mako'
2020-07-08 17:54:20.788  INFO 4212 --- [           main] c.o.m.MakoApplicationKt                  : Started MakoApplicationKt 
in 6.811 seconds (JVM running for 9.946)
<==========---> 83% EXECUTING [3m 38s]

【讨论】:

以上是关于我无法使用 Spring Boot 2.2.8 和 Undertow 加载 keystore.p12 或 .jks的主要内容,如果未能解决你的问题,请参考以下文章

无法实现对 Spring-Boot API 的基于角色的访问

我无法使用 Spring Boot 和 JPA 连接到 mysql 数据库

无法将 Spring Data MongoDB + Spring Data JPA 与 Spring Boot 一起使用

如何解决在使用 Spring Boot 和 Spring Security 启用 CSRF 后无法正常工作的登录问题?

Docker:无法连接 Spring Boot 和 MYSQL

使用 Gradle 和 Spring Boot 时无法发布到本地 maven 存储库