【发布时间】:2019-03-25 17:32:31
【问题描述】:
我已将我的 eureka 客户端和服务配置为使用带有自签名证书的 SSL。创建密钥库并将证书从客户端导入服务器密钥库,反之亦然。但是现在当我尝试使用 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 的休息服务的负载平衡的 restTemplate?
我使用的是来自优秀 baeldung guy 网站的文章 https://www.baeldung.com/spring-boot-https-self-signed-certificate
但它似乎不适用于 eureka 框架提供的 restTemplate。
谢谢, 标记。
【问题讨论】:
-
您说它在您不使用
SSL时有效,但您收到的具体错误消息意味着hostnamemy-service未知(即它无法解析为知识产权)。直接引用UnknownHostException Javadoc“抛出表示无法确定主机的IP地址。” -
是的,当您将类中的 bean 自动装配为成员变量时,eureka 框架会解析服务名称 my-service 但是当我这样做时,来自模板的调用会返回一个 320 状态代码,说明它应该正在重定向,正文为空。
-
也许是个愚蠢的问题,但你现在连接到https://my-service/convert/ 如果不是我会试试吗?如果您使用 HTTPS 连接,我不会期望基于对 SSL 的更改的重定向。另外我希望
302 Found也包含Location标头,你看到了吗?302不一定包含正文,因为它希望客户端将请求重新发送到新的Location -
您好,Misantorp,感谢您回复我。是的,我使用的网址是my-service/convert,你说得对!非常感谢。重定向的位置带有指向实际机器上登录名的链接,即my-machine.mycompany.com:8082/login。我不确定它为什么会这样做,因为我没有配置任何弹簧安全性来说它应该重定向?它是自动这样做的。但这是进步,感谢您抽出时间回复。
标签: java ssl resttemplate netflix-eureka