我正在尝试使用 JKS 证书配置 SSL,该证书存储在 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 一切正常。 当我部署服务时,不会有 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/