【问题标题】:Groovy HTTPBuilder gets Service Unavailable for SSL endpointGroovy HTTPBuilder 获取 SSL 端点的服务不可用
【发布时间】:2016-12-22 14:41:05
【问题描述】:

即使使用 ignoreSSLIssues(),Spring Boot Actuator /health 端点也不可用,因为服务的路由已从 http 切换到 https。

我已经在其他 SSL 端点上成功使用了这种模式。为什么这个服务不可用。在浏览器中可以访问相同的 URL。

def url = "https://some.service.company.com"
def client = new HTTPBuilder(url)
client.ignoreSSLIssues()
def json =  client.get(path: "/health")
println json

groovyx.net.http.HttpResponseException: 服务不可用

【问题讨论】:

  • 看起来问题与 TLS 服务器名称识别 (SNI) 有关。不知道 Groovy HTTPBuilder 是否能正确处理这个问题?

标签: groovy spring-boot-actuator


【解决方案1】:

目前,我只能使用 Apache HTTP 客户端库,因为它处理 TLS 服务器名称识别 (SNI),而 Groovy HTTPBuilder 可能没有,或者我找不到如何做到这一点。

以下是我不可避免地(大致)使用 Apache HTTP 客户端通过 SSL 实现相同目标的方式:

    SSLContextBuilder builder = new SSLContextBuilder()
    def trustAll = [isTrusted: { X509Certificate[] cert, String s -> true } 
    ] as TrustStrategy
    builder.loadTrustMaterial(null, trustAll)
    def factory = new SSLConnectionSocketFactory(builder.build())
    def httpClient = HttpClients.custom().setSSLSocketFactory(factory).build()

    String url = "https://some.service.com/health"
    HttpGet getRequest = new HttpGet(url)
    HttpResponse response = httpClient.execute(getRequest)

【讨论】:

    【解决方案2】:

    我们在使用 HTTPBuilder v0.7.1 时遇到了同样的问题。 事实证明,HTTPBuilder 本身工作正常。

    我们通过将这些依赖项更新到最新版本来修复它:

    org.apache.httpcomponents:httpasyncclient:4.1.3
    org.apache.httpcomponents:httpclient:4.5.5
    org.apache.httpcomponents:httpcore:4.4.9
    org.apache.httpcomponents:httpcore-nio:4.4.9
    

    我猜 SNI 实际上是由 Apache HTTP 客户端完成的,这就是它现在对我们有用的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2011-06-17
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      相关资源
      最近更新 更多