我有一个带有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服务器注册。
答案 0 :(得分:1)
这是因为您的证书是自签名的,“主题名称(DN)”与127.0.0.1不匹配。你有两个选择:
更新:
刚刚注意到你的问题:
我想知道https over zuul的概念
通常,没有人支持zuul和底层微服务之间的HTTPS,因为:
一个常见的用例是让您的API网关通过HTTPS运行。但是,从网关到底层服务的通信以及微服务之间的相互通信应该通过HTTP进行。无论如何,你必须专注于微服务的安全网络而不是它们之间的安全通信。网关下的系统应该使用没有人可以访问的专用网络。
可能存在这样的情况:您必须在微服务之间使用HTTPS以获得更多安全层,但这种情况并不常见且主要与银行业务相关。另一方面,您可以将HTTPS添加到具有非常敏感数据的服务,而其余的可以保留在HTTP上。这更多的是你的要求问题。
答案 1 :(得分:0)
对于使用https服务,如果服务使用自签名证书,则必须信任该服务提供的证书。为此,您必须配置信任存储,而不是密钥存储
如果服务的自签名证书DN和域名不匹配,则必须配置zuul以禁用该验证 - 但请注意,在生产中不建议这样做 配置如下:
zuul.sslHostnameValidationEnabled=false