即使使用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:服务不可用
答案 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完成的,这就是为什么它现在适用于我们。