【发布时间】:2019-12-24 15:35:21
【问题描述】:
情况
我实现了一个带有微服务网关、一个微服务应用和用于服务发现的 Consul 的 JHipster 微服务应用。只要我使用 HTTP,这一切都可以完美运行,但考虑在生产中使用未加密连接是不可行的选择。
因此我修改了所有配置文件以使用 TLS/HTTPS,如下所示:
网关/微服务,application-tls.yml:
server:
ssl:
key-store: classpath:config/tls/keystore.jks
key-store-type: JKS
key-alias: selfsigned
key-store-password: password
ciphers: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
enabled-protocols: TLSv1.2
jhipster:
http:
version: V_2_0
spring:
cloud:
consul:
discovery:
scheme: https
网关和微服务 TLS 配置是相同的,除了密钥库的内容(它们都有自己的密钥对)。
问题
Consul 和两个 Spring Boot 应用程序启动时没有任何错误,并在 Consul 中正确注册。
但是,通过网络浏览器访问网关应用程序会导致网关应用程序出现以下错误:
图形界面
Http failure response for https://localhost:8080/<MICROSERVICE-NAME>/api/<RESOURCE-NAME>: 500 OK
堆栈跟踪
com.netflix.zuul.exception.ZuulException: Forwarding error
...
at de.<MY-ORG>.<MY-PROJECT>.gateway.security.jwt.JWTFilter.doFilter(JWTFilter.java:38)
...
Caused by: com.netflix.client.ClientException: null
...
Caused by: java.lang.RuntimeException: org.apache.http.NoHttpResponseException: <MY-IP>:8081 failed to respond
8081 是我的微服务应用的端口。
因此,无法访问微服务的 API,也无法使用任何功能(例如 CRUD)。
【问题讨论】:
标签: java spring-boot microservices jhipster consul