httpClient 在从 azure 反向代理调用 https 连接时抛出连接重置

Posted

技术标签:

【中文标题】httpClient 在从 azure 反向代理调用 https 连接时抛出连接重置【英文标题】:httpClient throws Connection reset while invoking https connection from azure reverse proxy 【发布时间】:2021-03-01 14:53:45 【问题描述】:

实际上,我有配置为重定向到 keycloak 的 saml 应用程序 当我第一次使用 HTTP URL(httpClient 3.1,jdk1.8)配置应用程序时,我没有收到任何问题,但是当使用反向代理(WAF azure 应用程序网关反向代理)进行 HTTPS 连接时出现异常


 **Caused by**: org.opensaml.saml2.metadata.provider.MetadataProviderException: Error retrieving metadata from https://example.com/auth/realms/realmName/protocol/saml/descriptor
        at org.opensaml.saml2.metadata.provider.HTTPMetadataProvider.fetchMetadata (HTTPMetadataProvider.java:274)
        at org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider.refresh (AbstractReloadingMetadataProvider.java:255)
        ... 9 more
**Caused by**: java.net.SocketException: Connection reset
  at java.net.SocketInputStream.read(SocketInputStream.java:210)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
        at sun.security.ssl.InputRecord.read(InputRecord.java:503)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
        at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:747)
        at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
        at org.apache.commons.httpclient.HttpConnection.flushRequestOutputStream(HttpConnection.java:828)
        at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2116)
        at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
        at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
        at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
        at org.opensaml.saml2.metadata.provider.HTTPMetadataProvider.fetchMetadata(HTTPMetadataProvider.java:250)

知道我已经在 J​​VM 级别添加了证书,并且可以通过 curl 命令或浏览器访问我刚刚调用的 URL (https://example.com/auth/realms/realmName/protocol/saml/descripto)

【问题讨论】:

【参考方案1】:

我可以通过升级我的 jdk 版本来解决同样的问题

【讨论】:

谢谢,真的有效!!我将我的 jdk 从 jdk1.8.0_121 更新为 jdk1.8.0_221 我认为这是由于 httpClient 版本或客户端(java)和服务器之间的 TLS 版本不兼容(作为 azure 服务的反向代理)

以上是关于httpClient 在从 azure 反向代理调用 https 连接时抛出连接重置的主要内容,如果未能解决你的问题,请参考以下文章

如何为现有的本地集群配置和启用 Azure Service Fabric 反向代理?

是否可以使用 Java SDK 通过反向代理连接到 Azure Cosmos DB?

使用反向代理 localhost 在 Azure Service Fabric 中的 5 节点群集上不起作用

Nginx:17---反向代理之(反向代理服务器的性能调优:缓冲数据缓存数据存储数据压缩数据(gzip模块))

创建 Service Fabric 群集后启用反向代理

将 nginx 反向代理连接到应用程序洞察力