当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot应用程序中找不到KeyStore.jks和TrustStore.jks

夹谷硕
2023-03-14

我编写了一个双向自动验证restful service cleint来通过HTTPS在端口8443上使用安全的restful web服务。以下是application.properties的部分内容:

trust.store=classpath:truststore.jks

key.store=类路径:keystore.jks

key.store.password=xyz123

下面是配置RestTemplate的两种方法

@Configuration
public class SSLTemplate {

    @Value("${key.store}")
    private String  keyStore;
    @Value("${key.store.password}")
    private String keyStorePassword;
    @Value("${trust.store}")
    private String  trustStore;
    @Value("${trust.store.password}")
    private String trustStorePassword;

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) throws Exception {
        SSLContext sslContext = SSLContextBuilder.create()
                .loadKeyMaterial(ResourceUtils.getFile(keyStore), keyStorePassword.toCharArray(), keyStorePassword.toCharArray())
                .loadTrustMaterial(ResourceUtils.getFile(trustStoreF), trustStorePassword.toCharArray())
                .build();
    ...
}

@Configuration
public class SSLTemplate {

    @Value("${key.store}")
    private Resource keyStoreR;
    @Value("${key.store.password}")
    private String keyStorePassword;
    @Value("${trust.store}")
    private Resource trustStoreR;
    @Value("${trust.store.password}")
    private String trustStorePassword;

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) throws Exception {
        SSLContext sslContext = SSLContextBuilder.create()
                .loadKeyMaterial(keyStoreR.getURL(), keyStorePassword.toCharArray(), keyStorePassword.toCharArray())
                .loadTrustMaterial(trustStoreR.getURL(), trustStorePassword.toCharArray())
                .build();
    ...
}

但当我使用罐子发射器时

java-jar app.jar

我得到了以下例外情况。

我也试过

java-djavax.net.ssl.truststore=truststore.jks-djavax.net.ssl.truststorePassword=xyz123-djavax.net.ssl.keystore=keystore.jks-djavax.net.ssl.keystorePassword=xyz123-jar app.jar

得到了同样的例外。任何帮助都将非常感激。

共有1个答案

拓拔野
2023-03-14

尝试使用resource.getInputStream()而不是resource.getFile(),因为Spring中的resource.getFile()试图访问文件系统路径,但无法访问JAR中的路径

这个链接有一个丰富的内容,请看Andy的回答

示例示例:

Resource resource = resourceLoader.getResource("classpath:GeoLite2-Country.mmdb");
            InputStream dbAsStream = resource.getInputStream();

你有使用完整路径吗

-Djavax.net.ssl.trustStore=something/like/this/truststore.jks
 类似资料:
  • 我正在按照本指南将MySql添加到一个已经存在的SpringBoot项目中,该项目的依赖关系管理是在Graddle上。就在我添加教程中使用的这三个类时,如下所示 main/java/net/code/model/users.java 我的类使用@SpringBoot main/java/net/code/app.java 但每当我运行该应用程序时,我总是收到下面的消息 我搜索了一些相关问题,比如S

  • 当我调用服务时,它会给出以下错误:- 我已经基于相同的设计模式构建了REST API,它对我来说工作得很好。我没有得到的东西,为什么它说“没有财产日期找到类型现金流!”?实体中没有日期属性。我尝试删除数据库并重新启动,但没有成功。我错过了什么?

  • 我已经为Postgresql启用了复制,并且正在使用PGPool进行负载平衡。 我在使用HikariCP甚至Apache DBCP连接到Postgres时遇到了问题。 在SpringBoot应用程序中有没有使用PGPool的方法? 请查找堆栈跟踪: 2018-08-10 10:20:19.124信息37879----[main]com.zaxxer.hikari.hikaridatasource:

  • 我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题

  • 我目前正在学习springboot。通过选择spring starter project,我在STS中创建了一个项目。spring boot版本2.2.2和已导入JPA、H2和RestRepository。 下面是我的领域类, 应用属性 存储库类 在波姆。xml显示了下面提到的错误。不确定,因为这一点,我得到了错误,但我没有在pom的任何变化。xml 在运行项目时,我得到了以下错误,不知道为什么整

  • 我刚刚在Intellij中设置了Scala(以及SDK和JDK) 文件- 创建了一个项目。 项目名称src下-- 我做错了什么。请帮忙