【问题标题】:Eureka RestTemplate and SSL尤里卡 RestTemplate 和 SSL
【发布时间】: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 时有效,但您收到的具体错误消息意味着hostname my-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


【解决方案1】:

非常感谢 Misantorp 指出该服务正在尝试重定向到 /login 上下文。似乎只需为 HTTPs 配置 Spring Boot 应用程序就足以触发一些 Spring 安全性。觉得这有点奇怪,因为我以前没有。

我启动了一些spring security, allowedAll("/**") 并禁用了csrf,客户端再次成功调用了服务器。

【讨论】:

    猜你喜欢
    • 2016-08-02
    • 2017-03-26
    • 2018-10-28
    • 2018-04-15
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2019-11-16
    相关资源
    最近更新 更多