gpt4 book ai didi

spring-boot - 如何在 application.yaml 中为 ssl 客户端指定 keystore 和信任库?

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:57 25 4
gpt4 key购买 nike

我有一个 spring boot 应用程序调用需要相互 ssl 身份验证的启用 ssl 的 rest 服务。我需要指定 keystore 和信任库才能在此客户端应用程序中进行调用。

当我像下面这样在 Java 代码中指定 keystore 和信任库信息( keystore 和信任库 jks 文件的路径、类型和密码)时,调用有效。

public static void main(String[] args) throws Exception {
System.setProperty("javax.net.ssl.trustStore", "/path/to/tmnt-truststore");
System.setProperty("javax.net.ssl.keyStore", "/path/to/donatello.p12");
System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
System.setProperty("javax.net.ssl.keyStorePassword", "donatellopass");

但我如何在 application.yaml 中指定它。

我尝试使用以下模式指定 keystore 、信任库、 key 和信任库类型和密码,正是我使用 System.setProperty 指定的所有信息。

javax:
net:
ssl:
trust-store: /path/to/tmnt-truststore

但是不起作用。我收到消息错误

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

尝试为 keystore 和信任库指定模式 trust-storetrustStore

此客户端应用程序还公开了一个休息端点,并且该信息在与

相同的 yaml 文件中指定
server:
context-path: /my-context
port: 8200
spring:
application:
name: mhapp

该信息似乎已被应用程序获取。但不是 javax.net.ssl.keyStore 等

我如何在 application.yaml 中指定它,我是否需要做其他事情(例如添加任何注释)来加载该信息?

最佳答案

请先在 application.property 文件中像下面这样尝试,如果它工作正常你可以把它放在 yaml 文件中,

server.ssl.key-alias=selfsigned
server.ssl.key-password=test123
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS

如果没有,你可以把所有的值放在一个属性文件中,你可以创建一个像下面这样的配置文件,这将提供其余的模板来调用外部服务,

@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);
}
}

关于spring-boot - 如何在 application.yaml 中为 ssl 客户端指定 keystore 和信任库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58002583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com