RFR: 8376031: HttpsURLConnection.getServerCertificates() throws "java.lang.IllegalStateException: connection not yet open" for the HEAD method
Jaikiran Pai
jpai at openjdk.org
Sun Feb 1 11:25:01 UTC 2026
On Thu, 29 Jan 2026 15:32:50 GMT, Daniel Fuchs <dfuchs at openjdk.org> wrote:
> The issue here is that `HttpURLConnection` is automatically disconnected (`HttpClient` is set to `null`, `connected` is set to `false`) when a response with no response body bytes is received. This happens before a fake empty body input stream is returned to the user. That behaviour also occurs with any method for which `content-length: 0` is returned (GET, POST, custom, anything), and with any status code (204, 304) for which there is no body.
>
> In this case, the proposed fix is to store the `SSLSession` in the `AbstractDelegateHttpsURLConnection` subclass until such a time where `disconnect()` is explicitely closed. Information pertaining to SSL, such as server certificates, can be extracted from the saved `SSLSession`.
src/java.base/share/classes/sun/net/www/protocol/https/AbstractDelegateHttpsURLConnection.java line 181:
> 179: if (connected)
> 180: return;
> 181: super.connect();
Hello Daniel, there seems to be some subtle state related differences between `plainConnect()` and `super.connect()`, why was this change needed?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/29489#discussion_r2751085423
More information about the net-dev
mailing list