在 spring boot application.properties 中指定信任存储信息

新手上路,请多包涵

我正在使用 springBootVersion 1.2.0.RELEASE 。我正在尝试通过 application.properties 配置我的密钥库和信任库。

当我添加以下设置时,我可以让密钥库工作,但不能让信任库工作。

 server.ssl.key-store=classpath:foo.jks
server.ssl.key-store-password=password
server.ssl.key-password=password
server.ssl.trust-store=classpath:foo.jks
server.ssl.trust-store-password=password

但是,如果我通过 gradle 添加信任库:

 bootRun {
    jvmArgs = [ "-Djavax.net.ssl.trustStore=c://foo.jks", "-Djavax.net.ssl.trustStorePassword=password"]
}

它工作得很好。

有人用 application.properties 做信托商店吗?

原文由 user4408912 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 393
1 个回答

如果您需要进行 REST 调用,您可以使用下一种方式。

这将适用于通过 RestTemplate 的拨出电话

像这样声明 RestTemplate bean。

 @Configuration
public class SslConfiguration {
    @Value("${http.client.ssl.trust-store}")
    private Resource keyStore;
    @Value("${http.client.ssl.trust-store-password}")
    private String keyStorePassword;

    @Bean
    RestTemplate restTemplate() throws Exception {
        SSLContext sslContext = new SSLContextBuilder()
                .loadTrustMaterial(
                        keyStore.getURL(),
                        keyStorePassword.toCharArray()
                ).build();
        SSLConnectionSocketFactory socketFactory =
                new SSLConnectionSocketFactory(sslContext);
        HttpClient httpClient = HttpClients.custom()
                .setSSLSocketFactory(socketFactory).build();
        HttpComponentsClientHttpRequestFactory factory =
                new HttpComponentsClientHttpRequestFactory(httpClient);
        return new RestTemplate(factory);
    }
}

其中 http.client.ssl.trust-storehttp.client.ssl.trust-store-password 指向 JKS 格式的信任库和指定信任库的密码。

这将覆盖 Spring Boot 提供的 RestTemplate bean,并使其使用您需要的信任存储。

原文由 Sasha Shpota 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进