我正在尝试使用存储在keystore.jks文件中的JKS证书配置SSL。
我有这段代码:

@Configuration
@EnableAutoConfiguration
public class SSLConfig {

    @Autowired
    private Environment env;

    @Value("${server.ssl.key-store}")
    private String keyStore;

    @Value("${server.ssl.key-store-password}")
    private String keyStorePassword;

    @PostConstruct
    private void configureSSL() {
        System.setProperty("javax.net.ssl.keyStore", keyStore);
        System.setProperty("javax.net.ssl.trustStore", keyStore);
        System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
        System.setProperty("javax.net.ssl.trustStorePassword", keyStorePassword);
        System.setProperty("javax.net.ssl.keyStoreType", "JKS");
        System.setProperty("javax.net.ssl.keyStoreProvider", "SUN");
        System.setProperty("javax.net.ssl.trustStoreType", "JKS");
    }
}


当我在application.properties文件中指定值时
server.ssl.key-store = classpath:config / keystore.jks
我收到IOException,说找不到该文件。
如果我指定
server.ssl.key-store = src / main / resources / config / keystore.jks
一切正常。
当我部署服务时,将没有src目录。
如何使它在类路径下工作?

最佳答案

您好尝试介绍解决绝对路径的方法:

 public String absolutePath(String resource) {
        return  Paths.get(System.getProperty("user.dir"))
                .resolve(resource).toAbsolutePath().toString();
    }

@PostConstruct
private void configureSSL() {
    System.setProperty("javax.net.ssl.keyStore", absolutePath(keyStore));
    System.setProperty("javax.net.ssl.trustStore", absolutePath(keyStore));
    System.setProperty("javax.net.ssl.keyStorePassword", absolutePath(keyStorePassword));
    System.setProperty("javax.net.ssl.trustStorePassword", absolutePath(keyStorePassword));
    System.setProperty("javax.net.ssl.keyStoreType", "JKS");
    System.setProperty("javax.net.ssl.keyStoreProvider", "SUN");
    System.setProperty("javax.net.ssl.trustStoreType", "JKS");
}

关于java - 在类路径中找不到JKS keystore 文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61687512/

10-10 16:42