我已将我的 eureka 客户端和服务配置为使用带有自签名证书的 SSL。创建 keystore 并将证书从客户端导入服务器 keystore ,反之亦然。但是现在当我尝试使用 restTemplate
@Bean
RestTemplate restTemplate;
用于解析我的服务 http://my-service/convert/如果不使用底层框架,它就不能再这样做了吗? HTTP 响应是 302 安全的:/HTTPOnly
我尝试手动配置 restTemplate
@Bean
@LoadBalanced
public RestTemplate restTemplate() throws Exception {
SSLContext sslContext = new SSLContextBuilder()
.create()
.loadKeyMaterial(ResourceUtils.getFile("classpath:client.jks"), allPassword.toCharArray(), allPassword.toCharArray())
.loadTrustMaterial(ResourceUtils.getFile("classpath:client.jks"), allPassword.toCharArray())
.build();
HttpClient client = HttpClients.custom()
.setSSLContext(sslContext)
.build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(client);
return new RestTemplate(factory);
}
虽然 restTemplate 正在创建,但它现在似乎不知道来自 Eureka 框架的 my-service?
Caused by: java.net.UnknownHostException: my-service
是否有人为 SSL 配置了一个 eureka 客户端/服务以及一个可以从客户端的 jvm 中使用 rest 服务的负载平衡 restTemplate?
我使用的是优秀的 baeldung 人网站上的文章 https://www.baeldung.com/spring-boot-https-self-signed-certificate
但是它似乎不适用于 eureka 框架提供的 restTemplate。
谢谢, 马克。
最佳答案
非常感谢 Misantorp 指出该服务试图重定向到/login 上下文。似乎仅仅为 HTTPs 配置 spring boot 应用程序就足以触发一些 Spring 安全性。觉得这有点奇怪,因为我以前没有。
我启动了一些 spring security,permittedAll("/**") 并禁用了 csrf,客户端再次成功调用那里的服务器。
关于java - Eureka RestTemplate 和 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55343506/