Файл хранилища ключей JKS в пути к классам не найден - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь настроить SSL с сертификатами JKS, которые хранятся в файле keystore.jks. У меня есть этот фрагмент кода:

@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 , все будет работать нормально. Когда я разверну свой сервис, каталога sr c не будет. Как я могу заставить его работать из пути к классам?

1 Ответ

0 голосов
/ 08 мая 2020

Привет, попробуйте представить метод для разрешения абсолютного пути:

 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");
}
...