aiohttp icon indicating copy to clipboard operation
aiohttp copied to clipboard

Possibility to get peer certificate when ClientResponseError is raised

Open fed239 opened this issue 1 year ago • 1 comments

Is your feature request related to a problem?

We are not able to get peer certificate when ClientResponseError is raised.

Describe the solution you'd like

    try:
        async with aiohttp.ClientSession(
            timeout=aiohttp.ClientTimeout(total=60.0),
            request_class=Latin1HeadersClientRequest,
        ) as session:
        ...
    except aiohttp.ClientResponseError as e:
        sslobj = e.connection.transport.get_extra_info("ssl_object")  # <-- LIKE THIS

Describe alternatives you've considered

No alternative found

Related component

Client

Additional context

We need to perform advanced certificate validation for all response codes.

Code of Conduct

  • [X] I agree to follow the aio-libs Code of Conduct

fed239 avatar Nov 23 '24 18:11 fed239

In the snippet, transport is closed at the desired line; ssl_object doesn't exist. Maybe we can extract a reference to ssl_object at the moment of raising the exception in ResponseHandler.lonnection_lost() from client_proto.py?

The patch looks trivial but I never tried it yet, and I have no idea what part of stores SSLObject is available after destroying the session and its SSLContext. We need a champion for this issue.

asvetlov avatar Nov 25 '24 17:11 asvetlov