Https-config-dosn';我不能在zuul工作

Https-config-dosn';我不能在zuul工作,https,routing,microservices,spring-cloud,netflix-zuul,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.con

我有一个带有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]
以及其中一项服务的yml文件:

server:
    compression:
        enabled: true
    port: 8080
    ssl:
        key-store: classpath:keystore.jks
        key-store-password: password
        key-password: matin1234
首先我想知道https over zuul的概念是否正常工作,其次我想知道如何解决我的问题


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

发生这种情况的原因是您的证书使用“使用者名称(DN)”自签名,与127.0.0.1不匹配。这里有两个选项:

  • 创建DN=127.0.0.1的证书
更新:

刚刚注意到你的问题:

我想知道https在zuul上的概念

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

  • 它会影响性能。想象一下,所有的微服务都使用HTTPS进行内部通信。HTTPS加密、解密、握手等。与普通HTTP通信相比,消耗的资源要多得多
  • 支持所有微服务的HTTPS会让你哭泣。在大型系统中,数百(或数千)个微服务因证书过期而更改证书将是一件令人头痛的事情
一个常见的用例是让API网关在HTTPS上运行。但是,从网关到底层服务的通信以及微服务之间的相互通信应该通过HTTP进行。问题是,无论如何您必须关注微服务的安全网络,而不是它们之间的安全通信。网关下的系统应使用私有网络,任何人都不得访问该网络


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

发生这种情况的原因是您的证书使用“主题名称(DN)”自签名,与127.0.0.1不匹配。这里有两个选项:

  • 创建DN=127.0.0.1的证书
更新:

刚刚注意到你的问题:

我想知道https在zuul上的概念

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

  • 它会影响性能。想象一下,所有的微服务都使用HTTPS进行内部通信。HTTPS加密、解密、握手等。与普通HTTP通信相比,消耗的资源要多得多
  • 支持所有微服务的HTTPS会让你哭泣。在大型系统中,数百(或数千)个微服务因证书过期而更改证书将是一件令人头痛的事情
一个常见的用例是让API网关在HTTPS上运行。但是,从网关到底层服务的通信以及微服务之间的相互通信应该通过HTTP进行。问题是,无论如何您必须关注微服务的安全网络,而不是它们之间的安全通信。网关下的系统应使用私有网络,任何人都不得访问该网络

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

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

  • 如果自签名证书DN和服务的域名不匹配,则必须将zuul配置为禁用该验证,但请注意,不建议在生产环境中使用此选项 配置如下所示:

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

  • 如果自签名证书DN和服务的域名不匹配,则必须将zuul配置为禁用该验证,但请注意,不建议在生产环境中使用此选项 配置如下所示:

    zuul.sslHostnameValidationEnabled=false
    

  • 此错误是否与主机名验证有关?您使用的是哪个版本的Spring Cloud?它的版本是1.5.21.5.2不是一个版本。您使用的是Angel、Brixton、Camden还是Dalston?此错误是否与主机名验证有关?您使用的是哪个版本的Spring Cloud?它的版本是1.5.21.5.2不是一个版本。你是在使用Angel、Brixton、Camden还是Dalston?必须创建路由器的Dn或服务应用程序的Dn?要解决这个问题,我想应该是服务应用程序。我已经用HTTPS、API网关和微服务的概念更新了我的答案。希望您会发现它很有用。@dzatorsky:假设API网关部署在公共网络上,例如:Heroku。它将如何与托管在专用网络上的服务交互?服务注册中心需要托管在哪里,以便它可以在专用网络上注册服务,并帮助API网关识别它们?必须创建路由器Dn或服务应用程序Dn?要解决此问题,我想应该是服务应用程序。我已用有关