java - 获取不受支持或无法识别的 SSL 消息;调用外部 API 时嵌套异常是 javax.net.ssl.SSLException

标签 java ssl https

我在我的应用程序中调用外部 Rest 端点。但我收到以下错误:

 The response body does not contain an access token
 org.springframework.web.client.ResourceAccessException: I/O error on POST request for 
 "https://example.com/api/auth": Unsupported or unrecognized SSL message; nested exception is 
  javax.net.ssl.SSLException: Unsupported or unrecognized SSL message
在这种情况下,我找到了一篇文章如下:
Unrecognized SSL message, plaintext connection? Exception
但是,我没有发现这很有用,因为我正在与端口号为 443 的 HTTPS 服务器通信。
这是否会因为白名单而发生,我的意思是我连接到的 HTTPS 服务器端点还没有被列入白名单?

最佳答案

我也经历过你列出的异常(exception)情况,尽管它是在不同的情况下。我看到这个问题还没有答案,所以我根据对 this question 的答案分享我如何修复它的经验。这帮助我意识到这个问题与 https 有某种关系。对比 http .这个答案也可能对试图实现我在下面尝试的人有用。
在尝试通过代理路由时尝试连接到安全端点时,我使用 Apache HttpClient 遇到了这种情况。
我已经实现了一个自定义 RoutePlanner通过扩展 DefaultRoutePlanner并实现了determineProxy方法如下:

@Override
protected HttpHost determineProxy(final HttpHost target, final HttpRequest request, final HttpContext context) {
    return new HttpHost(proxyHost, proxyPort, target.getScheme());
}
问题是目标的方案是https .通过删除方案参数 HttpHost将自动将其设置为 http .
这是工作代码:
@Override
protected HttpHost determineProxy(final HttpHost target, final HttpRequest request, final HttpContext context) {
    return new HttpHost(proxyHost, proxyPort);
}

也就是说,为了到达https我需要通过代理路由的端点,其主机只是 http .

关于java - 获取不受支持或无法识别的 SSL 消息;调用外部 API 时嵌套异常是 javax.net.ssl.SSLException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66066005/

相关文章:

c# - 在 C# 中处理 HTTPS WebSocket 握手

java - 找不到 HTTP 请求的映射 Spring Security

networking - 如何将已知的自签名服务器标记为受 wget 信任

amazon-web-services - CloudFront 上的 AWS 证书重新导入反射

ssl - 在 Raspbian 上的 Dotnet Core 中使用 HttpClient 时出现 HttpRequestException

google-chrome - Chrome - 确认表单重新提交 - 不同的行为

java - 函数解密器

java - "Unsupported Image Type"仅在少数图像中出现异常

java - 在 netbeans 6.8 中,你如何插入图像并改变它的大小?

ssl - 创建 EC CSR 时命名曲线或域参数