summaryrefslogtreecommitdiffstats
path: root/Doc/library/ssl.rst
diff options
context:
space:
mode:
authorMateusz Nowak <nowak.mateusz@hotmail.com>2023-09-20 01:20:54 (GMT)
committerGitHub <noreply@github.com>2023-09-20 01:20:54 (GMT)
commit5a740cd06ec1191767edcc6d3a7d5eca7873cb7b (patch)
tree26f85d51e466e5ce837874798cffe888d31f7c4c /Doc/library/ssl.rst
parentddf2e953c27d529b7e321c972ede2afce5dfb0b0 (diff)
downloadcpython-5a740cd06ec1191767edcc6d3a7d5eca7873cb7b.zip
cpython-5a740cd06ec1191767edcc6d3a7d5eca7873cb7b.tar.gz
cpython-5a740cd06ec1191767edcc6d3a7d5eca7873cb7b.tar.bz2
gh-109109: Expose retrieving certificate chains in SSL module (#109113)
Adds APIs to get the TLS certificate chains, verified or full unverified, from SSLSocket and SSLObject. Co-authored-by: Gregory P. Smith [Google LLC] <greg@krypto.org>
Diffstat (limited to 'Doc/library/ssl.rst')
-rw-r--r--Doc/library/ssl.rst29
1 files changed, 25 insertions, 4 deletions
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index 5d6bc82..92cf3de 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -43,8 +43,10 @@ This module provides a class, :class:`ssl.SSLSocket`, which is derived from the
:class:`socket.socket` type, and provides a socket-like wrapper that also
encrypts and decrypts the data going over the socket with SSL. It supports
additional methods such as :meth:`getpeercert`, which retrieves the
-certificate of the other side of the connection, and :meth:`cipher`, which
-retrieves the cipher being used for the secure connection.
+certificate of the other side of the connection, :meth:`cipher`, which
+retrieves the cipher being used for the secure connection or
+:meth:`get_verified_chain`, :meth:`get_unverified_chain` which retrieves
+certificate chain.
For more sophisticated applications, the :class:`ssl.SSLContext` class
helps manage settings and certificates, which can then be inherited
@@ -1210,6 +1212,22 @@ SSL sockets also have the following additional methods and attributes:
.. versionchanged:: 3.9
IPv6 address strings no longer have a trailing new line.
+.. method:: SSLSocket.get_verified_chain()
+
+ Returns verified certificate chain provided by the other
+ end of the SSL channel as a list of DER-encoded bytes.
+ If certificate verification was disabled method acts the same as
+ :meth:`~SSLSocket.get_unverified_chain`.
+
+ .. versionadded:: 3.13
+
+.. method:: SSLSocket.get_unverified_chain()
+
+ Returns raw certificate chain provided by the other
+ end of the SSL channel as a list of DER-encoded bytes.
+
+ .. versionadded:: 3.13
+
.. method:: SSLSocket.cipher()
Returns a three-value tuple containing the name of the cipher being used, the
@@ -1656,8 +1674,9 @@ to speed up repeated connections from the same clients.
Due to the early negotiation phase of the TLS connection, only limited
methods and attributes are usable like
:meth:`SSLSocket.selected_alpn_protocol` and :attr:`SSLSocket.context`.
- The :meth:`SSLSocket.getpeercert`,
- :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compression` methods require that
+ The :meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.get_verified_chain`,
+ :meth:`SSLSocket.get_unverified_chain` :meth:`SSLSocket.cipher`
+ and :meth:`SSLSocket.compression` methods require that
the TLS connection has progressed beyond the TLS Client Hello and therefore
will not return meaningful values nor can they be called safely.
@@ -2414,6 +2433,8 @@ provided.
- :meth:`~SSLSocket.read`
- :meth:`~SSLSocket.write`
- :meth:`~SSLSocket.getpeercert`
+ - :meth:`~SSLSocket.get_verified_chain`
+ - :meth:`~SSLSocket.get_unverified_chain`
- :meth:`~SSLSocket.selected_alpn_protocol`
- :meth:`~SSLSocket.selected_npn_protocol`
- :meth:`~SSLSocket.cipher`