Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

_load_client_certs() should raise an error if cert could not be handled. #3301

Open
zopyx opened this issue Sep 12, 2024 · 3 comments
Open

Comments

@zopyx
Copy link

zopyx commented Sep 12, 2024

The code in _load_client_certs does not handle a cert path of type pathlib.Path:

    def _load_client_certs(self, ssl_context: ssl.SSLContext) -> None:
        """
        Loads client certificates into our SSLContext object
        """
        if self.cert is not None:
            if isinstance(self.cert, str):
                ssl_context.load_cert_chain(certfile=self.cert)
            elif isinstance(self.cert, tuple) and len(self.cert) == 2:
                ssl_context.load_cert_chain(certfile=self.cert[0], keyfile=self.cert[1])
            elif isinstance(self.cert, tuple) and len(self.cert) == 3:
                ssl_context.load_cert_chain(
                    certfile=self.cert[0],
                    keyfile=self.cert[1],
                    password=self.cert[2],
                )

Rather than silently discarding an unhandled type for self.cert here, it would be better to raise an exception (e.g. NotImplementedError for an unsupported type for self.cert.

Background: we switched our code from str to pydantic.FilePath and suddenly the authentication part via a PEM did no longer work..and it took a long time to figure out that this was caused by the unhandled case here. An exception is more explicit than implicitly ignoring the problem (without reporting it).

@tomchristie
Copy link
Member

Okay. Would you like to issue a pull request that'd raise a TypeError for that case?

@zopyx
Copy link
Author

zopyx commented Sep 13, 2024

Happy to work on PR. Do you have a quick pointer where a related test should be added? I am not familar with the httpx codebase.

@tomchristie
Copy link
Member

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants