【问题标题】:tls mutual authentication between zuul and microservice with certificates使用证书在zuul和微服务之间进行tls相互认证
【发布时间】:2018-01-19 05:12:50
【问题描述】:

我有一个 zuul 代理作为边缘服务器,我的微服务是非 jvm 应用程序,我不使用 Ribbon 或 eureka。这些微服务只能通过 https 访问,并且需要客户端证书才能与它们通信。 zuul 是否支持带有下游证书的相互身份验证?如果是这样,我该如何在我的 zuul 服务器上进行设置。

【问题讨论】:

    标签: java spring ssl netflix-zuul


    【解决方案1】:

    如果您使用的是 Spring Cloud Zuul,您可以通过定义 CloseableHttpClient bean 来提供您自己的 Http Client,如下所示。 (受 Edgware 版本支持)

    @Bean
    public CloseableHttpClient httpClient() throws Throwable {
        return HttpClients.custom()
               .......ssl context or sslsocketfactory settging.
               .build();
    }
    

    如果你提供这种类型的 bean,Zuul 会在发出 http 请求时使用这个 bean。因此,您可以定义自定义 SSL 上下文以支持客户端证书。您可以在 apache http 客户端中找到许多支持客户端证书的示例,例如 thisthis

    【讨论】:

    • 谢谢@youngsung。我得到了部分工作。如果微服务通过 https 但客户端证书仍然失败,则新的 httpclient 可以工作。从调试日志中我看到一个错误“警告:没有找到合适的证书 - 没有客户端身份验证继续”,因此我认为客户端证书没有发送我试过这个link,我可以确认我的 pkcs12 密钥库有完整的链。有什么建议吗?
    • 所以我进行了更多测试,我发现独立的 httpclient 可以工作,但 zuul 中的相同代码失败。 *** ServerHelloDone [read] MD5 and SHA1 hashes: len = 4 0000: 0E 00 00 00 .... Warning: no suitable certificate found - continuing without client authentication *** Certificate chain <Empty> *** *** ECDHClientKeyExchange
    • 原来我有旧版本的 spring boot,升级解决了这个问题。
    • @yongsung.yoon 你救了我的命!
    • @Ubunfu 您可以在运行 jar 时使用标志 -Djavax.net.debug=all,或者您可以在代码中设置等效的系统属性
    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2018-03-15
    相关资源
    最近更新 更多