Groovy HTTPBuilder使SSL端点的服务不可用

时间:2016-12-22 14:41:05

标签: groovy spring-boot-actuator

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

我已在其他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:服务不可用

2 个答案:

答案 0 :(得分:0)

目前,我不得不使用Apache HTTP Client库,因为它处理的是TLS服务器名称识别(SNI),也许Groovy HTTPBuilder没有,或者我无法找到如何使用它。

以下是我通过Apache HTTP Client不可避免地(粗略地)通过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)

答案 1 :(得分:0)

使用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 Client完成的,这就是为什么它现在适用于我们。