Https配置不适用于zuul路由

时间:2017-06-22 07:07:19

标签: https routing microservices spring-cloud netflix-zuul

我有一个带有zuul的路由器应用程序,许多服务在后端运行,客户端的请求由zuul路由到他们的服务。

一切都在http上运行良好但是当我将路由器和所有服务配置为https时,会引发以下错误:

javax.net.ssl.SSLPeerUnverifiedException: Certificate for <127.0.0.1> doesn't match any of the subject alternative names: []
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.verifyHostname(SSLConnectionSocketFactory.java:467) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:397) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355) ~[httpclient-4.5.3.jar:4.5.3]
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) ~[httpclient-4.5.3.jar:4.5.3]

zuul yml文件:

zuul:
  ignoredPatterns: /reza,/we
  routes:
    trp:
      path: /micro1/**
      sensitiveHeaders:
      url: https://127.0.0.1:8080/micro1
server:
    compression:
        enabled: true
    port: 80
    ssl:
        key-store: classpath:keystore.jks
        key-store-password: password
        key-password: matin1234  

其中一项服务的yml文件:

server:
    compression:
        enabled: true
    port: 8080
    ssl:
        key-store: classpath:keystore.jks
        key-store-password: password
        key-password: matin1234

首先,我想知道https over zuul的概念是否正常,其次我想知道如何解决我的问题。

注意:我没有Eureka服务器注册。

2 个答案:

答案 0 :(得分:1)

这是因为您的证书是自签名的,“主题名称(DN)”与127.0.0.1不匹配。你有两个选择:

更新:

刚刚注意到你的问题:

  

我想知道https over zuul的概念

通常,没有人支持zuul和底层微服务之间的HTTPS,因为:

  • 影响效果。想象一下,所有的微服务都使用HTTPS进行内部通信。与纯HTTP通信相比,HTTPS加密,解密,握手等消耗的资源更多。
  • 支持所有微服务的HTTPS会让你哭泣。在大型系统中,您有数百(或数千个微服务)更改证书,因为其中一些已过期将是一个令人头痛的问题。

一个常见的用例是让您的API网关通过HTTPS运行。但是,从网关到底层服务的通信以及微服务之间的相互通信应该通过HTTP进行。无论如何,你必须专注于微服务的安全网络而不是它们之间的安全通信。网关下的系统应该使用没有人可以访问的专用网络。

可能存在这样的情况:您必须在微服务之间使用HTTPS以获得更多安全层,但这种情况并不常见且主要与银行业务相关。另一方面,您可以将HTTPS添加到具有非常敏感数据的服务,而其余的可以保留在HTTP上。这更多的是你的要求问题。

答案 1 :(得分:0)

  1. 对于使用https服务,如果服务使用自签名证书,则必须信任该服务提供的证书。为此,您必须配置信任存储,而不是密钥存储

  2. 如果服务的自签名证书DN和域名不匹配,则必须配置zuul以禁用该验证 - 但请注意,在生产中不建议这样做 配置如下:

    zuul.sslHostnameValidationEnabled=false