Skip to content

Commit

Permalink
Deprecated passing X509 objects to add_client_ca
Browse files Browse the repository at this point in the history
Added support for passing cryptography.x509.Certificate
  • Loading branch information
alex committed Aug 5, 2024
1 parent 4c89c97 commit abf2ff2
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 5 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Deprecations:

- Deprecated ``OpenSSL.rand`` - callers should use ``os.urandom()`` instead.
- Deprecated ``OpenSSL.crypto.get_elliptic_curves`` and ``OpenSSL.crypto.get_elliptic_curve``, as well as passing the reult of them to ``OpenSSL.SSL.Context.set_tmp_ecdh``, users should instead pass curves from ``cryptography``.
- Deprecated passing ``X509`` objects to ``OpenSSL.SSL.Context.use_certificate``, ``OpenSSL.SSL.Connection.use_certificate``, and ``OpenSSL.SSL.Context.add_extra_chain_cert``, users should instead pass ``cryptography.x509.Certificate`` instances. This is in preparation for deprecating pyOpenSSL's ``X509`` entirely.
- Deprecated passing ``X509`` objects to ``OpenSSL.SSL.Context.use_certificate``, ``OpenSSL.SSL.Connection.use_certificate``, ``OpenSSL.SSL.Context.add_extra_chain_cert``, ``OpenSSL.SSL.Context.add_client_ca``, users should instead pass ``cryptography.x509.Certificate`` instances. This is in preparation for deprecating pyOpenSSL's ``X509`` entirely.

Changes:
^^^^^^^^
Expand Down
17 changes: 15 additions & 2 deletions src/OpenSSL/SSL.py
Original file line number Diff line number Diff line change
Expand Up @@ -1492,7 +1492,9 @@ def set_client_ca_list(

_lib.SSL_CTX_set_client_CA_list(self._context, name_stack)

def add_client_ca(self, certificate_authority: X509) -> None:
def add_client_ca(
self, certificate_authority: X509 | x509.Certificate
) -> None:
"""
Add the CA certificate to the list of preferred signers for this
context.
Expand All @@ -1506,7 +1508,18 @@ def add_client_ca(self, certificate_authority: X509) -> None:
.. versionadded:: 0.10
"""
if not isinstance(certificate_authority, X509):
raise TypeError("certificate_authority must be an X509 instance")
certificate_authority = X509.from_cryptography(
certificate_authority
)
else:
warnings.warn(
(
"Passing pyOpenSSL X509 objects is deprecated. You "
"should use a cryptography.x509.Certificate instead."
),
DeprecationWarning,
stacklevel=2,
)

add_result = _lib.SSL_CTX_add_client_CA(
self._context, certificate_authority._x509
Expand Down
4 changes: 2 additions & 2 deletions tests/test_ssl.py
Original file line number Diff line number Diff line change
Expand Up @@ -3922,7 +3922,7 @@ def test_multiple_add_client_ca(self):

def multiple_ca(ctx):
ctx.add_client_ca(cacert)
ctx.add_client_ca(secert)
ctx.add_client_ca(secert.to_cryptography())
return [cadesc, sedesc]

self._check_client_ca_list(multiple_ca)
Expand Down Expand Up @@ -3962,7 +3962,7 @@ def test_set_after_add_client_ca(self):
sedesc = secert.get_subject()

def set_replaces_add_ca(ctx):
ctx.add_client_ca(clcert)
ctx.add_client_ca(clcert.to_cryptography())
ctx.set_client_ca_list([cadesc])
ctx.add_client_ca(secert)
return [cadesc, sedesc]
Expand Down

0 comments on commit abf2ff2

Please sign in to comment.