为Consul、网关和微服务配置HTTPS导致ZuulException: Forwarding error

Configuring HTTPS for Consul, gateway and microservice results in ZuulException: Forwarding error

情况

我用一个微服务网关、一个微服务应用程序和用于服务发现的 Consul 实现了一个 JHipster 微服务应用程序。只要我使用 HTTP,它就可以完美运行,但考虑到在生产中使用未加密的连接是不可行的选择。

因此我修改了所有配置文件以使用 TLS/HTTPS,如下所示:

Gateway/Microservice, 应用-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 引导应用程序启动时没有任何错误,并且在 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)。

自己解决了。使用的是旧版本的 JHipster (5.8.2)。升级到 6.2.0 就成功了。