17db96d56Sopenharmony_ci:mod:`ssl` --- TLS/SSL wrapper for socket objects 27db96d56Sopenharmony_ci================================================= 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: ssl 57db96d56Sopenharmony_ci :synopsis: TLS/SSL wrapper for socket objects 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. moduleauthor:: Bill Janssen <bill.janssen@gmail.com> 87db96d56Sopenharmony_ci.. sectionauthor:: Bill Janssen <bill.janssen@gmail.com> 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci**Source code:** :source:`Lib/ssl.py` 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci.. index:: single: OpenSSL; (use in module ssl) 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci.. index:: TLS, SSL, Transport Layer Security, Secure Sockets Layer 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ci-------------- 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ciThis module provides access to Transport Layer Security (often known as "Secure 197db96d56Sopenharmony_ciSockets Layer") encryption and peer authentication facilities for network 207db96d56Sopenharmony_cisockets, both client-side and server-side. This module uses the OpenSSL 217db96d56Sopenharmony_cilibrary. It is available on all modern Unix systems, Windows, macOS, and 227db96d56Sopenharmony_ciprobably additional platforms, as long as OpenSSL is installed on that platform. 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci.. note:: 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci Some behavior may be platform dependent, since calls are made to the 277db96d56Sopenharmony_ci operating system socket APIs. The installed version of OpenSSL may also 287db96d56Sopenharmony_ci cause variations in behavior. For example, TLSv1.3 with OpenSSL version 297db96d56Sopenharmony_ci 1.1.1. 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci.. warning:: 327db96d56Sopenharmony_ci Don't use this module without reading the :ref:`ssl-security`. Doing so 337db96d56Sopenharmony_ci may lead to a false sense of security, as the default settings of the 347db96d56Sopenharmony_ci ssl module are not necessarily appropriate for your application. 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ci.. include:: ../includes/wasm-notavail.rst 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ciThis section documents the objects and functions in the ``ssl`` module; for more 397db96d56Sopenharmony_cigeneral information about TLS, SSL, and certificates, the reader is referred to 407db96d56Sopenharmony_cithe documents in the "See Also" section at the bottom. 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ciThis module provides a class, :class:`ssl.SSLSocket`, which is derived from the 437db96d56Sopenharmony_ci:class:`socket.socket` type, and provides a socket-like wrapper that also 447db96d56Sopenharmony_ciencrypts and decrypts the data going over the socket with SSL. It supports 457db96d56Sopenharmony_ciadditional methods such as :meth:`getpeercert`, which retrieves the 467db96d56Sopenharmony_cicertificate of the other side of the connection, and :meth:`cipher`, which 477db96d56Sopenharmony_ciretrieves the cipher being used for the secure connection. 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ciFor more sophisticated applications, the :class:`ssl.SSLContext` class 507db96d56Sopenharmony_cihelps manage settings and certificates, which can then be inherited 517db96d56Sopenharmony_ciby SSL sockets created through the :meth:`SSLContext.wrap_socket` method. 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci.. versionchanged:: 3.5.3 547db96d56Sopenharmony_ci Updated to support linking with OpenSSL 1.1.0 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci.. versionchanged:: 3.6 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported. 597db96d56Sopenharmony_ci In the future the ssl module will require at least OpenSSL 1.0.2 or 607db96d56Sopenharmony_ci 1.1.0. 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ci.. versionchanged:: 3.10 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci :pep:`644` has been implemented. The ssl module requires OpenSSL 1.1.1 657db96d56Sopenharmony_ci or newer. 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci Use of deprecated constants and functions result in deprecation warnings. 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ciFunctions, Constants, and Exceptions 717db96d56Sopenharmony_ci------------------------------------ 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ciSocket creation 757db96d56Sopenharmony_ci^^^^^^^^^^^^^^^ 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ciSince Python 3.2 and 2.7.9, it is recommended to use the 787db96d56Sopenharmony_ci:meth:`SSLContext.wrap_socket` of an :class:`SSLContext` instance to wrap 797db96d56Sopenharmony_cisockets as :class:`SSLSocket` objects. The helper functions 807db96d56Sopenharmony_ci:func:`create_default_context` returns a new context with secure default 817db96d56Sopenharmony_cisettings. The old :func:`wrap_socket` function is deprecated since it is 827db96d56Sopenharmony_ciboth inefficient and has no support for server name indication (SNI) and 837db96d56Sopenharmony_cihostname matching. 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ciClient socket example with default context and IPv4/IPv6 dual stack:: 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci import socket 887db96d56Sopenharmony_ci import ssl 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci hostname = 'www.python.org' 917db96d56Sopenharmony_ci context = ssl.create_default_context() 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci with socket.create_connection((hostname, 443)) as sock: 947db96d56Sopenharmony_ci with context.wrap_socket(sock, server_hostname=hostname) as ssock: 957db96d56Sopenharmony_ci print(ssock.version()) 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci 987db96d56Sopenharmony_ciClient socket example with custom context and IPv4:: 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ci hostname = 'www.python.org' 1017db96d56Sopenharmony_ci # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname 1027db96d56Sopenharmony_ci context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) 1037db96d56Sopenharmony_ci context.load_verify_locations('path/to/cabundle.pem') 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ci with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: 1067db96d56Sopenharmony_ci with context.wrap_socket(sock, server_hostname=hostname) as ssock: 1077db96d56Sopenharmony_ci print(ssock.version()) 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci 1107db96d56Sopenharmony_ciServer socket example listening on localhost IPv4:: 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) 1137db96d56Sopenharmony_ci context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key') 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock: 1167db96d56Sopenharmony_ci sock.bind(('127.0.0.1', 8443)) 1177db96d56Sopenharmony_ci sock.listen(5) 1187db96d56Sopenharmony_ci with context.wrap_socket(sock, server_side=True) as ssock: 1197db96d56Sopenharmony_ci conn, addr = ssock.accept() 1207db96d56Sopenharmony_ci ... 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ciContext creation 1247db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^ 1257db96d56Sopenharmony_ci 1267db96d56Sopenharmony_ciA convenience function helps create :class:`SSLContext` objects for common 1277db96d56Sopenharmony_cipurposes. 1287db96d56Sopenharmony_ci 1297db96d56Sopenharmony_ci.. function:: create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, capath=None, cadata=None) 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci Return a new :class:`SSLContext` object with default settings for 1327db96d56Sopenharmony_ci the given *purpose*. The settings are chosen by the :mod:`ssl` module, 1337db96d56Sopenharmony_ci and usually represent a higher security level than when calling the 1347db96d56Sopenharmony_ci :class:`SSLContext` constructor directly. 1357db96d56Sopenharmony_ci 1367db96d56Sopenharmony_ci *cafile*, *capath*, *cadata* represent optional CA certificates to 1377db96d56Sopenharmony_ci trust for certificate verification, as in 1387db96d56Sopenharmony_ci :meth:`SSLContext.load_verify_locations`. If all three are 1397db96d56Sopenharmony_ci :const:`None`, this function can choose to trust the system's default 1407db96d56Sopenharmony_ci CA certificates instead. 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ci The settings are: :data:`PROTOCOL_TLS_CLIENT` or 1437db96d56Sopenharmony_ci :data:`PROTOCOL_TLS_SERVER`, :data:`OP_NO_SSLv2`, and :data:`OP_NO_SSLv3` 1447db96d56Sopenharmony_ci with high encryption cipher suites without RC4 and 1457db96d56Sopenharmony_ci without unauthenticated cipher suites. Passing :data:`~Purpose.SERVER_AUTH` 1467db96d56Sopenharmony_ci as *purpose* sets :data:`~SSLContext.verify_mode` to :data:`CERT_REQUIRED` 1477db96d56Sopenharmony_ci and either loads CA certificates (when at least one of *cafile*, *capath* or 1487db96d56Sopenharmony_ci *cadata* is given) or uses :meth:`SSLContext.load_default_certs` to load 1497db96d56Sopenharmony_ci default CA certificates. 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci When :attr:`~SSLContext.keylog_filename` is supported and the environment 1527db96d56Sopenharmony_ci variable :envvar:`SSLKEYLOGFILE` is set, :func:`create_default_context` 1537db96d56Sopenharmony_ci enables key logging. 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ci .. note:: 1567db96d56Sopenharmony_ci The protocol, options, cipher and other settings may change to more 1577db96d56Sopenharmony_ci restrictive values anytime without prior deprecation. The values 1587db96d56Sopenharmony_ci represent a fair balance between compatibility and security. 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci If your application needs specific settings, you should create a 1617db96d56Sopenharmony_ci :class:`SSLContext` and apply the settings yourself. 1627db96d56Sopenharmony_ci 1637db96d56Sopenharmony_ci .. note:: 1647db96d56Sopenharmony_ci If you find that when certain older clients or servers attempt to connect 1657db96d56Sopenharmony_ci with a :class:`SSLContext` created by this function that they get an error 1667db96d56Sopenharmony_ci stating "Protocol or cipher suite mismatch", it may be that they only 1677db96d56Sopenharmony_ci support SSL3.0 which this function excludes using the 1687db96d56Sopenharmony_ci :data:`OP_NO_SSLv3`. SSL3.0 is widely considered to be `completely broken 1697db96d56Sopenharmony_ci <https://en.wikipedia.org/wiki/POODLE>`_. If you still wish to continue to 1707db96d56Sopenharmony_ci use this function but still allow SSL 3.0 connections you can re-enable 1717db96d56Sopenharmony_ci them using:: 1727db96d56Sopenharmony_ci 1737db96d56Sopenharmony_ci ctx = ssl.create_default_context(Purpose.CLIENT_AUTH) 1747db96d56Sopenharmony_ci ctx.options &= ~ssl.OP_NO_SSLv3 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci .. versionadded:: 3.4 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ci .. versionchanged:: 3.4.4 1797db96d56Sopenharmony_ci 1807db96d56Sopenharmony_ci RC4 was dropped from the default cipher string. 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci .. versionchanged:: 3.6 1837db96d56Sopenharmony_ci 1847db96d56Sopenharmony_ci ChaCha20/Poly1305 was added to the default cipher string. 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ci 3DES was dropped from the default cipher string. 1877db96d56Sopenharmony_ci 1887db96d56Sopenharmony_ci .. versionchanged:: 3.8 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ci Support for key logging to :envvar:`SSLKEYLOGFILE` was added. 1917db96d56Sopenharmony_ci 1927db96d56Sopenharmony_ci .. versionchanged:: 3.10 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci The context now uses :data:`PROTOCOL_TLS_CLIENT` or 1957db96d56Sopenharmony_ci :data:`PROTOCOL_TLS_SERVER` protocol instead of generic 1967db96d56Sopenharmony_ci :data:`PROTOCOL_TLS`. 1977db96d56Sopenharmony_ci 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ciExceptions 2007db96d56Sopenharmony_ci^^^^^^^^^^ 2017db96d56Sopenharmony_ci 2027db96d56Sopenharmony_ci.. exception:: SSLError 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci Raised to signal an error from the underlying SSL implementation 2057db96d56Sopenharmony_ci (currently provided by the OpenSSL library). This signifies some 2067db96d56Sopenharmony_ci problem in the higher-level encryption and authentication layer that's 2077db96d56Sopenharmony_ci superimposed on the underlying network connection. This error 2087db96d56Sopenharmony_ci is a subtype of :exc:`OSError`. The error code and message of 2097db96d56Sopenharmony_ci :exc:`SSLError` instances are provided by the OpenSSL library. 2107db96d56Sopenharmony_ci 2117db96d56Sopenharmony_ci .. versionchanged:: 3.3 2127db96d56Sopenharmony_ci :exc:`SSLError` used to be a subtype of :exc:`socket.error`. 2137db96d56Sopenharmony_ci 2147db96d56Sopenharmony_ci .. attribute:: library 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ci A string mnemonic designating the OpenSSL submodule in which the error 2177db96d56Sopenharmony_ci occurred, such as ``SSL``, ``PEM`` or ``X509``. The range of possible 2187db96d56Sopenharmony_ci values depends on the OpenSSL version. 2197db96d56Sopenharmony_ci 2207db96d56Sopenharmony_ci .. versionadded:: 3.3 2217db96d56Sopenharmony_ci 2227db96d56Sopenharmony_ci .. attribute:: reason 2237db96d56Sopenharmony_ci 2247db96d56Sopenharmony_ci A string mnemonic designating the reason this error occurred, for 2257db96d56Sopenharmony_ci example ``CERTIFICATE_VERIFY_FAILED``. The range of possible 2267db96d56Sopenharmony_ci values depends on the OpenSSL version. 2277db96d56Sopenharmony_ci 2287db96d56Sopenharmony_ci .. versionadded:: 3.3 2297db96d56Sopenharmony_ci 2307db96d56Sopenharmony_ci.. exception:: SSLZeroReturnError 2317db96d56Sopenharmony_ci 2327db96d56Sopenharmony_ci A subclass of :exc:`SSLError` raised when trying to read or write and 2337db96d56Sopenharmony_ci the SSL connection has been closed cleanly. Note that this doesn't 2347db96d56Sopenharmony_ci mean that the underlying transport (read TCP) has been closed. 2357db96d56Sopenharmony_ci 2367db96d56Sopenharmony_ci .. versionadded:: 3.3 2377db96d56Sopenharmony_ci 2387db96d56Sopenharmony_ci.. exception:: SSLWantReadError 2397db96d56Sopenharmony_ci 2407db96d56Sopenharmony_ci A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket 2417db96d56Sopenharmony_ci <ssl-nonblocking>` when trying to read or write data, but more data needs 2427db96d56Sopenharmony_ci to be received on the underlying TCP transport before the request can be 2437db96d56Sopenharmony_ci fulfilled. 2447db96d56Sopenharmony_ci 2457db96d56Sopenharmony_ci .. versionadded:: 3.3 2467db96d56Sopenharmony_ci 2477db96d56Sopenharmony_ci.. exception:: SSLWantWriteError 2487db96d56Sopenharmony_ci 2497db96d56Sopenharmony_ci A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket 2507db96d56Sopenharmony_ci <ssl-nonblocking>` when trying to read or write data, but more data needs 2517db96d56Sopenharmony_ci to be sent on the underlying TCP transport before the request can be 2527db96d56Sopenharmony_ci fulfilled. 2537db96d56Sopenharmony_ci 2547db96d56Sopenharmony_ci .. versionadded:: 3.3 2557db96d56Sopenharmony_ci 2567db96d56Sopenharmony_ci.. exception:: SSLSyscallError 2577db96d56Sopenharmony_ci 2587db96d56Sopenharmony_ci A subclass of :exc:`SSLError` raised when a system error was encountered 2597db96d56Sopenharmony_ci while trying to fulfill an operation on a SSL socket. Unfortunately, 2607db96d56Sopenharmony_ci there is no easy way to inspect the original errno number. 2617db96d56Sopenharmony_ci 2627db96d56Sopenharmony_ci .. versionadded:: 3.3 2637db96d56Sopenharmony_ci 2647db96d56Sopenharmony_ci.. exception:: SSLEOFError 2657db96d56Sopenharmony_ci 2667db96d56Sopenharmony_ci A subclass of :exc:`SSLError` raised when the SSL connection has been 2677db96d56Sopenharmony_ci terminated abruptly. Generally, you shouldn't try to reuse the underlying 2687db96d56Sopenharmony_ci transport when this error is encountered. 2697db96d56Sopenharmony_ci 2707db96d56Sopenharmony_ci .. versionadded:: 3.3 2717db96d56Sopenharmony_ci 2727db96d56Sopenharmony_ci.. exception:: SSLCertVerificationError 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_ci A subclass of :exc:`SSLError` raised when certificate validation has 2757db96d56Sopenharmony_ci failed. 2767db96d56Sopenharmony_ci 2777db96d56Sopenharmony_ci .. versionadded:: 3.7 2787db96d56Sopenharmony_ci 2797db96d56Sopenharmony_ci .. attribute:: verify_code 2807db96d56Sopenharmony_ci 2817db96d56Sopenharmony_ci A numeric error number that denotes the verification error. 2827db96d56Sopenharmony_ci 2837db96d56Sopenharmony_ci .. attribute:: verify_message 2847db96d56Sopenharmony_ci 2857db96d56Sopenharmony_ci A human readable string of the verification error. 2867db96d56Sopenharmony_ci 2877db96d56Sopenharmony_ci.. exception:: CertificateError 2887db96d56Sopenharmony_ci 2897db96d56Sopenharmony_ci An alias for :exc:`SSLCertVerificationError`. 2907db96d56Sopenharmony_ci 2917db96d56Sopenharmony_ci .. versionchanged:: 3.7 2927db96d56Sopenharmony_ci The exception is now an alias for :exc:`SSLCertVerificationError`. 2937db96d56Sopenharmony_ci 2947db96d56Sopenharmony_ci 2957db96d56Sopenharmony_ciRandom generation 2967db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^ 2977db96d56Sopenharmony_ci 2987db96d56Sopenharmony_ci.. function:: RAND_bytes(num) 2997db96d56Sopenharmony_ci 3007db96d56Sopenharmony_ci Return *num* cryptographically strong pseudo-random bytes. Raises an 3017db96d56Sopenharmony_ci :class:`SSLError` if the PRNG has not been seeded with enough data or if the 3027db96d56Sopenharmony_ci operation is not supported by the current RAND method. :func:`RAND_status` 3037db96d56Sopenharmony_ci can be used to check the status of the PRNG and :func:`RAND_add` can be used 3047db96d56Sopenharmony_ci to seed the PRNG. 3057db96d56Sopenharmony_ci 3067db96d56Sopenharmony_ci For almost all applications :func:`os.urandom` is preferable. 3077db96d56Sopenharmony_ci 3087db96d56Sopenharmony_ci Read the Wikipedia article, `Cryptographically secure pseudorandom number 3097db96d56Sopenharmony_ci generator (CSPRNG) 3107db96d56Sopenharmony_ci <https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator>`_, 3117db96d56Sopenharmony_ci to get the requirements of a cryptographically strong generator. 3127db96d56Sopenharmony_ci 3137db96d56Sopenharmony_ci .. versionadded:: 3.3 3147db96d56Sopenharmony_ci 3157db96d56Sopenharmony_ci.. function:: RAND_pseudo_bytes(num) 3167db96d56Sopenharmony_ci 3177db96d56Sopenharmony_ci Return (bytes, is_cryptographic): bytes are *num* pseudo-random bytes, 3187db96d56Sopenharmony_ci is_cryptographic is ``True`` if the bytes generated are cryptographically 3197db96d56Sopenharmony_ci strong. Raises an :class:`SSLError` if the operation is not supported by the 3207db96d56Sopenharmony_ci current RAND method. 3217db96d56Sopenharmony_ci 3227db96d56Sopenharmony_ci Generated pseudo-random byte sequences will be unique if they are of 3237db96d56Sopenharmony_ci sufficient length, but are not necessarily unpredictable. They can be used 3247db96d56Sopenharmony_ci for non-cryptographic purposes and for certain purposes in cryptographic 3257db96d56Sopenharmony_ci protocols, but usually not for key generation etc. 3267db96d56Sopenharmony_ci 3277db96d56Sopenharmony_ci For almost all applications :func:`os.urandom` is preferable. 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci .. versionadded:: 3.3 3307db96d56Sopenharmony_ci 3317db96d56Sopenharmony_ci .. deprecated:: 3.6 3327db96d56Sopenharmony_ci 3337db96d56Sopenharmony_ci OpenSSL has deprecated :func:`ssl.RAND_pseudo_bytes`, use 3347db96d56Sopenharmony_ci :func:`ssl.RAND_bytes` instead. 3357db96d56Sopenharmony_ci 3367db96d56Sopenharmony_ci.. function:: RAND_status() 3377db96d56Sopenharmony_ci 3387db96d56Sopenharmony_ci Return ``True`` if the SSL pseudo-random number generator has been seeded 3397db96d56Sopenharmony_ci with 'enough' randomness, and ``False`` otherwise. You can use 3407db96d56Sopenharmony_ci :func:`ssl.RAND_egd` and :func:`ssl.RAND_add` to increase the randomness of 3417db96d56Sopenharmony_ci the pseudo-random number generator. 3427db96d56Sopenharmony_ci 3437db96d56Sopenharmony_ci.. function:: RAND_add(bytes, entropy) 3447db96d56Sopenharmony_ci 3457db96d56Sopenharmony_ci Mix the given *bytes* into the SSL pseudo-random number generator. The 3467db96d56Sopenharmony_ci parameter *entropy* (a float) is a lower bound on the entropy contained in 3477db96d56Sopenharmony_ci string (so you can always use :const:`0.0`). See :rfc:`1750` for more 3487db96d56Sopenharmony_ci information on sources of entropy. 3497db96d56Sopenharmony_ci 3507db96d56Sopenharmony_ci .. versionchanged:: 3.5 3517db96d56Sopenharmony_ci Writable :term:`bytes-like object` is now accepted. 3527db96d56Sopenharmony_ci 3537db96d56Sopenharmony_ciCertificate handling 3547db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^ 3557db96d56Sopenharmony_ci 3567db96d56Sopenharmony_ci.. testsetup:: 3577db96d56Sopenharmony_ci 3587db96d56Sopenharmony_ci import ssl 3597db96d56Sopenharmony_ci 3607db96d56Sopenharmony_ci.. function:: match_hostname(cert, hostname) 3617db96d56Sopenharmony_ci 3627db96d56Sopenharmony_ci Verify that *cert* (in decoded format as returned by 3637db96d56Sopenharmony_ci :meth:`SSLSocket.getpeercert`) matches the given *hostname*. The rules 3647db96d56Sopenharmony_ci applied are those for checking the identity of HTTPS servers as outlined 3657db96d56Sopenharmony_ci in :rfc:`2818`, :rfc:`5280` and :rfc:`6125`. In addition to HTTPS, this 3667db96d56Sopenharmony_ci function should be suitable for checking the identity of servers in 3677db96d56Sopenharmony_ci various SSL-based protocols such as FTPS, IMAPS, POPS and others. 3687db96d56Sopenharmony_ci 3697db96d56Sopenharmony_ci :exc:`CertificateError` is raised on failure. On success, the function 3707db96d56Sopenharmony_ci returns nothing:: 3717db96d56Sopenharmony_ci 3727db96d56Sopenharmony_ci >>> cert = {'subject': ((('commonName', 'example.com'),),)} 3737db96d56Sopenharmony_ci >>> ssl.match_hostname(cert, "example.com") 3747db96d56Sopenharmony_ci >>> ssl.match_hostname(cert, "example.org") 3757db96d56Sopenharmony_ci Traceback (most recent call last): 3767db96d56Sopenharmony_ci File "<stdin>", line 1, in <module> 3777db96d56Sopenharmony_ci File "/home/py3k/Lib/ssl.py", line 130, in match_hostname 3787db96d56Sopenharmony_ci ssl.CertificateError: hostname 'example.org' doesn't match 'example.com' 3797db96d56Sopenharmony_ci 3807db96d56Sopenharmony_ci .. versionadded:: 3.2 3817db96d56Sopenharmony_ci 3827db96d56Sopenharmony_ci .. versionchanged:: 3.3.3 3837db96d56Sopenharmony_ci The function now follows :rfc:`6125`, section 6.4.3 and does neither 3847db96d56Sopenharmony_ci match multiple wildcards (e.g. ``*.*.com`` or ``*a*.example.org``) nor 3857db96d56Sopenharmony_ci a wildcard inside an internationalized domain names (IDN) fragment. 3867db96d56Sopenharmony_ci IDN A-labels such as ``www*.xn--pthon-kva.org`` are still supported, 3877db96d56Sopenharmony_ci but ``x*.python.org`` no longer matches ``xn--tda.python.org``. 3887db96d56Sopenharmony_ci 3897db96d56Sopenharmony_ci .. versionchanged:: 3.5 3907db96d56Sopenharmony_ci Matching of IP addresses, when present in the subjectAltName field 3917db96d56Sopenharmony_ci of the certificate, is now supported. 3927db96d56Sopenharmony_ci 3937db96d56Sopenharmony_ci .. versionchanged:: 3.7 3947db96d56Sopenharmony_ci The function is no longer used to TLS connections. Hostname matching 3957db96d56Sopenharmony_ci is now performed by OpenSSL. 3967db96d56Sopenharmony_ci 3977db96d56Sopenharmony_ci Allow wildcard when it is the leftmost and the only character 3987db96d56Sopenharmony_ci in that segment. Partial wildcards like ``www*.example.com`` are no 3997db96d56Sopenharmony_ci longer supported. 4007db96d56Sopenharmony_ci 4017db96d56Sopenharmony_ci .. deprecated:: 3.7 4027db96d56Sopenharmony_ci 4037db96d56Sopenharmony_ci.. function:: cert_time_to_seconds(cert_time) 4047db96d56Sopenharmony_ci 4057db96d56Sopenharmony_ci Return the time in seconds since the Epoch, given the ``cert_time`` 4067db96d56Sopenharmony_ci string representing the "notBefore" or "notAfter" date from a 4077db96d56Sopenharmony_ci certificate in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C 4087db96d56Sopenharmony_ci locale). 4097db96d56Sopenharmony_ci 4107db96d56Sopenharmony_ci Here's an example: 4117db96d56Sopenharmony_ci 4127db96d56Sopenharmony_ci .. doctest:: newcontext 4137db96d56Sopenharmony_ci 4147db96d56Sopenharmony_ci >>> import ssl 4157db96d56Sopenharmony_ci >>> timestamp = ssl.cert_time_to_seconds("Jan 5 09:34:43 2018 GMT") 4167db96d56Sopenharmony_ci >>> timestamp # doctest: +SKIP 4177db96d56Sopenharmony_ci 1515144883 4187db96d56Sopenharmony_ci >>> from datetime import datetime 4197db96d56Sopenharmony_ci >>> print(datetime.utcfromtimestamp(timestamp)) # doctest: +SKIP 4207db96d56Sopenharmony_ci 2018-01-05 09:34:43 4217db96d56Sopenharmony_ci 4227db96d56Sopenharmony_ci "notBefore" or "notAfter" dates must use GMT (:rfc:`5280`). 4237db96d56Sopenharmony_ci 4247db96d56Sopenharmony_ci .. versionchanged:: 3.5 4257db96d56Sopenharmony_ci Interpret the input time as a time in UTC as specified by 'GMT' 4267db96d56Sopenharmony_ci timezone in the input string. Local timezone was used 4277db96d56Sopenharmony_ci previously. Return an integer (no fractions of a second in the 4287db96d56Sopenharmony_ci input format) 4297db96d56Sopenharmony_ci 4307db96d56Sopenharmony_ci.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_TLS_CLIENT, \ 4317db96d56Sopenharmony_ci ca_certs=None[, timeout]) 4327db96d56Sopenharmony_ci 4337db96d56Sopenharmony_ci Given the address ``addr`` of an SSL-protected server, as a (*hostname*, 4347db96d56Sopenharmony_ci *port-number*) pair, fetches the server's certificate, and returns it as a 4357db96d56Sopenharmony_ci PEM-encoded string. If ``ssl_version`` is specified, uses that version of 4367db96d56Sopenharmony_ci the SSL protocol to attempt to connect to the server. If ``ca_certs`` is 4377db96d56Sopenharmony_ci specified, it should be a file containing a list of root certificates, the 4387db96d56Sopenharmony_ci same format as used for the same parameter in 4397db96d56Sopenharmony_ci :meth:`SSLContext.wrap_socket`. The call will attempt to validate the 4407db96d56Sopenharmony_ci server certificate against that set of root certificates, and will fail 4417db96d56Sopenharmony_ci if the validation attempt fails. A timeout can be specified with the 4427db96d56Sopenharmony_ci ``timeout`` parameter. 4437db96d56Sopenharmony_ci 4447db96d56Sopenharmony_ci .. versionchanged:: 3.3 4457db96d56Sopenharmony_ci This function is now IPv6-compatible. 4467db96d56Sopenharmony_ci 4477db96d56Sopenharmony_ci .. versionchanged:: 3.5 4487db96d56Sopenharmony_ci The default *ssl_version* is changed from :data:`PROTOCOL_SSLv3` to 4497db96d56Sopenharmony_ci :data:`PROTOCOL_TLS` for maximum compatibility with modern servers. 4507db96d56Sopenharmony_ci 4517db96d56Sopenharmony_ci .. versionchanged:: 3.10 4527db96d56Sopenharmony_ci The *timeout* parameter was added. 4537db96d56Sopenharmony_ci 4547db96d56Sopenharmony_ci.. function:: DER_cert_to_PEM_cert(DER_cert_bytes) 4557db96d56Sopenharmony_ci 4567db96d56Sopenharmony_ci Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded 4577db96d56Sopenharmony_ci string version of the same certificate. 4587db96d56Sopenharmony_ci 4597db96d56Sopenharmony_ci.. function:: PEM_cert_to_DER_cert(PEM_cert_string) 4607db96d56Sopenharmony_ci 4617db96d56Sopenharmony_ci Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of 4627db96d56Sopenharmony_ci bytes for that same certificate. 4637db96d56Sopenharmony_ci 4647db96d56Sopenharmony_ci.. function:: get_default_verify_paths() 4657db96d56Sopenharmony_ci 4667db96d56Sopenharmony_ci Returns a named tuple with paths to OpenSSL's default cafile and capath. 4677db96d56Sopenharmony_ci The paths are the same as used by 4687db96d56Sopenharmony_ci :meth:`SSLContext.set_default_verify_paths`. The return value is a 4697db96d56Sopenharmony_ci :term:`named tuple` ``DefaultVerifyPaths``: 4707db96d56Sopenharmony_ci 4717db96d56Sopenharmony_ci * :attr:`cafile` - resolved path to cafile or ``None`` if the file doesn't exist, 4727db96d56Sopenharmony_ci * :attr:`capath` - resolved path to capath or ``None`` if the directory doesn't exist, 4737db96d56Sopenharmony_ci * :attr:`openssl_cafile_env` - OpenSSL's environment key that points to a cafile, 4747db96d56Sopenharmony_ci * :attr:`openssl_cafile` - hard coded path to a cafile, 4757db96d56Sopenharmony_ci * :attr:`openssl_capath_env` - OpenSSL's environment key that points to a capath, 4767db96d56Sopenharmony_ci * :attr:`openssl_capath` - hard coded path to a capath directory 4777db96d56Sopenharmony_ci 4787db96d56Sopenharmony_ci .. versionadded:: 3.4 4797db96d56Sopenharmony_ci 4807db96d56Sopenharmony_ci.. function:: enum_certificates(store_name) 4817db96d56Sopenharmony_ci 4827db96d56Sopenharmony_ci Retrieve certificates from Windows' system cert store. *store_name* may be 4837db96d56Sopenharmony_ci one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert 4847db96d56Sopenharmony_ci stores, too. 4857db96d56Sopenharmony_ci 4867db96d56Sopenharmony_ci The function returns a list of (cert_bytes, encoding_type, trust) tuples. 4877db96d56Sopenharmony_ci The encoding_type specifies the encoding of cert_bytes. It is either 4887db96d56Sopenharmony_ci :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for 4897db96d56Sopenharmony_ci PKCS#7 ASN.1 data. Trust specifies the purpose of the certificate as a set 4907db96d56Sopenharmony_ci of OIDS or exactly ``True`` if the certificate is trustworthy for all 4917db96d56Sopenharmony_ci purposes. 4927db96d56Sopenharmony_ci 4937db96d56Sopenharmony_ci Example:: 4947db96d56Sopenharmony_ci 4957db96d56Sopenharmony_ci >>> ssl.enum_certificates("CA") 4967db96d56Sopenharmony_ci [(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}), 4977db96d56Sopenharmony_ci (b'data...', 'x509_asn', True)] 4987db96d56Sopenharmony_ci 4997db96d56Sopenharmony_ci .. availability:: Windows. 5007db96d56Sopenharmony_ci 5017db96d56Sopenharmony_ci .. versionadded:: 3.4 5027db96d56Sopenharmony_ci 5037db96d56Sopenharmony_ci.. function:: enum_crls(store_name) 5047db96d56Sopenharmony_ci 5057db96d56Sopenharmony_ci Retrieve CRLs from Windows' system cert store. *store_name* may be 5067db96d56Sopenharmony_ci one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert 5077db96d56Sopenharmony_ci stores, too. 5087db96d56Sopenharmony_ci 5097db96d56Sopenharmony_ci The function returns a list of (cert_bytes, encoding_type, trust) tuples. 5107db96d56Sopenharmony_ci The encoding_type specifies the encoding of cert_bytes. It is either 5117db96d56Sopenharmony_ci :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for 5127db96d56Sopenharmony_ci PKCS#7 ASN.1 data. 5137db96d56Sopenharmony_ci 5147db96d56Sopenharmony_ci .. availability:: Windows. 5157db96d56Sopenharmony_ci 5167db96d56Sopenharmony_ci .. versionadded:: 3.4 5177db96d56Sopenharmony_ci 5187db96d56Sopenharmony_ci.. function:: wrap_socket(sock, keyfile=None, certfile=None, \ 5197db96d56Sopenharmony_ci server_side=False, cert_reqs=CERT_NONE, ssl_version=PROTOCOL_TLS, \ 5207db96d56Sopenharmony_ci ca_certs=None, do_handshake_on_connect=True, \ 5217db96d56Sopenharmony_ci suppress_ragged_eofs=True, ciphers=None) 5227db96d56Sopenharmony_ci 5237db96d56Sopenharmony_ci Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance 5247db96d56Sopenharmony_ci of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps 5257db96d56Sopenharmony_ci the underlying socket in an SSL context. ``sock`` must be a 5267db96d56Sopenharmony_ci :data:`~socket.SOCK_STREAM` socket; other socket types are unsupported. 5277db96d56Sopenharmony_ci 5287db96d56Sopenharmony_ci Internally, function creates a :class:`SSLContext` with protocol 5297db96d56Sopenharmony_ci *ssl_version* and :attr:`SSLContext.options` set to *cert_reqs*. If 5307db96d56Sopenharmony_ci parameters *keyfile*, *certfile*, *ca_certs* or *ciphers* are set, then 5317db96d56Sopenharmony_ci the values are passed to :meth:`SSLContext.load_cert_chain`, 5327db96d56Sopenharmony_ci :meth:`SSLContext.load_verify_locations`, and 5337db96d56Sopenharmony_ci :meth:`SSLContext.set_ciphers`. 5347db96d56Sopenharmony_ci 5357db96d56Sopenharmony_ci The arguments *server_side*, *do_handshake_on_connect*, and 5367db96d56Sopenharmony_ci *suppress_ragged_eofs* have the same meaning as 5377db96d56Sopenharmony_ci :meth:`SSLContext.wrap_socket`. 5387db96d56Sopenharmony_ci 5397db96d56Sopenharmony_ci .. deprecated:: 3.7 5407db96d56Sopenharmony_ci 5417db96d56Sopenharmony_ci Since Python 3.2 and 2.7.9, it is recommended to use the 5427db96d56Sopenharmony_ci :meth:`SSLContext.wrap_socket` instead of :func:`wrap_socket`. The 5437db96d56Sopenharmony_ci top-level function is limited and creates an insecure client socket 5447db96d56Sopenharmony_ci without server name indication or hostname matching. 5457db96d56Sopenharmony_ci 5467db96d56Sopenharmony_ciConstants 5477db96d56Sopenharmony_ci^^^^^^^^^ 5487db96d56Sopenharmony_ci 5497db96d56Sopenharmony_ci All constants are now :class:`enum.IntEnum` or :class:`enum.IntFlag` collections. 5507db96d56Sopenharmony_ci 5517db96d56Sopenharmony_ci .. versionadded:: 3.6 5527db96d56Sopenharmony_ci 5537db96d56Sopenharmony_ci.. data:: CERT_NONE 5547db96d56Sopenharmony_ci 5557db96d56Sopenharmony_ci Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs`` 5567db96d56Sopenharmony_ci parameter to :func:`wrap_socket`. Except for :const:`PROTOCOL_TLS_CLIENT`, 5577db96d56Sopenharmony_ci it is the default mode. With client-side sockets, just about any 5587db96d56Sopenharmony_ci cert is accepted. Validation errors, such as untrusted or expired cert, 5597db96d56Sopenharmony_ci are ignored and do not abort the TLS/SSL handshake. 5607db96d56Sopenharmony_ci 5617db96d56Sopenharmony_ci In server mode, no certificate is requested from the client, so the client 5627db96d56Sopenharmony_ci does not send any for client cert authentication. 5637db96d56Sopenharmony_ci 5647db96d56Sopenharmony_ci See the discussion of :ref:`ssl-security` below. 5657db96d56Sopenharmony_ci 5667db96d56Sopenharmony_ci.. data:: CERT_OPTIONAL 5677db96d56Sopenharmony_ci 5687db96d56Sopenharmony_ci Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs`` 5697db96d56Sopenharmony_ci parameter to :func:`wrap_socket`. In client mode, :const:`CERT_OPTIONAL` 5707db96d56Sopenharmony_ci has the same meaning as :const:`CERT_REQUIRED`. It is recommended to 5717db96d56Sopenharmony_ci use :const:`CERT_REQUIRED` for client-side sockets instead. 5727db96d56Sopenharmony_ci 5737db96d56Sopenharmony_ci In server mode, a client certificate request is sent to the client. The 5747db96d56Sopenharmony_ci client may either ignore the request or send a certificate in order 5757db96d56Sopenharmony_ci perform TLS client cert authentication. If the client chooses to send 5767db96d56Sopenharmony_ci a certificate, it is verified. Any verification error immediately aborts 5777db96d56Sopenharmony_ci the TLS handshake. 5787db96d56Sopenharmony_ci 5797db96d56Sopenharmony_ci Use of this setting requires a valid set of CA certificates to 5807db96d56Sopenharmony_ci be passed, either to :meth:`SSLContext.load_verify_locations` or as a 5817db96d56Sopenharmony_ci value of the ``ca_certs`` parameter to :func:`wrap_socket`. 5827db96d56Sopenharmony_ci 5837db96d56Sopenharmony_ci.. data:: CERT_REQUIRED 5847db96d56Sopenharmony_ci 5857db96d56Sopenharmony_ci Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs`` 5867db96d56Sopenharmony_ci parameter to :func:`wrap_socket`. In this mode, certificates are 5877db96d56Sopenharmony_ci required from the other side of the socket connection; an :class:`SSLError` 5887db96d56Sopenharmony_ci will be raised if no certificate is provided, or if its validation fails. 5897db96d56Sopenharmony_ci This mode is **not** sufficient to verify a certificate in client mode as 5907db96d56Sopenharmony_ci it does not match hostnames. :attr:`~SSLContext.check_hostname` must be 5917db96d56Sopenharmony_ci enabled as well to verify the authenticity of a cert. 5927db96d56Sopenharmony_ci :const:`PROTOCOL_TLS_CLIENT` uses :const:`CERT_REQUIRED` and 5937db96d56Sopenharmony_ci enables :attr:`~SSLContext.check_hostname` by default. 5947db96d56Sopenharmony_ci 5957db96d56Sopenharmony_ci With server socket, this mode provides mandatory TLS client cert 5967db96d56Sopenharmony_ci authentication. A client certificate request is sent to the client and 5977db96d56Sopenharmony_ci the client must provide a valid and trusted certificate. 5987db96d56Sopenharmony_ci 5997db96d56Sopenharmony_ci Use of this setting requires a valid set of CA certificates to 6007db96d56Sopenharmony_ci be passed, either to :meth:`SSLContext.load_verify_locations` or as a 6017db96d56Sopenharmony_ci value of the ``ca_certs`` parameter to :func:`wrap_socket`. 6027db96d56Sopenharmony_ci 6037db96d56Sopenharmony_ci.. class:: VerifyMode 6047db96d56Sopenharmony_ci 6057db96d56Sopenharmony_ci :class:`enum.IntEnum` collection of CERT_* constants. 6067db96d56Sopenharmony_ci 6077db96d56Sopenharmony_ci .. versionadded:: 3.6 6087db96d56Sopenharmony_ci 6097db96d56Sopenharmony_ci.. data:: VERIFY_DEFAULT 6107db96d56Sopenharmony_ci 6117db96d56Sopenharmony_ci Possible value for :attr:`SSLContext.verify_flags`. In this mode, certificate 6127db96d56Sopenharmony_ci revocation lists (CRLs) are not checked. By default OpenSSL does neither 6137db96d56Sopenharmony_ci require nor verify CRLs. 6147db96d56Sopenharmony_ci 6157db96d56Sopenharmony_ci .. versionadded:: 3.4 6167db96d56Sopenharmony_ci 6177db96d56Sopenharmony_ci.. data:: VERIFY_CRL_CHECK_LEAF 6187db96d56Sopenharmony_ci 6197db96d56Sopenharmony_ci Possible value for :attr:`SSLContext.verify_flags`. In this mode, only the 6207db96d56Sopenharmony_ci peer cert is checked but none of the intermediate CA certificates. The mode 6217db96d56Sopenharmony_ci requires a valid CRL that is signed by the peer cert's issuer (its direct 6227db96d56Sopenharmony_ci ancestor CA). If no proper CRL has been loaded with 6237db96d56Sopenharmony_ci :attr:`SSLContext.load_verify_locations`, validation will fail. 6247db96d56Sopenharmony_ci 6257db96d56Sopenharmony_ci .. versionadded:: 3.4 6267db96d56Sopenharmony_ci 6277db96d56Sopenharmony_ci.. data:: VERIFY_CRL_CHECK_CHAIN 6287db96d56Sopenharmony_ci 6297db96d56Sopenharmony_ci Possible value for :attr:`SSLContext.verify_flags`. In this mode, CRLs of 6307db96d56Sopenharmony_ci all certificates in the peer cert chain are checked. 6317db96d56Sopenharmony_ci 6327db96d56Sopenharmony_ci .. versionadded:: 3.4 6337db96d56Sopenharmony_ci 6347db96d56Sopenharmony_ci.. data:: VERIFY_X509_STRICT 6357db96d56Sopenharmony_ci 6367db96d56Sopenharmony_ci Possible value for :attr:`SSLContext.verify_flags` to disable workarounds 6377db96d56Sopenharmony_ci for broken X.509 certificates. 6387db96d56Sopenharmony_ci 6397db96d56Sopenharmony_ci .. versionadded:: 3.4 6407db96d56Sopenharmony_ci 6417db96d56Sopenharmony_ci.. data:: VERIFY_ALLOW_PROXY_CERTS 6427db96d56Sopenharmony_ci 6437db96d56Sopenharmony_ci Possible value for :attr:`SSLContext.verify_flags` to enables proxy 6447db96d56Sopenharmony_ci certificate verification. 6457db96d56Sopenharmony_ci 6467db96d56Sopenharmony_ci .. versionadded:: 3.10 6477db96d56Sopenharmony_ci 6487db96d56Sopenharmony_ci.. data:: VERIFY_X509_TRUSTED_FIRST 6497db96d56Sopenharmony_ci 6507db96d56Sopenharmony_ci Possible value for :attr:`SSLContext.verify_flags`. It instructs OpenSSL to 6517db96d56Sopenharmony_ci prefer trusted certificates when building the trust chain to validate a 6527db96d56Sopenharmony_ci certificate. This flag is enabled by default. 6537db96d56Sopenharmony_ci 6547db96d56Sopenharmony_ci .. versionadded:: 3.4.4 6557db96d56Sopenharmony_ci 6567db96d56Sopenharmony_ci.. data:: VERIFY_X509_PARTIAL_CHAIN 6577db96d56Sopenharmony_ci 6587db96d56Sopenharmony_ci Possible value for :attr:`SSLContext.verify_flags`. It instructs OpenSSL to 6597db96d56Sopenharmony_ci accept intermediate CAs in the trust store to be treated as trust-anchors, 6607db96d56Sopenharmony_ci in the same way as the self-signed root CA certificates. This makes it 6617db96d56Sopenharmony_ci possible to trust certificates issued by an intermediate CA without having 6627db96d56Sopenharmony_ci to trust its ancestor root CA. 6637db96d56Sopenharmony_ci 6647db96d56Sopenharmony_ci .. versionadded:: 3.10 6657db96d56Sopenharmony_ci 6667db96d56Sopenharmony_ci 6677db96d56Sopenharmony_ci.. class:: VerifyFlags 6687db96d56Sopenharmony_ci 6697db96d56Sopenharmony_ci :class:`enum.IntFlag` collection of VERIFY_* constants. 6707db96d56Sopenharmony_ci 6717db96d56Sopenharmony_ci .. versionadded:: 3.6 6727db96d56Sopenharmony_ci 6737db96d56Sopenharmony_ci.. data:: PROTOCOL_TLS 6747db96d56Sopenharmony_ci 6757db96d56Sopenharmony_ci Selects the highest protocol version that both the client and server support. 6767db96d56Sopenharmony_ci Despite the name, this option can select both "SSL" and "TLS" protocols. 6777db96d56Sopenharmony_ci 6787db96d56Sopenharmony_ci .. versionadded:: 3.6 6797db96d56Sopenharmony_ci 6807db96d56Sopenharmony_ci .. deprecated:: 3.10 6817db96d56Sopenharmony_ci 6827db96d56Sopenharmony_ci TLS clients and servers require different default settings for secure 6837db96d56Sopenharmony_ci communication. The generic TLS protocol constant is deprecated in 6847db96d56Sopenharmony_ci favor of :data:`PROTOCOL_TLS_CLIENT` and :data:`PROTOCOL_TLS_SERVER`. 6857db96d56Sopenharmony_ci 6867db96d56Sopenharmony_ci.. data:: PROTOCOL_TLS_CLIENT 6877db96d56Sopenharmony_ci 6887db96d56Sopenharmony_ci Auto-negotiate the highest protocol version that both the client and 6897db96d56Sopenharmony_ci server support, and configure the context client-side connections. The 6907db96d56Sopenharmony_ci protocol enables :data:`CERT_REQUIRED` and 6917db96d56Sopenharmony_ci :attr:`~SSLContext.check_hostname` by default. 6927db96d56Sopenharmony_ci 6937db96d56Sopenharmony_ci .. versionadded:: 3.6 6947db96d56Sopenharmony_ci 6957db96d56Sopenharmony_ci.. data:: PROTOCOL_TLS_SERVER 6967db96d56Sopenharmony_ci 6977db96d56Sopenharmony_ci Auto-negotiate the highest protocol version that both the client and 6987db96d56Sopenharmony_ci server support, and configure the context server-side connections. 6997db96d56Sopenharmony_ci 7007db96d56Sopenharmony_ci .. versionadded:: 3.6 7017db96d56Sopenharmony_ci 7027db96d56Sopenharmony_ci.. data:: PROTOCOL_SSLv23 7037db96d56Sopenharmony_ci 7047db96d56Sopenharmony_ci Alias for :data:`PROTOCOL_TLS`. 7057db96d56Sopenharmony_ci 7067db96d56Sopenharmony_ci .. deprecated:: 3.6 7077db96d56Sopenharmony_ci 7087db96d56Sopenharmony_ci Use :data:`PROTOCOL_TLS` instead. 7097db96d56Sopenharmony_ci 7107db96d56Sopenharmony_ci.. data:: PROTOCOL_SSLv2 7117db96d56Sopenharmony_ci 7127db96d56Sopenharmony_ci Selects SSL version 2 as the channel encryption protocol. 7137db96d56Sopenharmony_ci 7147db96d56Sopenharmony_ci This protocol is not available if OpenSSL is compiled with the 7157db96d56Sopenharmony_ci ``no-ssl2`` option. 7167db96d56Sopenharmony_ci 7177db96d56Sopenharmony_ci .. warning:: 7187db96d56Sopenharmony_ci 7197db96d56Sopenharmony_ci SSL version 2 is insecure. Its use is highly discouraged. 7207db96d56Sopenharmony_ci 7217db96d56Sopenharmony_ci .. deprecated:: 3.6 7227db96d56Sopenharmony_ci 7237db96d56Sopenharmony_ci OpenSSL has removed support for SSLv2. 7247db96d56Sopenharmony_ci 7257db96d56Sopenharmony_ci.. data:: PROTOCOL_SSLv3 7267db96d56Sopenharmony_ci 7277db96d56Sopenharmony_ci Selects SSL version 3 as the channel encryption protocol. 7287db96d56Sopenharmony_ci 7297db96d56Sopenharmony_ci This protocol is not available if OpenSSL is compiled with the 7307db96d56Sopenharmony_ci ``no-ssl3`` option. 7317db96d56Sopenharmony_ci 7327db96d56Sopenharmony_ci .. warning:: 7337db96d56Sopenharmony_ci 7347db96d56Sopenharmony_ci SSL version 3 is insecure. Its use is highly discouraged. 7357db96d56Sopenharmony_ci 7367db96d56Sopenharmony_ci .. deprecated:: 3.6 7377db96d56Sopenharmony_ci 7387db96d56Sopenharmony_ci OpenSSL has deprecated all version specific protocols. Use the default 7397db96d56Sopenharmony_ci protocol :data:`PROTOCOL_TLS_SERVER` or :data:`PROTOCOL_TLS_CLIENT` 7407db96d56Sopenharmony_ci with :attr:`SSLContext.minimum_version` and 7417db96d56Sopenharmony_ci :attr:`SSLContext.maximum_version` instead. 7427db96d56Sopenharmony_ci 7437db96d56Sopenharmony_ci 7447db96d56Sopenharmony_ci.. data:: PROTOCOL_TLSv1 7457db96d56Sopenharmony_ci 7467db96d56Sopenharmony_ci Selects TLS version 1.0 as the channel encryption protocol. 7477db96d56Sopenharmony_ci 7487db96d56Sopenharmony_ci .. deprecated:: 3.6 7497db96d56Sopenharmony_ci 7507db96d56Sopenharmony_ci OpenSSL has deprecated all version specific protocols. 7517db96d56Sopenharmony_ci 7527db96d56Sopenharmony_ci.. data:: PROTOCOL_TLSv1_1 7537db96d56Sopenharmony_ci 7547db96d56Sopenharmony_ci Selects TLS version 1.1 as the channel encryption protocol. 7557db96d56Sopenharmony_ci Available only with openssl version 1.0.1+. 7567db96d56Sopenharmony_ci 7577db96d56Sopenharmony_ci .. versionadded:: 3.4 7587db96d56Sopenharmony_ci 7597db96d56Sopenharmony_ci .. deprecated:: 3.6 7607db96d56Sopenharmony_ci 7617db96d56Sopenharmony_ci OpenSSL has deprecated all version specific protocols. 7627db96d56Sopenharmony_ci 7637db96d56Sopenharmony_ci.. data:: PROTOCOL_TLSv1_2 7647db96d56Sopenharmony_ci 7657db96d56Sopenharmony_ci Selects TLS version 1.2 as the channel encryption protocol. 7667db96d56Sopenharmony_ci Available only with openssl version 1.0.1+. 7677db96d56Sopenharmony_ci 7687db96d56Sopenharmony_ci .. versionadded:: 3.4 7697db96d56Sopenharmony_ci 7707db96d56Sopenharmony_ci .. deprecated:: 3.6 7717db96d56Sopenharmony_ci 7727db96d56Sopenharmony_ci OpenSSL has deprecated all version specific protocols. 7737db96d56Sopenharmony_ci 7747db96d56Sopenharmony_ci.. data:: OP_ALL 7757db96d56Sopenharmony_ci 7767db96d56Sopenharmony_ci Enables workarounds for various bugs present in other SSL implementations. 7777db96d56Sopenharmony_ci This option is set by default. It does not necessarily set the same 7787db96d56Sopenharmony_ci flags as OpenSSL's ``SSL_OP_ALL`` constant. 7797db96d56Sopenharmony_ci 7807db96d56Sopenharmony_ci .. versionadded:: 3.2 7817db96d56Sopenharmony_ci 7827db96d56Sopenharmony_ci.. data:: OP_NO_SSLv2 7837db96d56Sopenharmony_ci 7847db96d56Sopenharmony_ci Prevents an SSLv2 connection. This option is only applicable in 7857db96d56Sopenharmony_ci conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from 7867db96d56Sopenharmony_ci choosing SSLv2 as the protocol version. 7877db96d56Sopenharmony_ci 7887db96d56Sopenharmony_ci .. versionadded:: 3.2 7897db96d56Sopenharmony_ci 7907db96d56Sopenharmony_ci .. deprecated:: 3.6 7917db96d56Sopenharmony_ci 7927db96d56Sopenharmony_ci SSLv2 is deprecated 7937db96d56Sopenharmony_ci 7947db96d56Sopenharmony_ci.. data:: OP_NO_SSLv3 7957db96d56Sopenharmony_ci 7967db96d56Sopenharmony_ci Prevents an SSLv3 connection. This option is only applicable in 7977db96d56Sopenharmony_ci conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from 7987db96d56Sopenharmony_ci choosing SSLv3 as the protocol version. 7997db96d56Sopenharmony_ci 8007db96d56Sopenharmony_ci .. versionadded:: 3.2 8017db96d56Sopenharmony_ci 8027db96d56Sopenharmony_ci .. deprecated:: 3.6 8037db96d56Sopenharmony_ci 8047db96d56Sopenharmony_ci SSLv3 is deprecated 8057db96d56Sopenharmony_ci 8067db96d56Sopenharmony_ci.. data:: OP_NO_TLSv1 8077db96d56Sopenharmony_ci 8087db96d56Sopenharmony_ci Prevents a TLSv1 connection. This option is only applicable in 8097db96d56Sopenharmony_ci conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from 8107db96d56Sopenharmony_ci choosing TLSv1 as the protocol version. 8117db96d56Sopenharmony_ci 8127db96d56Sopenharmony_ci .. versionadded:: 3.2 8137db96d56Sopenharmony_ci 8147db96d56Sopenharmony_ci .. deprecated:: 3.7 8157db96d56Sopenharmony_ci The option is deprecated since OpenSSL 1.1.0, use the new 8167db96d56Sopenharmony_ci :attr:`SSLContext.minimum_version` and 8177db96d56Sopenharmony_ci :attr:`SSLContext.maximum_version` instead. 8187db96d56Sopenharmony_ci 8197db96d56Sopenharmony_ci.. data:: OP_NO_TLSv1_1 8207db96d56Sopenharmony_ci 8217db96d56Sopenharmony_ci Prevents a TLSv1.1 connection. This option is only applicable in conjunction 8227db96d56Sopenharmony_ci with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.1 as 8237db96d56Sopenharmony_ci the protocol version. Available only with openssl version 1.0.1+. 8247db96d56Sopenharmony_ci 8257db96d56Sopenharmony_ci .. versionadded:: 3.4 8267db96d56Sopenharmony_ci 8277db96d56Sopenharmony_ci .. deprecated:: 3.7 8287db96d56Sopenharmony_ci The option is deprecated since OpenSSL 1.1.0. 8297db96d56Sopenharmony_ci 8307db96d56Sopenharmony_ci.. data:: OP_NO_TLSv1_2 8317db96d56Sopenharmony_ci 8327db96d56Sopenharmony_ci Prevents a TLSv1.2 connection. This option is only applicable in conjunction 8337db96d56Sopenharmony_ci with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.2 as 8347db96d56Sopenharmony_ci the protocol version. Available only with openssl version 1.0.1+. 8357db96d56Sopenharmony_ci 8367db96d56Sopenharmony_ci .. versionadded:: 3.4 8377db96d56Sopenharmony_ci 8387db96d56Sopenharmony_ci .. deprecated:: 3.7 8397db96d56Sopenharmony_ci The option is deprecated since OpenSSL 1.1.0. 8407db96d56Sopenharmony_ci 8417db96d56Sopenharmony_ci.. data:: OP_NO_TLSv1_3 8427db96d56Sopenharmony_ci 8437db96d56Sopenharmony_ci Prevents a TLSv1.3 connection. This option is only applicable in conjunction 8447db96d56Sopenharmony_ci with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.3 as 8457db96d56Sopenharmony_ci the protocol version. TLS 1.3 is available with OpenSSL 1.1.1 or later. 8467db96d56Sopenharmony_ci When Python has been compiled against an older version of OpenSSL, the 8477db96d56Sopenharmony_ci flag defaults to *0*. 8487db96d56Sopenharmony_ci 8497db96d56Sopenharmony_ci .. versionadded:: 3.7 8507db96d56Sopenharmony_ci 8517db96d56Sopenharmony_ci .. deprecated:: 3.7 8527db96d56Sopenharmony_ci The option is deprecated since OpenSSL 1.1.0. It was added to 2.7.15, 8537db96d56Sopenharmony_ci 3.6.3 and 3.7.0 for backwards compatibility with OpenSSL 1.0.2. 8547db96d56Sopenharmony_ci 8557db96d56Sopenharmony_ci.. data:: OP_NO_RENEGOTIATION 8567db96d56Sopenharmony_ci 8577db96d56Sopenharmony_ci Disable all renegotiation in TLSv1.2 and earlier. Do not send 8587db96d56Sopenharmony_ci HelloRequest messages, and ignore renegotiation requests via ClientHello. 8597db96d56Sopenharmony_ci 8607db96d56Sopenharmony_ci This option is only available with OpenSSL 1.1.0h and later. 8617db96d56Sopenharmony_ci 8627db96d56Sopenharmony_ci .. versionadded:: 3.7 8637db96d56Sopenharmony_ci 8647db96d56Sopenharmony_ci.. data:: OP_CIPHER_SERVER_PREFERENCE 8657db96d56Sopenharmony_ci 8667db96d56Sopenharmony_ci Use the server's cipher ordering preference, rather than the client's. 8677db96d56Sopenharmony_ci This option has no effect on client sockets and SSLv2 server sockets. 8687db96d56Sopenharmony_ci 8697db96d56Sopenharmony_ci .. versionadded:: 3.3 8707db96d56Sopenharmony_ci 8717db96d56Sopenharmony_ci.. data:: OP_SINGLE_DH_USE 8727db96d56Sopenharmony_ci 8737db96d56Sopenharmony_ci Prevents re-use of the same DH key for distinct SSL sessions. This 8747db96d56Sopenharmony_ci improves forward secrecy but requires more computational resources. 8757db96d56Sopenharmony_ci This option only applies to server sockets. 8767db96d56Sopenharmony_ci 8777db96d56Sopenharmony_ci .. versionadded:: 3.3 8787db96d56Sopenharmony_ci 8797db96d56Sopenharmony_ci.. data:: OP_SINGLE_ECDH_USE 8807db96d56Sopenharmony_ci 8817db96d56Sopenharmony_ci Prevents re-use of the same ECDH key for distinct SSL sessions. This 8827db96d56Sopenharmony_ci improves forward secrecy but requires more computational resources. 8837db96d56Sopenharmony_ci This option only applies to server sockets. 8847db96d56Sopenharmony_ci 8857db96d56Sopenharmony_ci .. versionadded:: 3.3 8867db96d56Sopenharmony_ci 8877db96d56Sopenharmony_ci.. data:: OP_ENABLE_MIDDLEBOX_COMPAT 8887db96d56Sopenharmony_ci 8897db96d56Sopenharmony_ci Send dummy Change Cipher Spec (CCS) messages in TLS 1.3 handshake to make 8907db96d56Sopenharmony_ci a TLS 1.3 connection look more like a TLS 1.2 connection. 8917db96d56Sopenharmony_ci 8927db96d56Sopenharmony_ci This option is only available with OpenSSL 1.1.1 and later. 8937db96d56Sopenharmony_ci 8947db96d56Sopenharmony_ci .. versionadded:: 3.8 8957db96d56Sopenharmony_ci 8967db96d56Sopenharmony_ci.. data:: OP_NO_COMPRESSION 8977db96d56Sopenharmony_ci 8987db96d56Sopenharmony_ci Disable compression on the SSL channel. This is useful if the application 8997db96d56Sopenharmony_ci protocol supports its own compression scheme. 9007db96d56Sopenharmony_ci 9017db96d56Sopenharmony_ci .. versionadded:: 3.3 9027db96d56Sopenharmony_ci 9037db96d56Sopenharmony_ci.. class:: Options 9047db96d56Sopenharmony_ci 9057db96d56Sopenharmony_ci :class:`enum.IntFlag` collection of OP_* constants. 9067db96d56Sopenharmony_ci 9077db96d56Sopenharmony_ci.. data:: OP_NO_TICKET 9087db96d56Sopenharmony_ci 9097db96d56Sopenharmony_ci Prevent client side from requesting a session ticket. 9107db96d56Sopenharmony_ci 9117db96d56Sopenharmony_ci .. versionadded:: 3.6 9127db96d56Sopenharmony_ci 9137db96d56Sopenharmony_ci.. data:: OP_IGNORE_UNEXPECTED_EOF 9147db96d56Sopenharmony_ci 9157db96d56Sopenharmony_ci Ignore unexpected shutdown of TLS connections. 9167db96d56Sopenharmony_ci 9177db96d56Sopenharmony_ci This option is only available with OpenSSL 3.0.0 and later. 9187db96d56Sopenharmony_ci 9197db96d56Sopenharmony_ci .. versionadded:: 3.10 9207db96d56Sopenharmony_ci 9217db96d56Sopenharmony_ci.. data:: HAS_ALPN 9227db96d56Sopenharmony_ci 9237db96d56Sopenharmony_ci Whether the OpenSSL library has built-in support for the *Application-Layer 9247db96d56Sopenharmony_ci Protocol Negotiation* TLS extension as described in :rfc:`7301`. 9257db96d56Sopenharmony_ci 9267db96d56Sopenharmony_ci .. versionadded:: 3.5 9277db96d56Sopenharmony_ci 9287db96d56Sopenharmony_ci.. data:: HAS_NEVER_CHECK_COMMON_NAME 9297db96d56Sopenharmony_ci 9307db96d56Sopenharmony_ci Whether the OpenSSL library has built-in support not checking subject 9317db96d56Sopenharmony_ci common name and :attr:`SSLContext.hostname_checks_common_name` is 9327db96d56Sopenharmony_ci writeable. 9337db96d56Sopenharmony_ci 9347db96d56Sopenharmony_ci .. versionadded:: 3.7 9357db96d56Sopenharmony_ci 9367db96d56Sopenharmony_ci.. data:: HAS_ECDH 9377db96d56Sopenharmony_ci 9387db96d56Sopenharmony_ci Whether the OpenSSL library has built-in support for the Elliptic Curve-based 9397db96d56Sopenharmony_ci Diffie-Hellman key exchange. This should be true unless the feature was 9407db96d56Sopenharmony_ci explicitly disabled by the distributor. 9417db96d56Sopenharmony_ci 9427db96d56Sopenharmony_ci .. versionadded:: 3.3 9437db96d56Sopenharmony_ci 9447db96d56Sopenharmony_ci.. data:: HAS_SNI 9457db96d56Sopenharmony_ci 9467db96d56Sopenharmony_ci Whether the OpenSSL library has built-in support for the *Server Name 9477db96d56Sopenharmony_ci Indication* extension (as defined in :rfc:`6066`). 9487db96d56Sopenharmony_ci 9497db96d56Sopenharmony_ci .. versionadded:: 3.2 9507db96d56Sopenharmony_ci 9517db96d56Sopenharmony_ci.. data:: HAS_NPN 9527db96d56Sopenharmony_ci 9537db96d56Sopenharmony_ci Whether the OpenSSL library has built-in support for the *Next Protocol 9547db96d56Sopenharmony_ci Negotiation* as described in the `Application Layer Protocol 9557db96d56Sopenharmony_ci Negotiation <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_. 9567db96d56Sopenharmony_ci When true, you can use the :meth:`SSLContext.set_npn_protocols` method to advertise 9577db96d56Sopenharmony_ci which protocols you want to support. 9587db96d56Sopenharmony_ci 9597db96d56Sopenharmony_ci .. versionadded:: 3.3 9607db96d56Sopenharmony_ci 9617db96d56Sopenharmony_ci.. data:: HAS_SSLv2 9627db96d56Sopenharmony_ci 9637db96d56Sopenharmony_ci Whether the OpenSSL library has built-in support for the SSL 2.0 protocol. 9647db96d56Sopenharmony_ci 9657db96d56Sopenharmony_ci .. versionadded:: 3.7 9667db96d56Sopenharmony_ci 9677db96d56Sopenharmony_ci.. data:: HAS_SSLv3 9687db96d56Sopenharmony_ci 9697db96d56Sopenharmony_ci Whether the OpenSSL library has built-in support for the SSL 3.0 protocol. 9707db96d56Sopenharmony_ci 9717db96d56Sopenharmony_ci .. versionadded:: 3.7 9727db96d56Sopenharmony_ci 9737db96d56Sopenharmony_ci.. data:: HAS_TLSv1 9747db96d56Sopenharmony_ci 9757db96d56Sopenharmony_ci Whether the OpenSSL library has built-in support for the TLS 1.0 protocol. 9767db96d56Sopenharmony_ci 9777db96d56Sopenharmony_ci .. versionadded:: 3.7 9787db96d56Sopenharmony_ci 9797db96d56Sopenharmony_ci.. data:: HAS_TLSv1_1 9807db96d56Sopenharmony_ci 9817db96d56Sopenharmony_ci Whether the OpenSSL library has built-in support for the TLS 1.1 protocol. 9827db96d56Sopenharmony_ci 9837db96d56Sopenharmony_ci .. versionadded:: 3.7 9847db96d56Sopenharmony_ci 9857db96d56Sopenharmony_ci.. data:: HAS_TLSv1_2 9867db96d56Sopenharmony_ci 9877db96d56Sopenharmony_ci Whether the OpenSSL library has built-in support for the TLS 1.2 protocol. 9887db96d56Sopenharmony_ci 9897db96d56Sopenharmony_ci .. versionadded:: 3.7 9907db96d56Sopenharmony_ci 9917db96d56Sopenharmony_ci.. data:: HAS_TLSv1_3 9927db96d56Sopenharmony_ci 9937db96d56Sopenharmony_ci Whether the OpenSSL library has built-in support for the TLS 1.3 protocol. 9947db96d56Sopenharmony_ci 9957db96d56Sopenharmony_ci .. versionadded:: 3.7 9967db96d56Sopenharmony_ci 9977db96d56Sopenharmony_ci.. data:: CHANNEL_BINDING_TYPES 9987db96d56Sopenharmony_ci 9997db96d56Sopenharmony_ci List of supported TLS channel binding types. Strings in this list 10007db96d56Sopenharmony_ci can be used as arguments to :meth:`SSLSocket.get_channel_binding`. 10017db96d56Sopenharmony_ci 10027db96d56Sopenharmony_ci .. versionadded:: 3.3 10037db96d56Sopenharmony_ci 10047db96d56Sopenharmony_ci.. data:: OPENSSL_VERSION 10057db96d56Sopenharmony_ci 10067db96d56Sopenharmony_ci The version string of the OpenSSL library loaded by the interpreter:: 10077db96d56Sopenharmony_ci 10087db96d56Sopenharmony_ci >>> ssl.OPENSSL_VERSION 10097db96d56Sopenharmony_ci 'OpenSSL 1.0.2k 26 Jan 2017' 10107db96d56Sopenharmony_ci 10117db96d56Sopenharmony_ci .. versionadded:: 3.2 10127db96d56Sopenharmony_ci 10137db96d56Sopenharmony_ci.. data:: OPENSSL_VERSION_INFO 10147db96d56Sopenharmony_ci 10157db96d56Sopenharmony_ci A tuple of five integers representing version information about the 10167db96d56Sopenharmony_ci OpenSSL library:: 10177db96d56Sopenharmony_ci 10187db96d56Sopenharmony_ci >>> ssl.OPENSSL_VERSION_INFO 10197db96d56Sopenharmony_ci (1, 0, 2, 11, 15) 10207db96d56Sopenharmony_ci 10217db96d56Sopenharmony_ci .. versionadded:: 3.2 10227db96d56Sopenharmony_ci 10237db96d56Sopenharmony_ci.. data:: OPENSSL_VERSION_NUMBER 10247db96d56Sopenharmony_ci 10257db96d56Sopenharmony_ci The raw version number of the OpenSSL library, as a single integer:: 10267db96d56Sopenharmony_ci 10277db96d56Sopenharmony_ci >>> ssl.OPENSSL_VERSION_NUMBER 10287db96d56Sopenharmony_ci 268443839 10297db96d56Sopenharmony_ci >>> hex(ssl.OPENSSL_VERSION_NUMBER) 10307db96d56Sopenharmony_ci '0x100020bf' 10317db96d56Sopenharmony_ci 10327db96d56Sopenharmony_ci .. versionadded:: 3.2 10337db96d56Sopenharmony_ci 10347db96d56Sopenharmony_ci.. data:: ALERT_DESCRIPTION_HANDSHAKE_FAILURE 10357db96d56Sopenharmony_ci ALERT_DESCRIPTION_INTERNAL_ERROR 10367db96d56Sopenharmony_ci ALERT_DESCRIPTION_* 10377db96d56Sopenharmony_ci 10387db96d56Sopenharmony_ci Alert Descriptions from :rfc:`5246` and others. The `IANA TLS Alert Registry 10397db96d56Sopenharmony_ci <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6>`_ 10407db96d56Sopenharmony_ci contains this list and references to the RFCs where their meaning is defined. 10417db96d56Sopenharmony_ci 10427db96d56Sopenharmony_ci Used as the return value of the callback function in 10437db96d56Sopenharmony_ci :meth:`SSLContext.set_servername_callback`. 10447db96d56Sopenharmony_ci 10457db96d56Sopenharmony_ci .. versionadded:: 3.4 10467db96d56Sopenharmony_ci 10477db96d56Sopenharmony_ci.. class:: AlertDescription 10487db96d56Sopenharmony_ci 10497db96d56Sopenharmony_ci :class:`enum.IntEnum` collection of ALERT_DESCRIPTION_* constants. 10507db96d56Sopenharmony_ci 10517db96d56Sopenharmony_ci .. versionadded:: 3.6 10527db96d56Sopenharmony_ci 10537db96d56Sopenharmony_ci.. data:: Purpose.SERVER_AUTH 10547db96d56Sopenharmony_ci 10557db96d56Sopenharmony_ci Option for :func:`create_default_context` and 10567db96d56Sopenharmony_ci :meth:`SSLContext.load_default_certs`. This value indicates that the 10577db96d56Sopenharmony_ci context may be used to authenticate web servers (therefore, it will 10587db96d56Sopenharmony_ci be used to create client-side sockets). 10597db96d56Sopenharmony_ci 10607db96d56Sopenharmony_ci .. versionadded:: 3.4 10617db96d56Sopenharmony_ci 10627db96d56Sopenharmony_ci.. data:: Purpose.CLIENT_AUTH 10637db96d56Sopenharmony_ci 10647db96d56Sopenharmony_ci Option for :func:`create_default_context` and 10657db96d56Sopenharmony_ci :meth:`SSLContext.load_default_certs`. This value indicates that the 10667db96d56Sopenharmony_ci context may be used to authenticate web clients (therefore, it will 10677db96d56Sopenharmony_ci be used to create server-side sockets). 10687db96d56Sopenharmony_ci 10697db96d56Sopenharmony_ci .. versionadded:: 3.4 10707db96d56Sopenharmony_ci 10717db96d56Sopenharmony_ci.. class:: SSLErrorNumber 10727db96d56Sopenharmony_ci 10737db96d56Sopenharmony_ci :class:`enum.IntEnum` collection of SSL_ERROR_* constants. 10747db96d56Sopenharmony_ci 10757db96d56Sopenharmony_ci .. versionadded:: 3.6 10767db96d56Sopenharmony_ci 10777db96d56Sopenharmony_ci.. class:: TLSVersion 10787db96d56Sopenharmony_ci 10797db96d56Sopenharmony_ci :class:`enum.IntEnum` collection of SSL and TLS versions for 10807db96d56Sopenharmony_ci :attr:`SSLContext.maximum_version` and :attr:`SSLContext.minimum_version`. 10817db96d56Sopenharmony_ci 10827db96d56Sopenharmony_ci .. versionadded:: 3.7 10837db96d56Sopenharmony_ci 10847db96d56Sopenharmony_ci.. attribute:: TLSVersion.MINIMUM_SUPPORTED 10857db96d56Sopenharmony_ci.. attribute:: TLSVersion.MAXIMUM_SUPPORTED 10867db96d56Sopenharmony_ci 10877db96d56Sopenharmony_ci The minimum or maximum supported SSL or TLS version. These are magic 10887db96d56Sopenharmony_ci constants. Their values don't reflect the lowest and highest available 10897db96d56Sopenharmony_ci TLS/SSL versions. 10907db96d56Sopenharmony_ci 10917db96d56Sopenharmony_ci.. attribute:: TLSVersion.SSLv3 10927db96d56Sopenharmony_ci.. attribute:: TLSVersion.TLSv1 10937db96d56Sopenharmony_ci.. attribute:: TLSVersion.TLSv1_1 10947db96d56Sopenharmony_ci.. attribute:: TLSVersion.TLSv1_2 10957db96d56Sopenharmony_ci.. attribute:: TLSVersion.TLSv1_3 10967db96d56Sopenharmony_ci 10977db96d56Sopenharmony_ci SSL 3.0 to TLS 1.3. 10987db96d56Sopenharmony_ci 10997db96d56Sopenharmony_ci .. deprecated:: 3.10 11007db96d56Sopenharmony_ci 11017db96d56Sopenharmony_ci All :class:`TLSVersion` members except :attr:`TLSVersion.TLSv1_2` and 11027db96d56Sopenharmony_ci :attr:`TLSVersion.TLSv1_3` are deprecated. 11037db96d56Sopenharmony_ci 11047db96d56Sopenharmony_ci 11057db96d56Sopenharmony_ciSSL Sockets 11067db96d56Sopenharmony_ci----------- 11077db96d56Sopenharmony_ci 11087db96d56Sopenharmony_ci.. class:: SSLSocket(socket.socket) 11097db96d56Sopenharmony_ci 11107db96d56Sopenharmony_ci SSL sockets provide the following methods of :ref:`socket-objects`: 11117db96d56Sopenharmony_ci 11127db96d56Sopenharmony_ci - :meth:`~socket.socket.accept()` 11137db96d56Sopenharmony_ci - :meth:`~socket.socket.bind()` 11147db96d56Sopenharmony_ci - :meth:`~socket.socket.close()` 11157db96d56Sopenharmony_ci - :meth:`~socket.socket.connect()` 11167db96d56Sopenharmony_ci - :meth:`~socket.socket.detach()` 11177db96d56Sopenharmony_ci - :meth:`~socket.socket.fileno()` 11187db96d56Sopenharmony_ci - :meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()` 11197db96d56Sopenharmony_ci - :meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()` 11207db96d56Sopenharmony_ci - :meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`, 11217db96d56Sopenharmony_ci :meth:`~socket.socket.setblocking()` 11227db96d56Sopenharmony_ci - :meth:`~socket.socket.listen()` 11237db96d56Sopenharmony_ci - :meth:`~socket.socket.makefile()` 11247db96d56Sopenharmony_ci - :meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()` 11257db96d56Sopenharmony_ci (but passing a non-zero ``flags`` argument is not allowed) 11267db96d56Sopenharmony_ci - :meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with 11277db96d56Sopenharmony_ci the same limitation) 11287db96d56Sopenharmony_ci - :meth:`~socket.socket.sendfile()` (but :mod:`os.sendfile` will be used 11297db96d56Sopenharmony_ci for plain-text sockets only, else :meth:`~socket.socket.send()` will be used) 11307db96d56Sopenharmony_ci - :meth:`~socket.socket.shutdown()` 11317db96d56Sopenharmony_ci 11327db96d56Sopenharmony_ci However, since the SSL (and TLS) protocol has its own framing atop 11337db96d56Sopenharmony_ci of TCP, the SSL sockets abstraction can, in certain respects, diverge from 11347db96d56Sopenharmony_ci the specification of normal, OS-level sockets. See especially the 11357db96d56Sopenharmony_ci :ref:`notes on non-blocking sockets <ssl-nonblocking>`. 11367db96d56Sopenharmony_ci 11377db96d56Sopenharmony_ci Instances of :class:`SSLSocket` must be created using the 11387db96d56Sopenharmony_ci :meth:`SSLContext.wrap_socket` method. 11397db96d56Sopenharmony_ci 11407db96d56Sopenharmony_ci .. versionchanged:: 3.5 11417db96d56Sopenharmony_ci The :meth:`sendfile` method was added. 11427db96d56Sopenharmony_ci 11437db96d56Sopenharmony_ci .. versionchanged:: 3.5 11447db96d56Sopenharmony_ci The :meth:`shutdown` does not reset the socket timeout each time bytes 11457db96d56Sopenharmony_ci are received or sent. The socket timeout is now the maximum total duration 11467db96d56Sopenharmony_ci of the shutdown. 11477db96d56Sopenharmony_ci 11487db96d56Sopenharmony_ci .. deprecated:: 3.6 11497db96d56Sopenharmony_ci It is deprecated to create a :class:`SSLSocket` instance directly, use 11507db96d56Sopenharmony_ci :meth:`SSLContext.wrap_socket` to wrap a socket. 11517db96d56Sopenharmony_ci 11527db96d56Sopenharmony_ci .. versionchanged:: 3.7 11537db96d56Sopenharmony_ci :class:`SSLSocket` instances must to created with 11547db96d56Sopenharmony_ci :meth:`~SSLContext.wrap_socket`. In earlier versions, it was possible 11557db96d56Sopenharmony_ci to create instances directly. This was never documented or officially 11567db96d56Sopenharmony_ci supported. 11577db96d56Sopenharmony_ci 11587db96d56Sopenharmony_ci .. versionchanged:: 3.10 11597db96d56Sopenharmony_ci Python now uses ``SSL_read_ex`` and ``SSL_write_ex`` internally. The 11607db96d56Sopenharmony_ci functions support reading and writing of data larger than 2 GB. Writing 11617db96d56Sopenharmony_ci zero-length data no longer fails with a protocol violation error. 11627db96d56Sopenharmony_ci 11637db96d56Sopenharmony_ciSSL sockets also have the following additional methods and attributes: 11647db96d56Sopenharmony_ci 11657db96d56Sopenharmony_ci.. method:: SSLSocket.read(len=1024, buffer=None) 11667db96d56Sopenharmony_ci 11677db96d56Sopenharmony_ci Read up to *len* bytes of data from the SSL socket and return the result as 11687db96d56Sopenharmony_ci a ``bytes`` instance. If *buffer* is specified, then read into the buffer 11697db96d56Sopenharmony_ci instead, and return the number of bytes read. 11707db96d56Sopenharmony_ci 11717db96d56Sopenharmony_ci Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is 11727db96d56Sopenharmony_ci :ref:`non-blocking <ssl-nonblocking>` and the read would block. 11737db96d56Sopenharmony_ci 11747db96d56Sopenharmony_ci As at any time a re-negotiation is possible, a call to :meth:`read` can also 11757db96d56Sopenharmony_ci cause write operations. 11767db96d56Sopenharmony_ci 11777db96d56Sopenharmony_ci .. versionchanged:: 3.5 11787db96d56Sopenharmony_ci The socket timeout is no longer reset each time bytes are received or sent. 11797db96d56Sopenharmony_ci The socket timeout is now the maximum total duration to read up to *len* 11807db96d56Sopenharmony_ci bytes. 11817db96d56Sopenharmony_ci 11827db96d56Sopenharmony_ci .. deprecated:: 3.6 11837db96d56Sopenharmony_ci Use :meth:`~SSLSocket.recv` instead of :meth:`~SSLSocket.read`. 11847db96d56Sopenharmony_ci 11857db96d56Sopenharmony_ci.. method:: SSLSocket.write(buf) 11867db96d56Sopenharmony_ci 11877db96d56Sopenharmony_ci Write *buf* to the SSL socket and return the number of bytes written. The 11887db96d56Sopenharmony_ci *buf* argument must be an object supporting the buffer interface. 11897db96d56Sopenharmony_ci 11907db96d56Sopenharmony_ci Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is 11917db96d56Sopenharmony_ci :ref:`non-blocking <ssl-nonblocking>` and the write would block. 11927db96d56Sopenharmony_ci 11937db96d56Sopenharmony_ci As at any time a re-negotiation is possible, a call to :meth:`write` can 11947db96d56Sopenharmony_ci also cause read operations. 11957db96d56Sopenharmony_ci 11967db96d56Sopenharmony_ci .. versionchanged:: 3.5 11977db96d56Sopenharmony_ci The socket timeout is no longer reset each time bytes are received or sent. 11987db96d56Sopenharmony_ci The socket timeout is now the maximum total duration to write *buf*. 11997db96d56Sopenharmony_ci 12007db96d56Sopenharmony_ci .. deprecated:: 3.6 12017db96d56Sopenharmony_ci Use :meth:`~SSLSocket.send` instead of :meth:`~SSLSocket.write`. 12027db96d56Sopenharmony_ci 12037db96d56Sopenharmony_ci.. note:: 12047db96d56Sopenharmony_ci 12057db96d56Sopenharmony_ci The :meth:`~SSLSocket.read` and :meth:`~SSLSocket.write` methods are the 12067db96d56Sopenharmony_ci low-level methods that read and write unencrypted, application-level data 12077db96d56Sopenharmony_ci and decrypt/encrypt it to encrypted, wire-level data. These methods 12087db96d56Sopenharmony_ci require an active SSL connection, i.e. the handshake was completed and 12097db96d56Sopenharmony_ci :meth:`SSLSocket.unwrap` was not called. 12107db96d56Sopenharmony_ci 12117db96d56Sopenharmony_ci Normally you should use the socket API methods like 12127db96d56Sopenharmony_ci :meth:`~socket.socket.recv` and :meth:`~socket.socket.send` instead of these 12137db96d56Sopenharmony_ci methods. 12147db96d56Sopenharmony_ci 12157db96d56Sopenharmony_ci.. method:: SSLSocket.do_handshake() 12167db96d56Sopenharmony_ci 12177db96d56Sopenharmony_ci Perform the SSL setup handshake. 12187db96d56Sopenharmony_ci 12197db96d56Sopenharmony_ci .. versionchanged:: 3.4 12207db96d56Sopenharmony_ci The handshake method also performs :func:`match_hostname` when the 12217db96d56Sopenharmony_ci :attr:`~SSLContext.check_hostname` attribute of the socket's 12227db96d56Sopenharmony_ci :attr:`~SSLSocket.context` is true. 12237db96d56Sopenharmony_ci 12247db96d56Sopenharmony_ci .. versionchanged:: 3.5 12257db96d56Sopenharmony_ci The socket timeout is no longer reset each time bytes are received or sent. 12267db96d56Sopenharmony_ci The socket timeout is now the maximum total duration of the handshake. 12277db96d56Sopenharmony_ci 12287db96d56Sopenharmony_ci .. versionchanged:: 3.7 12297db96d56Sopenharmony_ci Hostname or IP address is matched by OpenSSL during handshake. The 12307db96d56Sopenharmony_ci function :func:`match_hostname` is no longer used. In case OpenSSL 12317db96d56Sopenharmony_ci refuses a hostname or IP address, the handshake is aborted early and 12327db96d56Sopenharmony_ci a TLS alert message is sent to the peer. 12337db96d56Sopenharmony_ci 12347db96d56Sopenharmony_ci.. method:: SSLSocket.getpeercert(binary_form=False) 12357db96d56Sopenharmony_ci 12367db96d56Sopenharmony_ci If there is no certificate for the peer on the other end of the connection, 12377db96d56Sopenharmony_ci return ``None``. If the SSL handshake hasn't been done yet, raise 12387db96d56Sopenharmony_ci :exc:`ValueError`. 12397db96d56Sopenharmony_ci 12407db96d56Sopenharmony_ci If the ``binary_form`` parameter is :const:`False`, and a certificate was 12417db96d56Sopenharmony_ci received from the peer, this method returns a :class:`dict` instance. If the 12427db96d56Sopenharmony_ci certificate was not validated, the dict is empty. If the certificate was 12437db96d56Sopenharmony_ci validated, it returns a dict with several keys, amongst them ``subject`` 12447db96d56Sopenharmony_ci (the principal for which the certificate was issued) and ``issuer`` 12457db96d56Sopenharmony_ci (the principal issuing the certificate). If a certificate contains an 12467db96d56Sopenharmony_ci instance of the *Subject Alternative Name* extension (see :rfc:`3280`), 12477db96d56Sopenharmony_ci there will also be a ``subjectAltName`` key in the dictionary. 12487db96d56Sopenharmony_ci 12497db96d56Sopenharmony_ci The ``subject`` and ``issuer`` fields are tuples containing the sequence 12507db96d56Sopenharmony_ci of relative distinguished names (RDNs) given in the certificate's data 12517db96d56Sopenharmony_ci structure for the respective fields, and each RDN is a sequence of 12527db96d56Sopenharmony_ci name-value pairs. Here is a real-world example:: 12537db96d56Sopenharmony_ci 12547db96d56Sopenharmony_ci {'issuer': ((('countryName', 'IL'),), 12557db96d56Sopenharmony_ci (('organizationName', 'StartCom Ltd.'),), 12567db96d56Sopenharmony_ci (('organizationalUnitName', 12577db96d56Sopenharmony_ci 'Secure Digital Certificate Signing'),), 12587db96d56Sopenharmony_ci (('commonName', 12597db96d56Sopenharmony_ci 'StartCom Class 2 Primary Intermediate Server CA'),)), 12607db96d56Sopenharmony_ci 'notAfter': 'Nov 22 08:15:19 2013 GMT', 12617db96d56Sopenharmony_ci 'notBefore': 'Nov 21 03:09:52 2011 GMT', 12627db96d56Sopenharmony_ci 'serialNumber': '95F0', 12637db96d56Sopenharmony_ci 'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),), 12647db96d56Sopenharmony_ci (('countryName', 'US'),), 12657db96d56Sopenharmony_ci (('stateOrProvinceName', 'California'),), 12667db96d56Sopenharmony_ci (('localityName', 'San Francisco'),), 12677db96d56Sopenharmony_ci (('organizationName', 'Electronic Frontier Foundation, Inc.'),), 12687db96d56Sopenharmony_ci (('commonName', '*.eff.org'),), 12697db96d56Sopenharmony_ci (('emailAddress', 'hostmaster@eff.org'),)), 12707db96d56Sopenharmony_ci 'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')), 12717db96d56Sopenharmony_ci 'version': 3} 12727db96d56Sopenharmony_ci 12737db96d56Sopenharmony_ci .. note:: 12747db96d56Sopenharmony_ci 12757db96d56Sopenharmony_ci To validate a certificate for a particular service, you can use the 12767db96d56Sopenharmony_ci :func:`match_hostname` function. 12777db96d56Sopenharmony_ci 12787db96d56Sopenharmony_ci If the ``binary_form`` parameter is :const:`True`, and a certificate was 12797db96d56Sopenharmony_ci provided, this method returns the DER-encoded form of the entire certificate 12807db96d56Sopenharmony_ci as a sequence of bytes, or :const:`None` if the peer did not provide a 12817db96d56Sopenharmony_ci certificate. Whether the peer provides a certificate depends on the SSL 12827db96d56Sopenharmony_ci socket's role: 12837db96d56Sopenharmony_ci 12847db96d56Sopenharmony_ci * for a client SSL socket, the server will always provide a certificate, 12857db96d56Sopenharmony_ci regardless of whether validation was required; 12867db96d56Sopenharmony_ci 12877db96d56Sopenharmony_ci * for a server SSL socket, the client will only provide a certificate 12887db96d56Sopenharmony_ci when requested by the server; therefore :meth:`getpeercert` will return 12897db96d56Sopenharmony_ci :const:`None` if you used :const:`CERT_NONE` (rather than 12907db96d56Sopenharmony_ci :const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`). 12917db96d56Sopenharmony_ci 12927db96d56Sopenharmony_ci .. versionchanged:: 3.2 12937db96d56Sopenharmony_ci The returned dictionary includes additional items such as ``issuer`` 12947db96d56Sopenharmony_ci and ``notBefore``. 12957db96d56Sopenharmony_ci 12967db96d56Sopenharmony_ci .. versionchanged:: 3.4 12977db96d56Sopenharmony_ci :exc:`ValueError` is raised when the handshake isn't done. 12987db96d56Sopenharmony_ci The returned dictionary includes additional X509v3 extension items 12997db96d56Sopenharmony_ci such as ``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs. 13007db96d56Sopenharmony_ci 13017db96d56Sopenharmony_ci .. versionchanged:: 3.9 13027db96d56Sopenharmony_ci IPv6 address strings no longer have a trailing new line. 13037db96d56Sopenharmony_ci 13047db96d56Sopenharmony_ci.. method:: SSLSocket.cipher() 13057db96d56Sopenharmony_ci 13067db96d56Sopenharmony_ci Returns a three-value tuple containing the name of the cipher being used, the 13077db96d56Sopenharmony_ci version of the SSL protocol that defines its use, and the number of secret 13087db96d56Sopenharmony_ci bits being used. If no connection has been established, returns ``None``. 13097db96d56Sopenharmony_ci 13107db96d56Sopenharmony_ci.. method:: SSLSocket.shared_ciphers() 13117db96d56Sopenharmony_ci 13127db96d56Sopenharmony_ci Return the list of ciphers available in both the client and server. Each 13137db96d56Sopenharmony_ci entry of the returned list is a three-value tuple containing the name of the 13147db96d56Sopenharmony_ci cipher, the version of the SSL protocol that defines its use, and the number 13157db96d56Sopenharmony_ci of secret bits the cipher uses. :meth:`~SSLSocket.shared_ciphers` returns 13167db96d56Sopenharmony_ci ``None`` if no connection has been established or the socket is a client 13177db96d56Sopenharmony_ci socket. 13187db96d56Sopenharmony_ci 13197db96d56Sopenharmony_ci .. versionadded:: 3.5 13207db96d56Sopenharmony_ci 13217db96d56Sopenharmony_ci.. method:: SSLSocket.compression() 13227db96d56Sopenharmony_ci 13237db96d56Sopenharmony_ci Return the compression algorithm being used as a string, or ``None`` 13247db96d56Sopenharmony_ci if the connection isn't compressed. 13257db96d56Sopenharmony_ci 13267db96d56Sopenharmony_ci If the higher-level protocol supports its own compression mechanism, 13277db96d56Sopenharmony_ci you can use :data:`OP_NO_COMPRESSION` to disable SSL-level compression. 13287db96d56Sopenharmony_ci 13297db96d56Sopenharmony_ci .. versionadded:: 3.3 13307db96d56Sopenharmony_ci 13317db96d56Sopenharmony_ci.. method:: SSLSocket.get_channel_binding(cb_type="tls-unique") 13327db96d56Sopenharmony_ci 13337db96d56Sopenharmony_ci Get channel binding data for current connection, as a bytes object. Returns 13347db96d56Sopenharmony_ci ``None`` if not connected or the handshake has not been completed. 13357db96d56Sopenharmony_ci 13367db96d56Sopenharmony_ci The *cb_type* parameter allow selection of the desired channel binding 13377db96d56Sopenharmony_ci type. Valid channel binding types are listed in the 13387db96d56Sopenharmony_ci :data:`CHANNEL_BINDING_TYPES` list. Currently only the 'tls-unique' channel 13397db96d56Sopenharmony_ci binding, defined by :rfc:`5929`, is supported. :exc:`ValueError` will be 13407db96d56Sopenharmony_ci raised if an unsupported channel binding type is requested. 13417db96d56Sopenharmony_ci 13427db96d56Sopenharmony_ci .. versionadded:: 3.3 13437db96d56Sopenharmony_ci 13447db96d56Sopenharmony_ci.. method:: SSLSocket.selected_alpn_protocol() 13457db96d56Sopenharmony_ci 13467db96d56Sopenharmony_ci Return the protocol that was selected during the TLS handshake. If 13477db96d56Sopenharmony_ci :meth:`SSLContext.set_alpn_protocols` was not called, if the other party does 13487db96d56Sopenharmony_ci not support ALPN, if this socket does not support any of the client's 13497db96d56Sopenharmony_ci proposed protocols, or if the handshake has not happened yet, ``None`` is 13507db96d56Sopenharmony_ci returned. 13517db96d56Sopenharmony_ci 13527db96d56Sopenharmony_ci .. versionadded:: 3.5 13537db96d56Sopenharmony_ci 13547db96d56Sopenharmony_ci.. method:: SSLSocket.selected_npn_protocol() 13557db96d56Sopenharmony_ci 13567db96d56Sopenharmony_ci Return the higher-level protocol that was selected during the TLS/SSL 13577db96d56Sopenharmony_ci handshake. If :meth:`SSLContext.set_npn_protocols` was not called, or 13587db96d56Sopenharmony_ci if the other party does not support NPN, or if the handshake has not yet 13597db96d56Sopenharmony_ci happened, this will return ``None``. 13607db96d56Sopenharmony_ci 13617db96d56Sopenharmony_ci .. versionadded:: 3.3 13627db96d56Sopenharmony_ci 13637db96d56Sopenharmony_ci .. deprecated:: 3.10 13647db96d56Sopenharmony_ci 13657db96d56Sopenharmony_ci NPN has been superseded by ALPN 13667db96d56Sopenharmony_ci 13677db96d56Sopenharmony_ci.. method:: SSLSocket.unwrap() 13687db96d56Sopenharmony_ci 13697db96d56Sopenharmony_ci Performs the SSL shutdown handshake, which removes the TLS layer from the 13707db96d56Sopenharmony_ci underlying socket, and returns the underlying socket object. This can be 13717db96d56Sopenharmony_ci used to go from encrypted operation over a connection to unencrypted. The 13727db96d56Sopenharmony_ci returned socket should always be used for further communication with the 13737db96d56Sopenharmony_ci other side of the connection, rather than the original socket. 13747db96d56Sopenharmony_ci 13757db96d56Sopenharmony_ci.. method:: SSLSocket.verify_client_post_handshake() 13767db96d56Sopenharmony_ci 13777db96d56Sopenharmony_ci Requests post-handshake authentication (PHA) from a TLS 1.3 client. PHA 13787db96d56Sopenharmony_ci can only be initiated for a TLS 1.3 connection from a server-side socket, 13797db96d56Sopenharmony_ci after the initial TLS handshake and with PHA enabled on both sides, see 13807db96d56Sopenharmony_ci :attr:`SSLContext.post_handshake_auth`. 13817db96d56Sopenharmony_ci 13827db96d56Sopenharmony_ci The method does not perform a cert exchange immediately. The server-side 13837db96d56Sopenharmony_ci sends a CertificateRequest during the next write event and expects the 13847db96d56Sopenharmony_ci client to respond with a certificate on the next read event. 13857db96d56Sopenharmony_ci 13867db96d56Sopenharmony_ci If any precondition isn't met (e.g. not TLS 1.3, PHA not enabled), an 13877db96d56Sopenharmony_ci :exc:`SSLError` is raised. 13887db96d56Sopenharmony_ci 13897db96d56Sopenharmony_ci .. note:: 13907db96d56Sopenharmony_ci Only available with OpenSSL 1.1.1 and TLS 1.3 enabled. Without TLS 1.3 13917db96d56Sopenharmony_ci support, the method raises :exc:`NotImplementedError`. 13927db96d56Sopenharmony_ci 13937db96d56Sopenharmony_ci .. versionadded:: 3.8 13947db96d56Sopenharmony_ci 13957db96d56Sopenharmony_ci.. method:: SSLSocket.version() 13967db96d56Sopenharmony_ci 13977db96d56Sopenharmony_ci Return the actual SSL protocol version negotiated by the connection 13987db96d56Sopenharmony_ci as a string, or ``None`` if no secure connection is established. 13997db96d56Sopenharmony_ci As of this writing, possible return values include ``"SSLv2"``, 14007db96d56Sopenharmony_ci ``"SSLv3"``, ``"TLSv1"``, ``"TLSv1.1"`` and ``"TLSv1.2"``. 14017db96d56Sopenharmony_ci Recent OpenSSL versions may define more return values. 14027db96d56Sopenharmony_ci 14037db96d56Sopenharmony_ci .. versionadded:: 3.5 14047db96d56Sopenharmony_ci 14057db96d56Sopenharmony_ci.. method:: SSLSocket.pending() 14067db96d56Sopenharmony_ci 14077db96d56Sopenharmony_ci Returns the number of already decrypted bytes available for read, pending on 14087db96d56Sopenharmony_ci the connection. 14097db96d56Sopenharmony_ci 14107db96d56Sopenharmony_ci.. attribute:: SSLSocket.context 14117db96d56Sopenharmony_ci 14127db96d56Sopenharmony_ci The :class:`SSLContext` object this SSL socket is tied to. If the SSL 14137db96d56Sopenharmony_ci socket was created using the deprecated :func:`wrap_socket` function 14147db96d56Sopenharmony_ci (rather than :meth:`SSLContext.wrap_socket`), this is a custom context 14157db96d56Sopenharmony_ci object created for this SSL socket. 14167db96d56Sopenharmony_ci 14177db96d56Sopenharmony_ci .. versionadded:: 3.2 14187db96d56Sopenharmony_ci 14197db96d56Sopenharmony_ci.. attribute:: SSLSocket.server_side 14207db96d56Sopenharmony_ci 14217db96d56Sopenharmony_ci A boolean which is ``True`` for server-side sockets and ``False`` for 14227db96d56Sopenharmony_ci client-side sockets. 14237db96d56Sopenharmony_ci 14247db96d56Sopenharmony_ci .. versionadded:: 3.2 14257db96d56Sopenharmony_ci 14267db96d56Sopenharmony_ci.. attribute:: SSLSocket.server_hostname 14277db96d56Sopenharmony_ci 14287db96d56Sopenharmony_ci Hostname of the server: :class:`str` type, or ``None`` for server-side 14297db96d56Sopenharmony_ci socket or if the hostname was not specified in the constructor. 14307db96d56Sopenharmony_ci 14317db96d56Sopenharmony_ci .. versionadded:: 3.2 14327db96d56Sopenharmony_ci 14337db96d56Sopenharmony_ci .. versionchanged:: 3.7 14347db96d56Sopenharmony_ci The attribute is now always ASCII text. When ``server_hostname`` is 14357db96d56Sopenharmony_ci an internationalized domain name (IDN), this attribute now stores the 14367db96d56Sopenharmony_ci A-label form (``"xn--pythn-mua.org"``), rather than the U-label form 14377db96d56Sopenharmony_ci (``"pythön.org"``). 14387db96d56Sopenharmony_ci 14397db96d56Sopenharmony_ci.. attribute:: SSLSocket.session 14407db96d56Sopenharmony_ci 14417db96d56Sopenharmony_ci The :class:`SSLSession` for this SSL connection. The session is available 14427db96d56Sopenharmony_ci for client and server side sockets after the TLS handshake has been 14437db96d56Sopenharmony_ci performed. For client sockets the session can be set before 14447db96d56Sopenharmony_ci :meth:`~SSLSocket.do_handshake` has been called to reuse a session. 14457db96d56Sopenharmony_ci 14467db96d56Sopenharmony_ci .. versionadded:: 3.6 14477db96d56Sopenharmony_ci 14487db96d56Sopenharmony_ci.. attribute:: SSLSocket.session_reused 14497db96d56Sopenharmony_ci 14507db96d56Sopenharmony_ci .. versionadded:: 3.6 14517db96d56Sopenharmony_ci 14527db96d56Sopenharmony_ci 14537db96d56Sopenharmony_ciSSL Contexts 14547db96d56Sopenharmony_ci------------ 14557db96d56Sopenharmony_ci 14567db96d56Sopenharmony_ci.. versionadded:: 3.2 14577db96d56Sopenharmony_ci 14587db96d56Sopenharmony_ciAn SSL context holds various data longer-lived than single SSL connections, 14597db96d56Sopenharmony_cisuch as SSL configuration options, certificate(s) and private key(s). 14607db96d56Sopenharmony_ciIt also manages a cache of SSL sessions for server-side sockets, in order 14617db96d56Sopenharmony_cito speed up repeated connections from the same clients. 14627db96d56Sopenharmony_ci 14637db96d56Sopenharmony_ci.. class:: SSLContext(protocol=None) 14647db96d56Sopenharmony_ci 14657db96d56Sopenharmony_ci Create a new SSL context. You may pass *protocol* which must be one 14667db96d56Sopenharmony_ci of the ``PROTOCOL_*`` constants defined in this module. The parameter 14677db96d56Sopenharmony_ci specifies which version of the SSL protocol to use. Typically, the 14687db96d56Sopenharmony_ci server chooses a particular protocol version, and the client must adapt 14697db96d56Sopenharmony_ci to the server's choice. Most of the versions are not interoperable 14707db96d56Sopenharmony_ci with the other versions. If not specified, the default is 14717db96d56Sopenharmony_ci :data:`PROTOCOL_TLS`; it provides the most compatibility with other 14727db96d56Sopenharmony_ci versions. 14737db96d56Sopenharmony_ci 14747db96d56Sopenharmony_ci Here's a table showing which versions in a client (down the side) can connect 14757db96d56Sopenharmony_ci to which versions in a server (along the top): 14767db96d56Sopenharmony_ci 14777db96d56Sopenharmony_ci .. table:: 14787db96d56Sopenharmony_ci 14797db96d56Sopenharmony_ci ======================== ============ ============ ============= ========= =========== =========== 14807db96d56Sopenharmony_ci *client* / **server** **SSLv2** **SSLv3** **TLS** [3]_ **TLSv1** **TLSv1.1** **TLSv1.2** 14817db96d56Sopenharmony_ci ------------------------ ------------ ------------ ------------- --------- ----------- ----------- 14827db96d56Sopenharmony_ci *SSLv2* yes no no [1]_ no no no 14837db96d56Sopenharmony_ci *SSLv3* no yes no [2]_ no no no 14847db96d56Sopenharmony_ci *TLS* (*SSLv23*) [3]_ no [1]_ no [2]_ yes yes yes yes 14857db96d56Sopenharmony_ci *TLSv1* no no yes yes no no 14867db96d56Sopenharmony_ci *TLSv1.1* no no yes no yes no 14877db96d56Sopenharmony_ci *TLSv1.2* no no yes no no yes 14887db96d56Sopenharmony_ci ======================== ============ ============ ============= ========= =========== =========== 14897db96d56Sopenharmony_ci 14907db96d56Sopenharmony_ci .. rubric:: Footnotes 14917db96d56Sopenharmony_ci .. [1] :class:`SSLContext` disables SSLv2 with :data:`OP_NO_SSLv2` by default. 14927db96d56Sopenharmony_ci .. [2] :class:`SSLContext` disables SSLv3 with :data:`OP_NO_SSLv3` by default. 14937db96d56Sopenharmony_ci .. [3] TLS 1.3 protocol will be available with :data:`PROTOCOL_TLS` in 14947db96d56Sopenharmony_ci OpenSSL >= 1.1.1. There is no dedicated PROTOCOL constant for just 14957db96d56Sopenharmony_ci TLS 1.3. 14967db96d56Sopenharmony_ci 14977db96d56Sopenharmony_ci .. seealso:: 14987db96d56Sopenharmony_ci :func:`create_default_context` lets the :mod:`ssl` module choose 14997db96d56Sopenharmony_ci security settings for a given purpose. 15007db96d56Sopenharmony_ci 15017db96d56Sopenharmony_ci .. versionchanged:: 3.6 15027db96d56Sopenharmony_ci 15037db96d56Sopenharmony_ci The context is created with secure default values. The options 15047db96d56Sopenharmony_ci :data:`OP_NO_COMPRESSION`, :data:`OP_CIPHER_SERVER_PREFERENCE`, 15057db96d56Sopenharmony_ci :data:`OP_SINGLE_DH_USE`, :data:`OP_SINGLE_ECDH_USE`, 15067db96d56Sopenharmony_ci :data:`OP_NO_SSLv2` (except for :data:`PROTOCOL_SSLv2`), 15077db96d56Sopenharmony_ci and :data:`OP_NO_SSLv3` (except for :data:`PROTOCOL_SSLv3`) are 15087db96d56Sopenharmony_ci set by default. The initial cipher suite list contains only ``HIGH`` 15097db96d56Sopenharmony_ci ciphers, no ``NULL`` ciphers and no ``MD5`` ciphers (except for 15107db96d56Sopenharmony_ci :data:`PROTOCOL_SSLv2`). 15117db96d56Sopenharmony_ci 15127db96d56Sopenharmony_ci .. deprecated:: 3.10 15137db96d56Sopenharmony_ci 15147db96d56Sopenharmony_ci :class:`SSLContext` without protocol argument is deprecated. The 15157db96d56Sopenharmony_ci context class will either require :data:`PROTOCOL_TLS_CLIENT` or 15167db96d56Sopenharmony_ci :data:`PROTOCOL_TLS_SERVER` protocol in the future. 15177db96d56Sopenharmony_ci 15187db96d56Sopenharmony_ci .. versionchanged:: 3.10 15197db96d56Sopenharmony_ci 15207db96d56Sopenharmony_ci The default cipher suites now include only secure AES and ChaCha20 15217db96d56Sopenharmony_ci ciphers with forward secrecy and security level 2. RSA and DH keys with 15227db96d56Sopenharmony_ci less than 2048 bits and ECC keys with less than 224 bits are prohibited. 15237db96d56Sopenharmony_ci :data:`PROTOCOL_TLS`, :data:`PROTOCOL_TLS_CLIENT`, and 15247db96d56Sopenharmony_ci :data:`PROTOCOL_TLS_SERVER` use TLS 1.2 as minimum TLS version. 15257db96d56Sopenharmony_ci 15267db96d56Sopenharmony_ci 15277db96d56Sopenharmony_ci:class:`SSLContext` objects have the following methods and attributes: 15287db96d56Sopenharmony_ci 15297db96d56Sopenharmony_ci.. method:: SSLContext.cert_store_stats() 15307db96d56Sopenharmony_ci 15317db96d56Sopenharmony_ci Get statistics about quantities of loaded X.509 certificates, count of 15327db96d56Sopenharmony_ci X.509 certificates flagged as CA certificates and certificate revocation 15337db96d56Sopenharmony_ci lists as dictionary. 15347db96d56Sopenharmony_ci 15357db96d56Sopenharmony_ci Example for a context with one CA cert and one other cert:: 15367db96d56Sopenharmony_ci 15377db96d56Sopenharmony_ci >>> context.cert_store_stats() 15387db96d56Sopenharmony_ci {'crl': 0, 'x509_ca': 1, 'x509': 2} 15397db96d56Sopenharmony_ci 15407db96d56Sopenharmony_ci .. versionadded:: 3.4 15417db96d56Sopenharmony_ci 15427db96d56Sopenharmony_ci 15437db96d56Sopenharmony_ci.. method:: SSLContext.load_cert_chain(certfile, keyfile=None, password=None) 15447db96d56Sopenharmony_ci 15457db96d56Sopenharmony_ci Load a private key and the corresponding certificate. The *certfile* 15467db96d56Sopenharmony_ci string must be the path to a single file in PEM format containing the 15477db96d56Sopenharmony_ci certificate as well as any number of CA certificates needed to establish 15487db96d56Sopenharmony_ci the certificate's authenticity. The *keyfile* string, if present, must 15497db96d56Sopenharmony_ci point to a file containing the private key. Otherwise the private 15507db96d56Sopenharmony_ci key will be taken from *certfile* as well. See the discussion of 15517db96d56Sopenharmony_ci :ref:`ssl-certificates` for more information on how the certificate 15527db96d56Sopenharmony_ci is stored in the *certfile*. 15537db96d56Sopenharmony_ci 15547db96d56Sopenharmony_ci The *password* argument may be a function to call to get the password for 15557db96d56Sopenharmony_ci decrypting the private key. It will only be called if the private key is 15567db96d56Sopenharmony_ci encrypted and a password is necessary. It will be called with no arguments, 15577db96d56Sopenharmony_ci and it should return a string, bytes, or bytearray. If the return value is 15587db96d56Sopenharmony_ci a string it will be encoded as UTF-8 before using it to decrypt the key. 15597db96d56Sopenharmony_ci Alternatively a string, bytes, or bytearray value may be supplied directly 15607db96d56Sopenharmony_ci as the *password* argument. It will be ignored if the private key is not 15617db96d56Sopenharmony_ci encrypted and no password is needed. 15627db96d56Sopenharmony_ci 15637db96d56Sopenharmony_ci If the *password* argument is not specified and a password is required, 15647db96d56Sopenharmony_ci OpenSSL's built-in password prompting mechanism will be used to 15657db96d56Sopenharmony_ci interactively prompt the user for a password. 15667db96d56Sopenharmony_ci 15677db96d56Sopenharmony_ci An :class:`SSLError` is raised if the private key doesn't 15687db96d56Sopenharmony_ci match with the certificate. 15697db96d56Sopenharmony_ci 15707db96d56Sopenharmony_ci .. versionchanged:: 3.3 15717db96d56Sopenharmony_ci New optional argument *password*. 15727db96d56Sopenharmony_ci 15737db96d56Sopenharmony_ci.. method:: SSLContext.load_default_certs(purpose=Purpose.SERVER_AUTH) 15747db96d56Sopenharmony_ci 15757db96d56Sopenharmony_ci Load a set of default "certification authority" (CA) certificates from 15767db96d56Sopenharmony_ci default locations. On Windows it loads CA certs from the ``CA`` and 15777db96d56Sopenharmony_ci ``ROOT`` system stores. On all systems it calls 15787db96d56Sopenharmony_ci :meth:`SSLContext.set_default_verify_paths`. In the future the method may 15797db96d56Sopenharmony_ci load CA certificates from other locations, too. 15807db96d56Sopenharmony_ci 15817db96d56Sopenharmony_ci The *purpose* flag specifies what kind of CA certificates are loaded. The 15827db96d56Sopenharmony_ci default settings :data:`Purpose.SERVER_AUTH` loads certificates, that are 15837db96d56Sopenharmony_ci flagged and trusted for TLS web server authentication (client side 15847db96d56Sopenharmony_ci sockets). :data:`Purpose.CLIENT_AUTH` loads CA certificates for client 15857db96d56Sopenharmony_ci certificate verification on the server side. 15867db96d56Sopenharmony_ci 15877db96d56Sopenharmony_ci .. versionadded:: 3.4 15887db96d56Sopenharmony_ci 15897db96d56Sopenharmony_ci.. method:: SSLContext.load_verify_locations(cafile=None, capath=None, cadata=None) 15907db96d56Sopenharmony_ci 15917db96d56Sopenharmony_ci Load a set of "certification authority" (CA) certificates used to validate 15927db96d56Sopenharmony_ci other peers' certificates when :data:`verify_mode` is other than 15937db96d56Sopenharmony_ci :data:`CERT_NONE`. At least one of *cafile* or *capath* must be specified. 15947db96d56Sopenharmony_ci 15957db96d56Sopenharmony_ci This method can also load certification revocation lists (CRLs) in PEM or 15967db96d56Sopenharmony_ci DER format. In order to make use of CRLs, :attr:`SSLContext.verify_flags` 15977db96d56Sopenharmony_ci must be configured properly. 15987db96d56Sopenharmony_ci 15997db96d56Sopenharmony_ci The *cafile* string, if present, is the path to a file of concatenated 16007db96d56Sopenharmony_ci CA certificates in PEM format. See the discussion of 16017db96d56Sopenharmony_ci :ref:`ssl-certificates` for more information about how to arrange the 16027db96d56Sopenharmony_ci certificates in this file. 16037db96d56Sopenharmony_ci 16047db96d56Sopenharmony_ci The *capath* string, if present, is 16057db96d56Sopenharmony_ci the path to a directory containing several CA certificates in PEM format, 16067db96d56Sopenharmony_ci following an `OpenSSL specific layout 16077db96d56Sopenharmony_ci <https://www.openssl.org/docs/manmaster/man3/SSL_CTX_load_verify_locations.html>`_. 16087db96d56Sopenharmony_ci 16097db96d56Sopenharmony_ci The *cadata* object, if present, is either an ASCII string of one or more 16107db96d56Sopenharmony_ci PEM-encoded certificates or a :term:`bytes-like object` of DER-encoded 16117db96d56Sopenharmony_ci certificates. Like with *capath* extra lines around PEM-encoded 16127db96d56Sopenharmony_ci certificates are ignored but at least one certificate must be present. 16137db96d56Sopenharmony_ci 16147db96d56Sopenharmony_ci .. versionchanged:: 3.4 16157db96d56Sopenharmony_ci New optional argument *cadata* 16167db96d56Sopenharmony_ci 16177db96d56Sopenharmony_ci.. method:: SSLContext.get_ca_certs(binary_form=False) 16187db96d56Sopenharmony_ci 16197db96d56Sopenharmony_ci Get a list of loaded "certification authority" (CA) certificates. If the 16207db96d56Sopenharmony_ci ``binary_form`` parameter is :const:`False` each list 16217db96d56Sopenharmony_ci entry is a dict like the output of :meth:`SSLSocket.getpeercert`. Otherwise 16227db96d56Sopenharmony_ci the method returns a list of DER-encoded certificates. The returned list 16237db96d56Sopenharmony_ci does not contain certificates from *capath* unless a certificate was 16247db96d56Sopenharmony_ci requested and loaded by a SSL connection. 16257db96d56Sopenharmony_ci 16267db96d56Sopenharmony_ci .. note:: 16277db96d56Sopenharmony_ci Certificates in a capath directory aren't loaded unless they have 16287db96d56Sopenharmony_ci been used at least once. 16297db96d56Sopenharmony_ci 16307db96d56Sopenharmony_ci .. versionadded:: 3.4 16317db96d56Sopenharmony_ci 16327db96d56Sopenharmony_ci.. method:: SSLContext.get_ciphers() 16337db96d56Sopenharmony_ci 16347db96d56Sopenharmony_ci Get a list of enabled ciphers. The list is in order of cipher priority. 16357db96d56Sopenharmony_ci See :meth:`SSLContext.set_ciphers`. 16367db96d56Sopenharmony_ci 16377db96d56Sopenharmony_ci Example:: 16387db96d56Sopenharmony_ci 16397db96d56Sopenharmony_ci >>> ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23) 16407db96d56Sopenharmony_ci >>> ctx.set_ciphers('ECDHE+AESGCM:!ECDSA') 16417db96d56Sopenharmony_ci >>> ctx.get_ciphers() 16427db96d56Sopenharmony_ci [{'aead': True, 16437db96d56Sopenharmony_ci 'alg_bits': 256, 16447db96d56Sopenharmony_ci 'auth': 'auth-rsa', 16457db96d56Sopenharmony_ci 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA ' 16467db96d56Sopenharmony_ci 'Enc=AESGCM(256) Mac=AEAD', 16477db96d56Sopenharmony_ci 'digest': None, 16487db96d56Sopenharmony_ci 'id': 50380848, 16497db96d56Sopenharmony_ci 'kea': 'kx-ecdhe', 16507db96d56Sopenharmony_ci 'name': 'ECDHE-RSA-AES256-GCM-SHA384', 16517db96d56Sopenharmony_ci 'protocol': 'TLSv1.2', 16527db96d56Sopenharmony_ci 'strength_bits': 256, 16537db96d56Sopenharmony_ci 'symmetric': 'aes-256-gcm'}, 16547db96d56Sopenharmony_ci {'aead': True, 16557db96d56Sopenharmony_ci 'alg_bits': 128, 16567db96d56Sopenharmony_ci 'auth': 'auth-rsa', 16577db96d56Sopenharmony_ci 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA ' 16587db96d56Sopenharmony_ci 'Enc=AESGCM(128) Mac=AEAD', 16597db96d56Sopenharmony_ci 'digest': None, 16607db96d56Sopenharmony_ci 'id': 50380847, 16617db96d56Sopenharmony_ci 'kea': 'kx-ecdhe', 16627db96d56Sopenharmony_ci 'name': 'ECDHE-RSA-AES128-GCM-SHA256', 16637db96d56Sopenharmony_ci 'protocol': 'TLSv1.2', 16647db96d56Sopenharmony_ci 'strength_bits': 128, 16657db96d56Sopenharmony_ci 'symmetric': 'aes-128-gcm'}] 16667db96d56Sopenharmony_ci 16677db96d56Sopenharmony_ci .. versionadded:: 3.6 16687db96d56Sopenharmony_ci 16697db96d56Sopenharmony_ci.. method:: SSLContext.set_default_verify_paths() 16707db96d56Sopenharmony_ci 16717db96d56Sopenharmony_ci Load a set of default "certification authority" (CA) certificates from 16727db96d56Sopenharmony_ci a filesystem path defined when building the OpenSSL library. Unfortunately, 16737db96d56Sopenharmony_ci there's no easy way to know whether this method succeeds: no error is 16747db96d56Sopenharmony_ci returned if no certificates are to be found. When the OpenSSL library is 16757db96d56Sopenharmony_ci provided as part of the operating system, though, it is likely to be 16767db96d56Sopenharmony_ci configured properly. 16777db96d56Sopenharmony_ci 16787db96d56Sopenharmony_ci.. method:: SSLContext.set_ciphers(ciphers) 16797db96d56Sopenharmony_ci 16807db96d56Sopenharmony_ci Set the available ciphers for sockets created with this context. 16817db96d56Sopenharmony_ci It should be a string in the `OpenSSL cipher list format 16827db96d56Sopenharmony_ci <https://www.openssl.org/docs/manmaster/man1/ciphers.html>`_. 16837db96d56Sopenharmony_ci If no cipher can be selected (because compile-time options or other 16847db96d56Sopenharmony_ci configuration forbids use of all the specified ciphers), an 16857db96d56Sopenharmony_ci :class:`SSLError` will be raised. 16867db96d56Sopenharmony_ci 16877db96d56Sopenharmony_ci .. note:: 16887db96d56Sopenharmony_ci when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will 16897db96d56Sopenharmony_ci give the currently selected cipher. 16907db96d56Sopenharmony_ci 16917db96d56Sopenharmony_ci TLS 1.3 cipher suites cannot be disabled with 16927db96d56Sopenharmony_ci :meth:`~SSLContext.set_ciphers`. 16937db96d56Sopenharmony_ci 16947db96d56Sopenharmony_ci.. method:: SSLContext.set_alpn_protocols(protocols) 16957db96d56Sopenharmony_ci 16967db96d56Sopenharmony_ci Specify which protocols the socket should advertise during the SSL/TLS 16977db96d56Sopenharmony_ci handshake. It should be a list of ASCII strings, like ``['http/1.1', 16987db96d56Sopenharmony_ci 'spdy/2']``, ordered by preference. The selection of a protocol will happen 16997db96d56Sopenharmony_ci during the handshake, and will play out according to :rfc:`7301`. After a 17007db96d56Sopenharmony_ci successful handshake, the :meth:`SSLSocket.selected_alpn_protocol` method will 17017db96d56Sopenharmony_ci return the agreed-upon protocol. 17027db96d56Sopenharmony_ci 17037db96d56Sopenharmony_ci This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is 17047db96d56Sopenharmony_ci ``False``. 17057db96d56Sopenharmony_ci 17067db96d56Sopenharmony_ci .. versionadded:: 3.5 17077db96d56Sopenharmony_ci 17087db96d56Sopenharmony_ci.. method:: SSLContext.set_npn_protocols(protocols) 17097db96d56Sopenharmony_ci 17107db96d56Sopenharmony_ci Specify which protocols the socket should advertise during the SSL/TLS 17117db96d56Sopenharmony_ci handshake. It should be a list of strings, like ``['http/1.1', 'spdy/2']``, 17127db96d56Sopenharmony_ci ordered by preference. The selection of a protocol will happen during the 17137db96d56Sopenharmony_ci handshake, and will play out according to the `Application Layer Protocol Negotiation 17147db96d56Sopenharmony_ci <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_. After a 17157db96d56Sopenharmony_ci successful handshake, the :meth:`SSLSocket.selected_npn_protocol` method will 17167db96d56Sopenharmony_ci return the agreed-upon protocol. 17177db96d56Sopenharmony_ci 17187db96d56Sopenharmony_ci This method will raise :exc:`NotImplementedError` if :data:`HAS_NPN` is 17197db96d56Sopenharmony_ci ``False``. 17207db96d56Sopenharmony_ci 17217db96d56Sopenharmony_ci .. versionadded:: 3.3 17227db96d56Sopenharmony_ci 17237db96d56Sopenharmony_ci .. deprecated:: 3.10 17247db96d56Sopenharmony_ci 17257db96d56Sopenharmony_ci NPN has been superseded by ALPN 17267db96d56Sopenharmony_ci 17277db96d56Sopenharmony_ci.. attribute:: SSLContext.sni_callback 17287db96d56Sopenharmony_ci 17297db96d56Sopenharmony_ci Register a callback function that will be called after the TLS Client Hello 17307db96d56Sopenharmony_ci handshake message has been received by the SSL/TLS server when the TLS client 17317db96d56Sopenharmony_ci specifies a server name indication. The server name indication mechanism 17327db96d56Sopenharmony_ci is specified in :rfc:`6066` section 3 - Server Name Indication. 17337db96d56Sopenharmony_ci 17347db96d56Sopenharmony_ci Only one callback can be set per ``SSLContext``. If *sni_callback* 17357db96d56Sopenharmony_ci is set to ``None`` then the callback is disabled. Calling this function a 17367db96d56Sopenharmony_ci subsequent time will disable the previously registered callback. 17377db96d56Sopenharmony_ci 17387db96d56Sopenharmony_ci The callback function will be called with three 17397db96d56Sopenharmony_ci arguments; the first being the :class:`ssl.SSLSocket`, the second is a string 17407db96d56Sopenharmony_ci that represents the server name that the client is intending to communicate 17417db96d56Sopenharmony_ci (or :const:`None` if the TLS Client Hello does not contain a server name) 17427db96d56Sopenharmony_ci and the third argument is the original :class:`SSLContext`. The server name 17437db96d56Sopenharmony_ci argument is text. For internationalized domain name, the server 17447db96d56Sopenharmony_ci name is an IDN A-label (``"xn--pythn-mua.org"``). 17457db96d56Sopenharmony_ci 17467db96d56Sopenharmony_ci A typical use of this callback is to change the :class:`ssl.SSLSocket`'s 17477db96d56Sopenharmony_ci :attr:`SSLSocket.context` attribute to a new object of type 17487db96d56Sopenharmony_ci :class:`SSLContext` representing a certificate chain that matches the server 17497db96d56Sopenharmony_ci name. 17507db96d56Sopenharmony_ci 17517db96d56Sopenharmony_ci Due to the early negotiation phase of the TLS connection, only limited 17527db96d56Sopenharmony_ci methods and attributes are usable like 17537db96d56Sopenharmony_ci :meth:`SSLSocket.selected_alpn_protocol` and :attr:`SSLSocket.context`. 17547db96d56Sopenharmony_ci The :meth:`SSLSocket.getpeercert`, 17557db96d56Sopenharmony_ci :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compression` methods require that 17567db96d56Sopenharmony_ci the TLS connection has progressed beyond the TLS Client Hello and therefore 17577db96d56Sopenharmony_ci will not return meaningful values nor can they be called safely. 17587db96d56Sopenharmony_ci 17597db96d56Sopenharmony_ci The *sni_callback* function must return ``None`` to allow the 17607db96d56Sopenharmony_ci TLS negotiation to continue. If a TLS failure is required, a constant 17617db96d56Sopenharmony_ci :const:`ALERT_DESCRIPTION_* <ALERT_DESCRIPTION_INTERNAL_ERROR>` can be 17627db96d56Sopenharmony_ci returned. Other return values will result in a TLS fatal error with 17637db96d56Sopenharmony_ci :const:`ALERT_DESCRIPTION_INTERNAL_ERROR`. 17647db96d56Sopenharmony_ci 17657db96d56Sopenharmony_ci If an exception is raised from the *sni_callback* function the TLS 17667db96d56Sopenharmony_ci connection will terminate with a fatal TLS alert message 17677db96d56Sopenharmony_ci :const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`. 17687db96d56Sopenharmony_ci 17697db96d56Sopenharmony_ci This method will raise :exc:`NotImplementedError` if the OpenSSL library 17707db96d56Sopenharmony_ci had OPENSSL_NO_TLSEXT defined when it was built. 17717db96d56Sopenharmony_ci 17727db96d56Sopenharmony_ci .. versionadded:: 3.7 17737db96d56Sopenharmony_ci 17747db96d56Sopenharmony_ci.. attribute:: SSLContext.set_servername_callback(server_name_callback) 17757db96d56Sopenharmony_ci 17767db96d56Sopenharmony_ci This is a legacy API retained for backwards compatibility. When possible, 17777db96d56Sopenharmony_ci you should use :attr:`sni_callback` instead. The given *server_name_callback* 17787db96d56Sopenharmony_ci is similar to *sni_callback*, except that when the server hostname is an 17797db96d56Sopenharmony_ci IDN-encoded internationalized domain name, the *server_name_callback* 17807db96d56Sopenharmony_ci receives a decoded U-label (``"pythön.org"``). 17817db96d56Sopenharmony_ci 17827db96d56Sopenharmony_ci If there is an decoding error on the server name, the TLS connection will 17837db96d56Sopenharmony_ci terminate with an :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` fatal TLS 17847db96d56Sopenharmony_ci alert message to the client. 17857db96d56Sopenharmony_ci 17867db96d56Sopenharmony_ci .. versionadded:: 3.4 17877db96d56Sopenharmony_ci 17887db96d56Sopenharmony_ci.. method:: SSLContext.load_dh_params(dhfile) 17897db96d56Sopenharmony_ci 17907db96d56Sopenharmony_ci Load the key generation parameters for Diffie-Hellman (DH) key exchange. 17917db96d56Sopenharmony_ci Using DH key exchange improves forward secrecy at the expense of 17927db96d56Sopenharmony_ci computational resources (both on the server and on the client). 17937db96d56Sopenharmony_ci The *dhfile* parameter should be the path to a file containing DH 17947db96d56Sopenharmony_ci parameters in PEM format. 17957db96d56Sopenharmony_ci 17967db96d56Sopenharmony_ci This setting doesn't apply to client sockets. You can also use the 17977db96d56Sopenharmony_ci :data:`OP_SINGLE_DH_USE` option to further improve security. 17987db96d56Sopenharmony_ci 17997db96d56Sopenharmony_ci .. versionadded:: 3.3 18007db96d56Sopenharmony_ci 18017db96d56Sopenharmony_ci.. method:: SSLContext.set_ecdh_curve(curve_name) 18027db96d56Sopenharmony_ci 18037db96d56Sopenharmony_ci Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH) key 18047db96d56Sopenharmony_ci exchange. ECDH is significantly faster than regular DH while arguably 18057db96d56Sopenharmony_ci as secure. The *curve_name* parameter should be a string describing 18067db96d56Sopenharmony_ci a well-known elliptic curve, for example ``prime256v1`` for a widely 18077db96d56Sopenharmony_ci supported curve. 18087db96d56Sopenharmony_ci 18097db96d56Sopenharmony_ci This setting doesn't apply to client sockets. You can also use the 18107db96d56Sopenharmony_ci :data:`OP_SINGLE_ECDH_USE` option to further improve security. 18117db96d56Sopenharmony_ci 18127db96d56Sopenharmony_ci This method is not available if :data:`HAS_ECDH` is ``False``. 18137db96d56Sopenharmony_ci 18147db96d56Sopenharmony_ci .. versionadded:: 3.3 18157db96d56Sopenharmony_ci 18167db96d56Sopenharmony_ci .. seealso:: 18177db96d56Sopenharmony_ci `SSL/TLS & Perfect Forward Secrecy <https://vincent.bernat.ch/en/blog/2011-ssl-perfect-forward-secrecy>`_ 18187db96d56Sopenharmony_ci Vincent Bernat. 18197db96d56Sopenharmony_ci 18207db96d56Sopenharmony_ci.. method:: SSLContext.wrap_socket(sock, server_side=False, \ 18217db96d56Sopenharmony_ci do_handshake_on_connect=True, suppress_ragged_eofs=True, \ 18227db96d56Sopenharmony_ci server_hostname=None, session=None) 18237db96d56Sopenharmony_ci 18247db96d56Sopenharmony_ci Wrap an existing Python socket *sock* and return an instance of 18257db96d56Sopenharmony_ci :attr:`SSLContext.sslsocket_class` (default :class:`SSLSocket`). The 18267db96d56Sopenharmony_ci returned SSL socket is tied to the context, its settings and certificates. 18277db96d56Sopenharmony_ci *sock* must be a :data:`~socket.SOCK_STREAM` socket; other 18287db96d56Sopenharmony_ci socket types are unsupported. 18297db96d56Sopenharmony_ci 18307db96d56Sopenharmony_ci The parameter ``server_side`` is a boolean which identifies whether 18317db96d56Sopenharmony_ci server-side or client-side behavior is desired from this socket. 18327db96d56Sopenharmony_ci 18337db96d56Sopenharmony_ci For client-side sockets, the context construction is lazy; if the 18347db96d56Sopenharmony_ci underlying socket isn't connected yet, the context construction will be 18357db96d56Sopenharmony_ci performed after :meth:`connect` is called on the socket. For 18367db96d56Sopenharmony_ci server-side sockets, if the socket has no remote peer, it is assumed 18377db96d56Sopenharmony_ci to be a listening socket, and the server-side SSL wrapping is 18387db96d56Sopenharmony_ci automatically performed on client connections accepted via the 18397db96d56Sopenharmony_ci :meth:`accept` method. The method may raise :exc:`SSLError`. 18407db96d56Sopenharmony_ci 18417db96d56Sopenharmony_ci On client connections, the optional parameter *server_hostname* specifies 18427db96d56Sopenharmony_ci the hostname of the service which we are connecting to. This allows a 18437db96d56Sopenharmony_ci single server to host multiple SSL-based services with distinct certificates, 18447db96d56Sopenharmony_ci quite similarly to HTTP virtual hosts. Specifying *server_hostname* will 18457db96d56Sopenharmony_ci raise a :exc:`ValueError` if *server_side* is true. 18467db96d56Sopenharmony_ci 18477db96d56Sopenharmony_ci The parameter ``do_handshake_on_connect`` specifies whether to do the SSL 18487db96d56Sopenharmony_ci handshake automatically after doing a :meth:`socket.connect`, or whether the 18497db96d56Sopenharmony_ci application program will call it explicitly, by invoking the 18507db96d56Sopenharmony_ci :meth:`SSLSocket.do_handshake` method. Calling 18517db96d56Sopenharmony_ci :meth:`SSLSocket.do_handshake` explicitly gives the program control over the 18527db96d56Sopenharmony_ci blocking behavior of the socket I/O involved in the handshake. 18537db96d56Sopenharmony_ci 18547db96d56Sopenharmony_ci The parameter ``suppress_ragged_eofs`` specifies how the 18557db96d56Sopenharmony_ci :meth:`SSLSocket.recv` method should signal unexpected EOF from the other end 18567db96d56Sopenharmony_ci of the connection. If specified as :const:`True` (the default), it returns a 18577db96d56Sopenharmony_ci normal EOF (an empty bytes object) in response to unexpected EOF errors 18587db96d56Sopenharmony_ci raised from the underlying socket; if :const:`False`, it will raise the 18597db96d56Sopenharmony_ci exceptions back to the caller. 18607db96d56Sopenharmony_ci 18617db96d56Sopenharmony_ci *session*, see :attr:`~SSLSocket.session`. 18627db96d56Sopenharmony_ci 18637db96d56Sopenharmony_ci .. versionchanged:: 3.5 18647db96d56Sopenharmony_ci Always allow a server_hostname to be passed, even if OpenSSL does not 18657db96d56Sopenharmony_ci have SNI. 18667db96d56Sopenharmony_ci 18677db96d56Sopenharmony_ci .. versionchanged:: 3.6 18687db96d56Sopenharmony_ci *session* argument was added. 18697db96d56Sopenharmony_ci 18707db96d56Sopenharmony_ci .. versionchanged:: 3.7 18717db96d56Sopenharmony_ci The method returns an instance of :attr:`SSLContext.sslsocket_class` 18727db96d56Sopenharmony_ci instead of hard-coded :class:`SSLSocket`. 18737db96d56Sopenharmony_ci 18747db96d56Sopenharmony_ci.. attribute:: SSLContext.sslsocket_class 18757db96d56Sopenharmony_ci 18767db96d56Sopenharmony_ci The return type of :meth:`SSLContext.wrap_socket`, defaults to 18777db96d56Sopenharmony_ci :class:`SSLSocket`. The attribute can be overridden on instance of class 18787db96d56Sopenharmony_ci in order to return a custom subclass of :class:`SSLSocket`. 18797db96d56Sopenharmony_ci 18807db96d56Sopenharmony_ci .. versionadded:: 3.7 18817db96d56Sopenharmony_ci 18827db96d56Sopenharmony_ci.. method:: SSLContext.wrap_bio(incoming, outgoing, server_side=False, \ 18837db96d56Sopenharmony_ci server_hostname=None, session=None) 18847db96d56Sopenharmony_ci 18857db96d56Sopenharmony_ci Wrap the BIO objects *incoming* and *outgoing* and return an instance of 18867db96d56Sopenharmony_ci :attr:`SSLContext.sslobject_class` (default :class:`SSLObject`). The SSL 18877db96d56Sopenharmony_ci routines will read input data from the incoming BIO and write data to the 18887db96d56Sopenharmony_ci outgoing BIO. 18897db96d56Sopenharmony_ci 18907db96d56Sopenharmony_ci The *server_side*, *server_hostname* and *session* parameters have the 18917db96d56Sopenharmony_ci same meaning as in :meth:`SSLContext.wrap_socket`. 18927db96d56Sopenharmony_ci 18937db96d56Sopenharmony_ci .. versionchanged:: 3.6 18947db96d56Sopenharmony_ci *session* argument was added. 18957db96d56Sopenharmony_ci 18967db96d56Sopenharmony_ci .. versionchanged:: 3.7 18977db96d56Sopenharmony_ci The method returns an instance of :attr:`SSLContext.sslobject_class` 18987db96d56Sopenharmony_ci instead of hard-coded :class:`SSLObject`. 18997db96d56Sopenharmony_ci 19007db96d56Sopenharmony_ci.. attribute:: SSLContext.sslobject_class 19017db96d56Sopenharmony_ci 19027db96d56Sopenharmony_ci The return type of :meth:`SSLContext.wrap_bio`, defaults to 19037db96d56Sopenharmony_ci :class:`SSLObject`. The attribute can be overridden on instance of class 19047db96d56Sopenharmony_ci in order to return a custom subclass of :class:`SSLObject`. 19057db96d56Sopenharmony_ci 19067db96d56Sopenharmony_ci .. versionadded:: 3.7 19077db96d56Sopenharmony_ci 19087db96d56Sopenharmony_ci.. method:: SSLContext.session_stats() 19097db96d56Sopenharmony_ci 19107db96d56Sopenharmony_ci Get statistics about the SSL sessions created or managed by this context. 19117db96d56Sopenharmony_ci A dictionary is returned which maps the names of each `piece of information <https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_sess_number.html>`_ to their 19127db96d56Sopenharmony_ci numeric values. For example, here is the total number of hits and misses 19137db96d56Sopenharmony_ci in the session cache since the context was created:: 19147db96d56Sopenharmony_ci 19157db96d56Sopenharmony_ci >>> stats = context.session_stats() 19167db96d56Sopenharmony_ci >>> stats['hits'], stats['misses'] 19177db96d56Sopenharmony_ci (0, 0) 19187db96d56Sopenharmony_ci 19197db96d56Sopenharmony_ci.. attribute:: SSLContext.check_hostname 19207db96d56Sopenharmony_ci 19217db96d56Sopenharmony_ci Whether to match the peer cert's hostname in 19227db96d56Sopenharmony_ci :meth:`SSLSocket.do_handshake`. The context's 19237db96d56Sopenharmony_ci :attr:`~SSLContext.verify_mode` must be set to :data:`CERT_OPTIONAL` or 19247db96d56Sopenharmony_ci :data:`CERT_REQUIRED`, and you must pass *server_hostname* to 19257db96d56Sopenharmony_ci :meth:`~SSLContext.wrap_socket` in order to match the hostname. Enabling 19267db96d56Sopenharmony_ci hostname checking automatically sets :attr:`~SSLContext.verify_mode` from 19277db96d56Sopenharmony_ci :data:`CERT_NONE` to :data:`CERT_REQUIRED`. It cannot be set back to 19287db96d56Sopenharmony_ci :data:`CERT_NONE` as long as hostname checking is enabled. The 19297db96d56Sopenharmony_ci :data:`PROTOCOL_TLS_CLIENT` protocol enables hostname checking by default. 19307db96d56Sopenharmony_ci With other protocols, hostname checking must be enabled explicitly. 19317db96d56Sopenharmony_ci 19327db96d56Sopenharmony_ci Example:: 19337db96d56Sopenharmony_ci 19347db96d56Sopenharmony_ci import socket, ssl 19357db96d56Sopenharmony_ci 19367db96d56Sopenharmony_ci context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) 19377db96d56Sopenharmony_ci context.verify_mode = ssl.CERT_REQUIRED 19387db96d56Sopenharmony_ci context.check_hostname = True 19397db96d56Sopenharmony_ci context.load_default_certs() 19407db96d56Sopenharmony_ci 19417db96d56Sopenharmony_ci s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 19427db96d56Sopenharmony_ci ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com') 19437db96d56Sopenharmony_ci ssl_sock.connect(('www.verisign.com', 443)) 19447db96d56Sopenharmony_ci 19457db96d56Sopenharmony_ci .. versionadded:: 3.4 19467db96d56Sopenharmony_ci 19477db96d56Sopenharmony_ci .. versionchanged:: 3.7 19487db96d56Sopenharmony_ci 19497db96d56Sopenharmony_ci :attr:`~SSLContext.verify_mode` is now automatically changed 19507db96d56Sopenharmony_ci to :data:`CERT_REQUIRED` when hostname checking is enabled and 19517db96d56Sopenharmony_ci :attr:`~SSLContext.verify_mode` is :data:`CERT_NONE`. Previously 19527db96d56Sopenharmony_ci the same operation would have failed with a :exc:`ValueError`. 19537db96d56Sopenharmony_ci 19547db96d56Sopenharmony_ci.. attribute:: SSLContext.keylog_filename 19557db96d56Sopenharmony_ci 19567db96d56Sopenharmony_ci Write TLS keys to a keylog file, whenever key material is generated or 19577db96d56Sopenharmony_ci received. The keylog file is designed for debugging purposes only. The 19587db96d56Sopenharmony_ci file format is specified by NSS and used by many traffic analyzers such 19597db96d56Sopenharmony_ci as Wireshark. The log file is opened in append-only mode. Writes are 19607db96d56Sopenharmony_ci synchronized between threads, but not between processes. 19617db96d56Sopenharmony_ci 19627db96d56Sopenharmony_ci .. versionadded:: 3.8 19637db96d56Sopenharmony_ci 19647db96d56Sopenharmony_ci.. attribute:: SSLContext.maximum_version 19657db96d56Sopenharmony_ci 19667db96d56Sopenharmony_ci A :class:`TLSVersion` enum member representing the highest supported 19677db96d56Sopenharmony_ci TLS version. The value defaults to :attr:`TLSVersion.MAXIMUM_SUPPORTED`. 19687db96d56Sopenharmony_ci The attribute is read-only for protocols other than :attr:`PROTOCOL_TLS`, 19697db96d56Sopenharmony_ci :attr:`PROTOCOL_TLS_CLIENT`, and :attr:`PROTOCOL_TLS_SERVER`. 19707db96d56Sopenharmony_ci 19717db96d56Sopenharmony_ci The attributes :attr:`~SSLContext.maximum_version`, 19727db96d56Sopenharmony_ci :attr:`~SSLContext.minimum_version` and 19737db96d56Sopenharmony_ci :attr:`SSLContext.options` all affect the supported SSL 19747db96d56Sopenharmony_ci and TLS versions of the context. The implementation does not prevent 19757db96d56Sopenharmony_ci invalid combination. For example a context with 19767db96d56Sopenharmony_ci :attr:`OP_NO_TLSv1_2` in :attr:`~SSLContext.options` and 19777db96d56Sopenharmony_ci :attr:`~SSLContext.maximum_version` set to :attr:`TLSVersion.TLSv1_2` 19787db96d56Sopenharmony_ci will not be able to establish a TLS 1.2 connection. 19797db96d56Sopenharmony_ci 19807db96d56Sopenharmony_ci .. versionadded:: 3.7 19817db96d56Sopenharmony_ci 19827db96d56Sopenharmony_ci.. attribute:: SSLContext.minimum_version 19837db96d56Sopenharmony_ci 19847db96d56Sopenharmony_ci Like :attr:`SSLContext.maximum_version` except it is the lowest 19857db96d56Sopenharmony_ci supported version or :attr:`TLSVersion.MINIMUM_SUPPORTED`. 19867db96d56Sopenharmony_ci 19877db96d56Sopenharmony_ci .. versionadded:: 3.7 19887db96d56Sopenharmony_ci 19897db96d56Sopenharmony_ci.. attribute:: SSLContext.num_tickets 19907db96d56Sopenharmony_ci 19917db96d56Sopenharmony_ci Control the number of TLS 1.3 session tickets of a 19927db96d56Sopenharmony_ci :attr:`PROTOCOL_TLS_SERVER` context. The setting has no impact on TLS 19937db96d56Sopenharmony_ci 1.0 to 1.2 connections. 19947db96d56Sopenharmony_ci 19957db96d56Sopenharmony_ci .. versionadded:: 3.8 19967db96d56Sopenharmony_ci 19977db96d56Sopenharmony_ci.. attribute:: SSLContext.options 19987db96d56Sopenharmony_ci 19997db96d56Sopenharmony_ci An integer representing the set of SSL options enabled on this context. 20007db96d56Sopenharmony_ci The default value is :data:`OP_ALL`, but you can specify other options 20017db96d56Sopenharmony_ci such as :data:`OP_NO_SSLv2` by ORing them together. 20027db96d56Sopenharmony_ci 20037db96d56Sopenharmony_ci .. versionchanged:: 3.6 20047db96d56Sopenharmony_ci :attr:`SSLContext.options` returns :class:`Options` flags: 20057db96d56Sopenharmony_ci 20067db96d56Sopenharmony_ci >>> ssl.create_default_context().options # doctest: +SKIP 20077db96d56Sopenharmony_ci <Options.OP_ALL|OP_NO_SSLv3|OP_NO_SSLv2|OP_NO_COMPRESSION: 2197947391> 20087db96d56Sopenharmony_ci 20097db96d56Sopenharmony_ci .. deprecated:: 3.7 20107db96d56Sopenharmony_ci 20117db96d56Sopenharmony_ci All ``OP_NO_SSL*`` and ``OP_NO_TLS*`` options have been deprecated since 20127db96d56Sopenharmony_ci Python 3.7. Use :attr:`SSLContext.minimum_version` and 20137db96d56Sopenharmony_ci :attr:`SSLContext.maximum_version` instead. 20147db96d56Sopenharmony_ci 20157db96d56Sopenharmony_ci.. attribute:: SSLContext.post_handshake_auth 20167db96d56Sopenharmony_ci 20177db96d56Sopenharmony_ci Enable TLS 1.3 post-handshake client authentication. Post-handshake auth 20187db96d56Sopenharmony_ci is disabled by default and a server can only request a TLS client 20197db96d56Sopenharmony_ci certificate during the initial handshake. When enabled, a server may 20207db96d56Sopenharmony_ci request a TLS client certificate at any time after the handshake. 20217db96d56Sopenharmony_ci 20227db96d56Sopenharmony_ci When enabled on client-side sockets, the client signals the server that 20237db96d56Sopenharmony_ci it supports post-handshake authentication. 20247db96d56Sopenharmony_ci 20257db96d56Sopenharmony_ci When enabled on server-side sockets, :attr:`SSLContext.verify_mode` must 20267db96d56Sopenharmony_ci be set to :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`, too. The 20277db96d56Sopenharmony_ci actual client cert exchange is delayed until 20287db96d56Sopenharmony_ci :meth:`SSLSocket.verify_client_post_handshake` is called and some I/O is 20297db96d56Sopenharmony_ci performed. 20307db96d56Sopenharmony_ci 20317db96d56Sopenharmony_ci .. versionadded:: 3.8 20327db96d56Sopenharmony_ci 20337db96d56Sopenharmony_ci.. attribute:: SSLContext.protocol 20347db96d56Sopenharmony_ci 20357db96d56Sopenharmony_ci The protocol version chosen when constructing the context. This attribute 20367db96d56Sopenharmony_ci is read-only. 20377db96d56Sopenharmony_ci 20387db96d56Sopenharmony_ci.. attribute:: SSLContext.hostname_checks_common_name 20397db96d56Sopenharmony_ci 20407db96d56Sopenharmony_ci Whether :attr:`~SSLContext.check_hostname` falls back to verify the cert's 20417db96d56Sopenharmony_ci subject common name in the absence of a subject alternative name 20427db96d56Sopenharmony_ci extension (default: true). 20437db96d56Sopenharmony_ci 20447db96d56Sopenharmony_ci .. versionadded:: 3.7 20457db96d56Sopenharmony_ci 20467db96d56Sopenharmony_ci .. versionchanged:: 3.10 20477db96d56Sopenharmony_ci 20487db96d56Sopenharmony_ci The flag had no effect with OpenSSL before version 1.1.1k. Python 3.8.9, 20497db96d56Sopenharmony_ci 3.9.3, and 3.10 include workarounds for previous versions. 20507db96d56Sopenharmony_ci 20517db96d56Sopenharmony_ci.. attribute:: SSLContext.security_level 20527db96d56Sopenharmony_ci 20537db96d56Sopenharmony_ci An integer representing the `security level 20547db96d56Sopenharmony_ci <https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_security_level.html>`_ 20557db96d56Sopenharmony_ci for the context. This attribute is read-only. 20567db96d56Sopenharmony_ci 20577db96d56Sopenharmony_ci .. versionadded:: 3.10 20587db96d56Sopenharmony_ci 20597db96d56Sopenharmony_ci.. attribute:: SSLContext.verify_flags 20607db96d56Sopenharmony_ci 20617db96d56Sopenharmony_ci The flags for certificate verification operations. You can set flags like 20627db96d56Sopenharmony_ci :data:`VERIFY_CRL_CHECK_LEAF` by ORing them together. By default OpenSSL 20637db96d56Sopenharmony_ci does neither require nor verify certificate revocation lists (CRLs). 20647db96d56Sopenharmony_ci 20657db96d56Sopenharmony_ci .. versionadded:: 3.4 20667db96d56Sopenharmony_ci 20677db96d56Sopenharmony_ci .. versionchanged:: 3.6 20687db96d56Sopenharmony_ci :attr:`SSLContext.verify_flags` returns :class:`VerifyFlags` flags: 20697db96d56Sopenharmony_ci 20707db96d56Sopenharmony_ci >>> ssl.create_default_context().verify_flags # doctest: +SKIP 20717db96d56Sopenharmony_ci <VerifyFlags.VERIFY_X509_TRUSTED_FIRST: 32768> 20727db96d56Sopenharmony_ci 20737db96d56Sopenharmony_ci.. attribute:: SSLContext.verify_mode 20747db96d56Sopenharmony_ci 20757db96d56Sopenharmony_ci Whether to try to verify other peers' certificates and how to behave 20767db96d56Sopenharmony_ci if verification fails. This attribute must be one of 20777db96d56Sopenharmony_ci :data:`CERT_NONE`, :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`. 20787db96d56Sopenharmony_ci 20797db96d56Sopenharmony_ci .. versionchanged:: 3.6 20807db96d56Sopenharmony_ci :attr:`SSLContext.verify_mode` returns :class:`VerifyMode` enum: 20817db96d56Sopenharmony_ci 20827db96d56Sopenharmony_ci >>> ssl.create_default_context().verify_mode # doctest: +SKIP 20837db96d56Sopenharmony_ci <VerifyMode.CERT_REQUIRED: 2> 20847db96d56Sopenharmony_ci 20857db96d56Sopenharmony_ci.. index:: single: certificates 20867db96d56Sopenharmony_ci 20877db96d56Sopenharmony_ci.. index:: single: X509 certificate 20887db96d56Sopenharmony_ci 20897db96d56Sopenharmony_ci.. _ssl-certificates: 20907db96d56Sopenharmony_ci 20917db96d56Sopenharmony_ciCertificates 20927db96d56Sopenharmony_ci------------ 20937db96d56Sopenharmony_ci 20947db96d56Sopenharmony_ciCertificates in general are part of a public-key / private-key system. In this 20957db96d56Sopenharmony_cisystem, each *principal*, (which may be a machine, or a person, or an 20967db96d56Sopenharmony_ciorganization) is assigned a unique two-part encryption key. One part of the key 20977db96d56Sopenharmony_ciis public, and is called the *public key*; the other part is kept secret, and is 20987db96d56Sopenharmony_cicalled the *private key*. The two parts are related, in that if you encrypt a 20997db96d56Sopenharmony_cimessage with one of the parts, you can decrypt it with the other part, and 21007db96d56Sopenharmony_ci**only** with the other part. 21017db96d56Sopenharmony_ci 21027db96d56Sopenharmony_ciA certificate contains information about two principals. It contains the name 21037db96d56Sopenharmony_ciof a *subject*, and the subject's public key. It also contains a statement by a 21047db96d56Sopenharmony_cisecond principal, the *issuer*, that the subject is who they claim to be, and 21057db96d56Sopenharmony_cithat this is indeed the subject's public key. The issuer's statement is signed 21067db96d56Sopenharmony_ciwith the issuer's private key, which only the issuer knows. However, anyone can 21077db96d56Sopenharmony_civerify the issuer's statement by finding the issuer's public key, decrypting the 21087db96d56Sopenharmony_cistatement with it, and comparing it to the other information in the certificate. 21097db96d56Sopenharmony_ciThe certificate also contains information about the time period over which it is 21107db96d56Sopenharmony_civalid. This is expressed as two fields, called "notBefore" and "notAfter". 21117db96d56Sopenharmony_ci 21127db96d56Sopenharmony_ciIn the Python use of certificates, a client or server can use a certificate to 21137db96d56Sopenharmony_ciprove who they are. The other side of a network connection can also be required 21147db96d56Sopenharmony_cito produce a certificate, and that certificate can be validated to the 21157db96d56Sopenharmony_cisatisfaction of the client or server that requires such validation. The 21167db96d56Sopenharmony_ciconnection attempt can be set to raise an exception if the validation fails. 21177db96d56Sopenharmony_ciValidation is done automatically, by the underlying OpenSSL framework; the 21187db96d56Sopenharmony_ciapplication need not concern itself with its mechanics. But the application 21197db96d56Sopenharmony_cidoes usually need to provide sets of certificates to allow this process to take 21207db96d56Sopenharmony_ciplace. 21217db96d56Sopenharmony_ci 21227db96d56Sopenharmony_ciPython uses files to contain certificates. They should be formatted as "PEM" 21237db96d56Sopenharmony_ci(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line 21247db96d56Sopenharmony_ciand a footer line:: 21257db96d56Sopenharmony_ci 21267db96d56Sopenharmony_ci -----BEGIN CERTIFICATE----- 21277db96d56Sopenharmony_ci ... (certificate in base64 PEM encoding) ... 21287db96d56Sopenharmony_ci -----END CERTIFICATE----- 21297db96d56Sopenharmony_ci 21307db96d56Sopenharmony_ciCertificate chains 21317db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^ 21327db96d56Sopenharmony_ci 21337db96d56Sopenharmony_ciThe Python files which contain certificates can contain a sequence of 21347db96d56Sopenharmony_cicertificates, sometimes called a *certificate chain*. This chain should start 21357db96d56Sopenharmony_ciwith the specific certificate for the principal who "is" the client or server, 21367db96d56Sopenharmony_ciand then the certificate for the issuer of that certificate, and then the 21377db96d56Sopenharmony_cicertificate for the issuer of *that* certificate, and so on up the chain till 21387db96d56Sopenharmony_ciyou get to a certificate which is *self-signed*, that is, a certificate which 21397db96d56Sopenharmony_cihas the same subject and issuer, sometimes called a *root certificate*. The 21407db96d56Sopenharmony_cicertificates should just be concatenated together in the certificate file. For 21417db96d56Sopenharmony_ciexample, suppose we had a three certificate chain, from our server certificate 21427db96d56Sopenharmony_cito the certificate of the certification authority that signed our server 21437db96d56Sopenharmony_cicertificate, to the root certificate of the agency which issued the 21447db96d56Sopenharmony_cicertification authority's certificate:: 21457db96d56Sopenharmony_ci 21467db96d56Sopenharmony_ci -----BEGIN CERTIFICATE----- 21477db96d56Sopenharmony_ci ... (certificate for your server)... 21487db96d56Sopenharmony_ci -----END CERTIFICATE----- 21497db96d56Sopenharmony_ci -----BEGIN CERTIFICATE----- 21507db96d56Sopenharmony_ci ... (the certificate for the CA)... 21517db96d56Sopenharmony_ci -----END CERTIFICATE----- 21527db96d56Sopenharmony_ci -----BEGIN CERTIFICATE----- 21537db96d56Sopenharmony_ci ... (the root certificate for the CA's issuer)... 21547db96d56Sopenharmony_ci -----END CERTIFICATE----- 21557db96d56Sopenharmony_ci 21567db96d56Sopenharmony_ciCA certificates 21577db96d56Sopenharmony_ci^^^^^^^^^^^^^^^ 21587db96d56Sopenharmony_ci 21597db96d56Sopenharmony_ciIf you are going to require validation of the other side of the connection's 21607db96d56Sopenharmony_cicertificate, you need to provide a "CA certs" file, filled with the certificate 21617db96d56Sopenharmony_cichains for each issuer you are willing to trust. Again, this file just contains 21627db96d56Sopenharmony_cithese chains concatenated together. For validation, Python will use the first 21637db96d56Sopenharmony_cichain it finds in the file which matches. The platform's certificates file can 21647db96d56Sopenharmony_cibe used by calling :meth:`SSLContext.load_default_certs`, this is done 21657db96d56Sopenharmony_ciautomatically with :func:`.create_default_context`. 21667db96d56Sopenharmony_ci 21677db96d56Sopenharmony_ciCombined key and certificate 21687db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 21697db96d56Sopenharmony_ci 21707db96d56Sopenharmony_ciOften the private key is stored in the same file as the certificate; in this 21717db96d56Sopenharmony_cicase, only the ``certfile`` parameter to :meth:`SSLContext.load_cert_chain` 21727db96d56Sopenharmony_ciand :func:`wrap_socket` needs to be passed. If the private key is stored 21737db96d56Sopenharmony_ciwith the certificate, it should come before the first certificate in 21747db96d56Sopenharmony_cithe certificate chain:: 21757db96d56Sopenharmony_ci 21767db96d56Sopenharmony_ci -----BEGIN RSA PRIVATE KEY----- 21777db96d56Sopenharmony_ci ... (private key in base64 encoding) ... 21787db96d56Sopenharmony_ci -----END RSA PRIVATE KEY----- 21797db96d56Sopenharmony_ci -----BEGIN CERTIFICATE----- 21807db96d56Sopenharmony_ci ... (certificate in base64 PEM encoding) ... 21817db96d56Sopenharmony_ci -----END CERTIFICATE----- 21827db96d56Sopenharmony_ci 21837db96d56Sopenharmony_ciSelf-signed certificates 21847db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^ 21857db96d56Sopenharmony_ci 21867db96d56Sopenharmony_ciIf you are going to create a server that provides SSL-encrypted connection 21877db96d56Sopenharmony_ciservices, you will need to acquire a certificate for that service. There are 21887db96d56Sopenharmony_cimany ways of acquiring appropriate certificates, such as buying one from a 21897db96d56Sopenharmony_cicertification authority. Another common practice is to generate a self-signed 21907db96d56Sopenharmony_cicertificate. The simplest way to do this is with the OpenSSL package, using 21917db96d56Sopenharmony_cisomething like the following:: 21927db96d56Sopenharmony_ci 21937db96d56Sopenharmony_ci % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem 21947db96d56Sopenharmony_ci Generating a 1024 bit RSA private key 21957db96d56Sopenharmony_ci .......++++++ 21967db96d56Sopenharmony_ci .............................++++++ 21977db96d56Sopenharmony_ci writing new private key to 'cert.pem' 21987db96d56Sopenharmony_ci ----- 21997db96d56Sopenharmony_ci You are about to be asked to enter information that will be incorporated 22007db96d56Sopenharmony_ci into your certificate request. 22017db96d56Sopenharmony_ci What you are about to enter is what is called a Distinguished Name or a DN. 22027db96d56Sopenharmony_ci There are quite a few fields but you can leave some blank 22037db96d56Sopenharmony_ci For some fields there will be a default value, 22047db96d56Sopenharmony_ci If you enter '.', the field will be left blank. 22057db96d56Sopenharmony_ci ----- 22067db96d56Sopenharmony_ci Country Name (2 letter code) [AU]:US 22077db96d56Sopenharmony_ci State or Province Name (full name) [Some-State]:MyState 22087db96d56Sopenharmony_ci Locality Name (eg, city) []:Some City 22097db96d56Sopenharmony_ci Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc. 22107db96d56Sopenharmony_ci Organizational Unit Name (eg, section) []:My Group 22117db96d56Sopenharmony_ci Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com 22127db96d56Sopenharmony_ci Email Address []:ops@myserver.mygroup.myorganization.com 22137db96d56Sopenharmony_ci % 22147db96d56Sopenharmony_ci 22157db96d56Sopenharmony_ciThe disadvantage of a self-signed certificate is that it is its own root 22167db96d56Sopenharmony_cicertificate, and no one else will have it in their cache of known (and trusted) 22177db96d56Sopenharmony_ciroot certificates. 22187db96d56Sopenharmony_ci 22197db96d56Sopenharmony_ci 22207db96d56Sopenharmony_ciExamples 22217db96d56Sopenharmony_ci-------- 22227db96d56Sopenharmony_ci 22237db96d56Sopenharmony_ciTesting for SSL support 22247db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^ 22257db96d56Sopenharmony_ci 22267db96d56Sopenharmony_ciTo test for the presence of SSL support in a Python installation, user code 22277db96d56Sopenharmony_cishould use the following idiom:: 22287db96d56Sopenharmony_ci 22297db96d56Sopenharmony_ci try: 22307db96d56Sopenharmony_ci import ssl 22317db96d56Sopenharmony_ci except ImportError: 22327db96d56Sopenharmony_ci pass 22337db96d56Sopenharmony_ci else: 22347db96d56Sopenharmony_ci ... # do something that requires SSL support 22357db96d56Sopenharmony_ci 22367db96d56Sopenharmony_ciClient-side operation 22377db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^ 22387db96d56Sopenharmony_ci 22397db96d56Sopenharmony_ciThis example creates a SSL context with the recommended security settings 22407db96d56Sopenharmony_cifor client sockets, including automatic certificate verification:: 22417db96d56Sopenharmony_ci 22427db96d56Sopenharmony_ci >>> context = ssl.create_default_context() 22437db96d56Sopenharmony_ci 22447db96d56Sopenharmony_ciIf you prefer to tune security settings yourself, you might create 22457db96d56Sopenharmony_cia context from scratch (but beware that you might not get the settings 22467db96d56Sopenharmony_ciright):: 22477db96d56Sopenharmony_ci 22487db96d56Sopenharmony_ci >>> context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) 22497db96d56Sopenharmony_ci >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt") 22507db96d56Sopenharmony_ci 22517db96d56Sopenharmony_ci(this snippet assumes your operating system places a bundle of all CA 22527db96d56Sopenharmony_cicertificates in ``/etc/ssl/certs/ca-bundle.crt``; if not, you'll get an 22537db96d56Sopenharmony_cierror and have to adjust the location) 22547db96d56Sopenharmony_ci 22557db96d56Sopenharmony_ciThe :data:`PROTOCOL_TLS_CLIENT` protocol configures the context for cert 22567db96d56Sopenharmony_civalidation and hostname verification. :attr:`~SSLContext.verify_mode` is 22577db96d56Sopenharmony_ciset to :data:`CERT_REQUIRED` and :attr:`~SSLContext.check_hostname` is set 22587db96d56Sopenharmony_cito ``True``. All other protocols create SSL contexts with insecure defaults. 22597db96d56Sopenharmony_ci 22607db96d56Sopenharmony_ciWhen you use the context to connect to a server, :const:`CERT_REQUIRED` 22617db96d56Sopenharmony_ciand :attr:`~SSLContext.check_hostname` validate the server certificate: it 22627db96d56Sopenharmony_ciensures that the server certificate was signed with one of the CA 22637db96d56Sopenharmony_cicertificates, checks the signature for correctness, and verifies other 22647db96d56Sopenharmony_ciproperties like validity and identity of the hostname:: 22657db96d56Sopenharmony_ci 22667db96d56Sopenharmony_ci >>> conn = context.wrap_socket(socket.socket(socket.AF_INET), 22677db96d56Sopenharmony_ci ... server_hostname="www.python.org") 22687db96d56Sopenharmony_ci >>> conn.connect(("www.python.org", 443)) 22697db96d56Sopenharmony_ci 22707db96d56Sopenharmony_ciYou may then fetch the certificate:: 22717db96d56Sopenharmony_ci 22727db96d56Sopenharmony_ci >>> cert = conn.getpeercert() 22737db96d56Sopenharmony_ci 22747db96d56Sopenharmony_ciVisual inspection shows that the certificate does identify the desired service 22757db96d56Sopenharmony_ci(that is, the HTTPS host ``www.python.org``):: 22767db96d56Sopenharmony_ci 22777db96d56Sopenharmony_ci >>> pprint.pprint(cert) 22787db96d56Sopenharmony_ci {'OCSP': ('http://ocsp.digicert.com',), 22797db96d56Sopenharmony_ci 'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',), 22807db96d56Sopenharmony_ci 'crlDistributionPoints': ('http://crl3.digicert.com/sha2-ev-server-g1.crl', 22817db96d56Sopenharmony_ci 'http://crl4.digicert.com/sha2-ev-server-g1.crl'), 22827db96d56Sopenharmony_ci 'issuer': ((('countryName', 'US'),), 22837db96d56Sopenharmony_ci (('organizationName', 'DigiCert Inc'),), 22847db96d56Sopenharmony_ci (('organizationalUnitName', 'www.digicert.com'),), 22857db96d56Sopenharmony_ci (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),)), 22867db96d56Sopenharmony_ci 'notAfter': 'Sep 9 12:00:00 2016 GMT', 22877db96d56Sopenharmony_ci 'notBefore': 'Sep 5 00:00:00 2014 GMT', 22887db96d56Sopenharmony_ci 'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26', 22897db96d56Sopenharmony_ci 'subject': ((('businessCategory', 'Private Organization'),), 22907db96d56Sopenharmony_ci (('1.3.6.1.4.1.311.60.2.1.3', 'US'),), 22917db96d56Sopenharmony_ci (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),), 22927db96d56Sopenharmony_ci (('serialNumber', '3359300'),), 22937db96d56Sopenharmony_ci (('streetAddress', '16 Allen Rd'),), 22947db96d56Sopenharmony_ci (('postalCode', '03894-4801'),), 22957db96d56Sopenharmony_ci (('countryName', 'US'),), 22967db96d56Sopenharmony_ci (('stateOrProvinceName', 'NH'),), 22977db96d56Sopenharmony_ci (('localityName', 'Wolfeboro'),), 22987db96d56Sopenharmony_ci (('organizationName', 'Python Software Foundation'),), 22997db96d56Sopenharmony_ci (('commonName', 'www.python.org'),)), 23007db96d56Sopenharmony_ci 'subjectAltName': (('DNS', 'www.python.org'), 23017db96d56Sopenharmony_ci ('DNS', 'python.org'), 23027db96d56Sopenharmony_ci ('DNS', 'pypi.org'), 23037db96d56Sopenharmony_ci ('DNS', 'docs.python.org'), 23047db96d56Sopenharmony_ci ('DNS', 'testpypi.org'), 23057db96d56Sopenharmony_ci ('DNS', 'bugs.python.org'), 23067db96d56Sopenharmony_ci ('DNS', 'wiki.python.org'), 23077db96d56Sopenharmony_ci ('DNS', 'hg.python.org'), 23087db96d56Sopenharmony_ci ('DNS', 'mail.python.org'), 23097db96d56Sopenharmony_ci ('DNS', 'packaging.python.org'), 23107db96d56Sopenharmony_ci ('DNS', 'pythonhosted.org'), 23117db96d56Sopenharmony_ci ('DNS', 'www.pythonhosted.org'), 23127db96d56Sopenharmony_ci ('DNS', 'test.pythonhosted.org'), 23137db96d56Sopenharmony_ci ('DNS', 'us.pycon.org'), 23147db96d56Sopenharmony_ci ('DNS', 'id.python.org')), 23157db96d56Sopenharmony_ci 'version': 3} 23167db96d56Sopenharmony_ci 23177db96d56Sopenharmony_ciNow the SSL channel is established and the certificate verified, you can 23187db96d56Sopenharmony_ciproceed to talk with the server:: 23197db96d56Sopenharmony_ci 23207db96d56Sopenharmony_ci >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n") 23217db96d56Sopenharmony_ci >>> pprint.pprint(conn.recv(1024).split(b"\r\n")) 23227db96d56Sopenharmony_ci [b'HTTP/1.1 200 OK', 23237db96d56Sopenharmony_ci b'Date: Sat, 18 Oct 2014 18:27:20 GMT', 23247db96d56Sopenharmony_ci b'Server: nginx', 23257db96d56Sopenharmony_ci b'Content-Type: text/html; charset=utf-8', 23267db96d56Sopenharmony_ci b'X-Frame-Options: SAMEORIGIN', 23277db96d56Sopenharmony_ci b'Content-Length: 45679', 23287db96d56Sopenharmony_ci b'Accept-Ranges: bytes', 23297db96d56Sopenharmony_ci b'Via: 1.1 varnish', 23307db96d56Sopenharmony_ci b'Age: 2188', 23317db96d56Sopenharmony_ci b'X-Served-By: cache-lcy1134-LCY', 23327db96d56Sopenharmony_ci b'X-Cache: HIT', 23337db96d56Sopenharmony_ci b'X-Cache-Hits: 11', 23347db96d56Sopenharmony_ci b'Vary: Cookie', 23357db96d56Sopenharmony_ci b'Strict-Transport-Security: max-age=63072000; includeSubDomains', 23367db96d56Sopenharmony_ci b'Connection: close', 23377db96d56Sopenharmony_ci b'', 23387db96d56Sopenharmony_ci b''] 23397db96d56Sopenharmony_ci 23407db96d56Sopenharmony_ciSee the discussion of :ref:`ssl-security` below. 23417db96d56Sopenharmony_ci 23427db96d56Sopenharmony_ci 23437db96d56Sopenharmony_ciServer-side operation 23447db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^ 23457db96d56Sopenharmony_ci 23467db96d56Sopenharmony_ciFor server operation, typically you'll need to have a server certificate, and 23477db96d56Sopenharmony_ciprivate key, each in a file. You'll first create a context holding the key 23487db96d56Sopenharmony_ciand the certificate, so that clients can check your authenticity. Then 23497db96d56Sopenharmony_ciyou'll open a socket, bind it to a port, call :meth:`listen` on it, and start 23507db96d56Sopenharmony_ciwaiting for clients to connect:: 23517db96d56Sopenharmony_ci 23527db96d56Sopenharmony_ci import socket, ssl 23537db96d56Sopenharmony_ci 23547db96d56Sopenharmony_ci context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) 23557db96d56Sopenharmony_ci context.load_cert_chain(certfile="mycertfile", keyfile="mykeyfile") 23567db96d56Sopenharmony_ci 23577db96d56Sopenharmony_ci bindsocket = socket.socket() 23587db96d56Sopenharmony_ci bindsocket.bind(('myaddr.example.com', 10023)) 23597db96d56Sopenharmony_ci bindsocket.listen(5) 23607db96d56Sopenharmony_ci 23617db96d56Sopenharmony_ciWhen a client connects, you'll call :meth:`accept` on the socket to get the 23627db96d56Sopenharmony_cinew socket from the other end, and use the context's :meth:`SSLContext.wrap_socket` 23637db96d56Sopenharmony_cimethod to create a server-side SSL socket for the connection:: 23647db96d56Sopenharmony_ci 23657db96d56Sopenharmony_ci while True: 23667db96d56Sopenharmony_ci newsocket, fromaddr = bindsocket.accept() 23677db96d56Sopenharmony_ci connstream = context.wrap_socket(newsocket, server_side=True) 23687db96d56Sopenharmony_ci try: 23697db96d56Sopenharmony_ci deal_with_client(connstream) 23707db96d56Sopenharmony_ci finally: 23717db96d56Sopenharmony_ci connstream.shutdown(socket.SHUT_RDWR) 23727db96d56Sopenharmony_ci connstream.close() 23737db96d56Sopenharmony_ci 23747db96d56Sopenharmony_ciThen you'll read data from the ``connstream`` and do something with it till you 23757db96d56Sopenharmony_ciare finished with the client (or the client is finished with you):: 23767db96d56Sopenharmony_ci 23777db96d56Sopenharmony_ci def deal_with_client(connstream): 23787db96d56Sopenharmony_ci data = connstream.recv(1024) 23797db96d56Sopenharmony_ci # empty data means the client is finished with us 23807db96d56Sopenharmony_ci while data: 23817db96d56Sopenharmony_ci if not do_something(connstream, data): 23827db96d56Sopenharmony_ci # we'll assume do_something returns False 23837db96d56Sopenharmony_ci # when we're finished with client 23847db96d56Sopenharmony_ci break 23857db96d56Sopenharmony_ci data = connstream.recv(1024) 23867db96d56Sopenharmony_ci # finished with client 23877db96d56Sopenharmony_ci 23887db96d56Sopenharmony_ciAnd go back to listening for new client connections (of course, a real server 23897db96d56Sopenharmony_ciwould probably handle each client connection in a separate thread, or put 23907db96d56Sopenharmony_cithe sockets in :ref:`non-blocking mode <ssl-nonblocking>` and use an event loop). 23917db96d56Sopenharmony_ci 23927db96d56Sopenharmony_ci 23937db96d56Sopenharmony_ci.. _ssl-nonblocking: 23947db96d56Sopenharmony_ci 23957db96d56Sopenharmony_ciNotes on non-blocking sockets 23967db96d56Sopenharmony_ci----------------------------- 23977db96d56Sopenharmony_ci 23987db96d56Sopenharmony_ciSSL sockets behave slightly different than regular sockets in 23997db96d56Sopenharmony_cinon-blocking mode. When working with non-blocking sockets, there are 24007db96d56Sopenharmony_cithus several things you need to be aware of: 24017db96d56Sopenharmony_ci 24027db96d56Sopenharmony_ci- Most :class:`SSLSocket` methods will raise either 24037db96d56Sopenharmony_ci :exc:`SSLWantWriteError` or :exc:`SSLWantReadError` instead of 24047db96d56Sopenharmony_ci :exc:`BlockingIOError` if an I/O operation would 24057db96d56Sopenharmony_ci block. :exc:`SSLWantReadError` will be raised if a read operation on 24067db96d56Sopenharmony_ci the underlying socket is necessary, and :exc:`SSLWantWriteError` for 24077db96d56Sopenharmony_ci a write operation on the underlying socket. Note that attempts to 24087db96d56Sopenharmony_ci *write* to an SSL socket may require *reading* from the underlying 24097db96d56Sopenharmony_ci socket first, and attempts to *read* from the SSL socket may require 24107db96d56Sopenharmony_ci a prior *write* to the underlying socket. 24117db96d56Sopenharmony_ci 24127db96d56Sopenharmony_ci .. versionchanged:: 3.5 24137db96d56Sopenharmony_ci 24147db96d56Sopenharmony_ci In earlier Python versions, the :meth:`!SSLSocket.send` method 24157db96d56Sopenharmony_ci returned zero instead of raising :exc:`SSLWantWriteError` or 24167db96d56Sopenharmony_ci :exc:`SSLWantReadError`. 24177db96d56Sopenharmony_ci 24187db96d56Sopenharmony_ci- Calling :func:`~select.select` tells you that the OS-level socket can be 24197db96d56Sopenharmony_ci read from (or written to), but it does not imply that there is sufficient 24207db96d56Sopenharmony_ci data at the upper SSL layer. For example, only part of an SSL frame might 24217db96d56Sopenharmony_ci have arrived. Therefore, you must be ready to handle :meth:`SSLSocket.recv` 24227db96d56Sopenharmony_ci and :meth:`SSLSocket.send` failures, and retry after another call to 24237db96d56Sopenharmony_ci :func:`~select.select`. 24247db96d56Sopenharmony_ci 24257db96d56Sopenharmony_ci- Conversely, since the SSL layer has its own framing, a SSL socket may 24267db96d56Sopenharmony_ci still have data available for reading without :func:`~select.select` 24277db96d56Sopenharmony_ci being aware of it. Therefore, you should first call 24287db96d56Sopenharmony_ci :meth:`SSLSocket.recv` to drain any potentially available data, and then 24297db96d56Sopenharmony_ci only block on a :func:`~select.select` call if still necessary. 24307db96d56Sopenharmony_ci 24317db96d56Sopenharmony_ci (of course, similar provisions apply when using other primitives such as 24327db96d56Sopenharmony_ci :func:`~select.poll`, or those in the :mod:`selectors` module) 24337db96d56Sopenharmony_ci 24347db96d56Sopenharmony_ci- The SSL handshake itself will be non-blocking: the 24357db96d56Sopenharmony_ci :meth:`SSLSocket.do_handshake` method has to be retried until it returns 24367db96d56Sopenharmony_ci successfully. Here is a synopsis using :func:`~select.select` to wait for 24377db96d56Sopenharmony_ci the socket's readiness:: 24387db96d56Sopenharmony_ci 24397db96d56Sopenharmony_ci while True: 24407db96d56Sopenharmony_ci try: 24417db96d56Sopenharmony_ci sock.do_handshake() 24427db96d56Sopenharmony_ci break 24437db96d56Sopenharmony_ci except ssl.SSLWantReadError: 24447db96d56Sopenharmony_ci select.select([sock], [], []) 24457db96d56Sopenharmony_ci except ssl.SSLWantWriteError: 24467db96d56Sopenharmony_ci select.select([], [sock], []) 24477db96d56Sopenharmony_ci 24487db96d56Sopenharmony_ci.. seealso:: 24497db96d56Sopenharmony_ci 24507db96d56Sopenharmony_ci The :mod:`asyncio` module supports :ref:`non-blocking SSL sockets 24517db96d56Sopenharmony_ci <ssl-nonblocking>` and provides a 24527db96d56Sopenharmony_ci higher level API. It polls for events using the :mod:`selectors` module and 24537db96d56Sopenharmony_ci handles :exc:`SSLWantWriteError`, :exc:`SSLWantReadError` and 24547db96d56Sopenharmony_ci :exc:`BlockingIOError` exceptions. It runs the SSL handshake asynchronously 24557db96d56Sopenharmony_ci as well. 24567db96d56Sopenharmony_ci 24577db96d56Sopenharmony_ci 24587db96d56Sopenharmony_ciMemory BIO Support 24597db96d56Sopenharmony_ci------------------ 24607db96d56Sopenharmony_ci 24617db96d56Sopenharmony_ci.. versionadded:: 3.5 24627db96d56Sopenharmony_ci 24637db96d56Sopenharmony_ciEver since the SSL module was introduced in Python 2.6, the :class:`SSLSocket` 24647db96d56Sopenharmony_ciclass has provided two related but distinct areas of functionality: 24657db96d56Sopenharmony_ci 24667db96d56Sopenharmony_ci- SSL protocol handling 24677db96d56Sopenharmony_ci- Network IO 24687db96d56Sopenharmony_ci 24697db96d56Sopenharmony_ciThe network IO API is identical to that provided by :class:`socket.socket`, 24707db96d56Sopenharmony_cifrom which :class:`SSLSocket` also inherits. This allows an SSL socket to be 24717db96d56Sopenharmony_ciused as a drop-in replacement for a regular socket, making it very easy to add 24727db96d56Sopenharmony_ciSSL support to an existing application. 24737db96d56Sopenharmony_ci 24747db96d56Sopenharmony_ciCombining SSL protocol handling and network IO usually works well, but there 24757db96d56Sopenharmony_ciare some cases where it doesn't. An example is async IO frameworks that want to 24767db96d56Sopenharmony_ciuse a different IO multiplexing model than the "select/poll on a file 24777db96d56Sopenharmony_cidescriptor" (readiness based) model that is assumed by :class:`socket.socket` 24787db96d56Sopenharmony_ciand by the internal OpenSSL socket IO routines. This is mostly relevant for 24797db96d56Sopenharmony_ciplatforms like Windows where this model is not efficient. For this purpose, a 24807db96d56Sopenharmony_cireduced scope variant of :class:`SSLSocket` called :class:`SSLObject` is 24817db96d56Sopenharmony_ciprovided. 24827db96d56Sopenharmony_ci 24837db96d56Sopenharmony_ci.. class:: SSLObject 24847db96d56Sopenharmony_ci 24857db96d56Sopenharmony_ci A reduced-scope variant of :class:`SSLSocket` representing an SSL protocol 24867db96d56Sopenharmony_ci instance that does not contain any network IO methods. This class is 24877db96d56Sopenharmony_ci typically used by framework authors that want to implement asynchronous IO 24887db96d56Sopenharmony_ci for SSL through memory buffers. 24897db96d56Sopenharmony_ci 24907db96d56Sopenharmony_ci This class implements an interface on top of a low-level SSL object as 24917db96d56Sopenharmony_ci implemented by OpenSSL. This object captures the state of an SSL connection 24927db96d56Sopenharmony_ci but does not provide any network IO itself. IO needs to be performed through 24937db96d56Sopenharmony_ci separate "BIO" objects which are OpenSSL's IO abstraction layer. 24947db96d56Sopenharmony_ci 24957db96d56Sopenharmony_ci This class has no public constructor. An :class:`SSLObject` instance 24967db96d56Sopenharmony_ci must be created using the :meth:`~SSLContext.wrap_bio` method. This 24977db96d56Sopenharmony_ci method will create the :class:`SSLObject` instance and bind it to a 24987db96d56Sopenharmony_ci pair of BIOs. The *incoming* BIO is used to pass data from Python to the 24997db96d56Sopenharmony_ci SSL protocol instance, while the *outgoing* BIO is used to pass data the 25007db96d56Sopenharmony_ci other way around. 25017db96d56Sopenharmony_ci 25027db96d56Sopenharmony_ci The following methods are available: 25037db96d56Sopenharmony_ci 25047db96d56Sopenharmony_ci - :attr:`~SSLSocket.context` 25057db96d56Sopenharmony_ci - :attr:`~SSLSocket.server_side` 25067db96d56Sopenharmony_ci - :attr:`~SSLSocket.server_hostname` 25077db96d56Sopenharmony_ci - :attr:`~SSLSocket.session` 25087db96d56Sopenharmony_ci - :attr:`~SSLSocket.session_reused` 25097db96d56Sopenharmony_ci - :meth:`~SSLSocket.read` 25107db96d56Sopenharmony_ci - :meth:`~SSLSocket.write` 25117db96d56Sopenharmony_ci - :meth:`~SSLSocket.getpeercert` 25127db96d56Sopenharmony_ci - :meth:`~SSLSocket.selected_alpn_protocol` 25137db96d56Sopenharmony_ci - :meth:`~SSLSocket.selected_npn_protocol` 25147db96d56Sopenharmony_ci - :meth:`~SSLSocket.cipher` 25157db96d56Sopenharmony_ci - :meth:`~SSLSocket.shared_ciphers` 25167db96d56Sopenharmony_ci - :meth:`~SSLSocket.compression` 25177db96d56Sopenharmony_ci - :meth:`~SSLSocket.pending` 25187db96d56Sopenharmony_ci - :meth:`~SSLSocket.do_handshake` 25197db96d56Sopenharmony_ci - :meth:`~SSLSocket.verify_client_post_handshake` 25207db96d56Sopenharmony_ci - :meth:`~SSLSocket.unwrap` 25217db96d56Sopenharmony_ci - :meth:`~SSLSocket.get_channel_binding` 25227db96d56Sopenharmony_ci - :meth:`~SSLSocket.version` 25237db96d56Sopenharmony_ci 25247db96d56Sopenharmony_ci When compared to :class:`SSLSocket`, this object lacks the following 25257db96d56Sopenharmony_ci features: 25267db96d56Sopenharmony_ci 25277db96d56Sopenharmony_ci - Any form of network IO; ``recv()`` and ``send()`` read and write only to 25287db96d56Sopenharmony_ci the underlying :class:`MemoryBIO` buffers. 25297db96d56Sopenharmony_ci 25307db96d56Sopenharmony_ci - There is no *do_handshake_on_connect* machinery. You must always manually 25317db96d56Sopenharmony_ci call :meth:`~SSLSocket.do_handshake` to start the handshake. 25327db96d56Sopenharmony_ci 25337db96d56Sopenharmony_ci - There is no handling of *suppress_ragged_eofs*. All end-of-file conditions 25347db96d56Sopenharmony_ci that are in violation of the protocol are reported via the 25357db96d56Sopenharmony_ci :exc:`SSLEOFError` exception. 25367db96d56Sopenharmony_ci 25377db96d56Sopenharmony_ci - The method :meth:`~SSLSocket.unwrap` call does not return anything, 25387db96d56Sopenharmony_ci unlike for an SSL socket where it returns the underlying socket. 25397db96d56Sopenharmony_ci 25407db96d56Sopenharmony_ci - The *server_name_callback* callback passed to 25417db96d56Sopenharmony_ci :meth:`SSLContext.set_servername_callback` will get an :class:`SSLObject` 25427db96d56Sopenharmony_ci instance instead of a :class:`SSLSocket` instance as its first parameter. 25437db96d56Sopenharmony_ci 25447db96d56Sopenharmony_ci Some notes related to the use of :class:`SSLObject`: 25457db96d56Sopenharmony_ci 25467db96d56Sopenharmony_ci - All IO on an :class:`SSLObject` is :ref:`non-blocking <ssl-nonblocking>`. 25477db96d56Sopenharmony_ci This means that for example :meth:`~SSLSocket.read` will raise an 25487db96d56Sopenharmony_ci :exc:`SSLWantReadError` if it needs more data than the incoming BIO has 25497db96d56Sopenharmony_ci available. 25507db96d56Sopenharmony_ci 25517db96d56Sopenharmony_ci - There is no module-level ``wrap_bio()`` call like there is for 25527db96d56Sopenharmony_ci :meth:`~SSLContext.wrap_socket`. An :class:`SSLObject` is always created 25537db96d56Sopenharmony_ci via an :class:`SSLContext`. 25547db96d56Sopenharmony_ci 25557db96d56Sopenharmony_ci .. versionchanged:: 3.7 25567db96d56Sopenharmony_ci :class:`SSLObject` instances must to created with 25577db96d56Sopenharmony_ci :meth:`~SSLContext.wrap_bio`. In earlier versions, it was possible to 25587db96d56Sopenharmony_ci create instances directly. This was never documented or officially 25597db96d56Sopenharmony_ci supported. 25607db96d56Sopenharmony_ci 25617db96d56Sopenharmony_ciAn SSLObject communicates with the outside world using memory buffers. The 25627db96d56Sopenharmony_ciclass :class:`MemoryBIO` provides a memory buffer that can be used for this 25637db96d56Sopenharmony_cipurpose. It wraps an OpenSSL memory BIO (Basic IO) object: 25647db96d56Sopenharmony_ci 25657db96d56Sopenharmony_ci.. class:: MemoryBIO 25667db96d56Sopenharmony_ci 25677db96d56Sopenharmony_ci A memory buffer that can be used to pass data between Python and an SSL 25687db96d56Sopenharmony_ci protocol instance. 25697db96d56Sopenharmony_ci 25707db96d56Sopenharmony_ci .. attribute:: MemoryBIO.pending 25717db96d56Sopenharmony_ci 25727db96d56Sopenharmony_ci Return the number of bytes currently in the memory buffer. 25737db96d56Sopenharmony_ci 25747db96d56Sopenharmony_ci .. attribute:: MemoryBIO.eof 25757db96d56Sopenharmony_ci 25767db96d56Sopenharmony_ci A boolean indicating whether the memory BIO is current at the end-of-file 25777db96d56Sopenharmony_ci position. 25787db96d56Sopenharmony_ci 25797db96d56Sopenharmony_ci .. method:: MemoryBIO.read(n=-1) 25807db96d56Sopenharmony_ci 25817db96d56Sopenharmony_ci Read up to *n* bytes from the memory buffer. If *n* is not specified or 25827db96d56Sopenharmony_ci negative, all bytes are returned. 25837db96d56Sopenharmony_ci 25847db96d56Sopenharmony_ci .. method:: MemoryBIO.write(buf) 25857db96d56Sopenharmony_ci 25867db96d56Sopenharmony_ci Write the bytes from *buf* to the memory BIO. The *buf* argument must be an 25877db96d56Sopenharmony_ci object supporting the buffer protocol. 25887db96d56Sopenharmony_ci 25897db96d56Sopenharmony_ci The return value is the number of bytes written, which is always equal to 25907db96d56Sopenharmony_ci the length of *buf*. 25917db96d56Sopenharmony_ci 25927db96d56Sopenharmony_ci .. method:: MemoryBIO.write_eof() 25937db96d56Sopenharmony_ci 25947db96d56Sopenharmony_ci Write an EOF marker to the memory BIO. After this method has been called, it 25957db96d56Sopenharmony_ci is illegal to call :meth:`~MemoryBIO.write`. The attribute :attr:`eof` will 25967db96d56Sopenharmony_ci become true after all data currently in the buffer has been read. 25977db96d56Sopenharmony_ci 25987db96d56Sopenharmony_ci 25997db96d56Sopenharmony_ciSSL session 26007db96d56Sopenharmony_ci----------- 26017db96d56Sopenharmony_ci 26027db96d56Sopenharmony_ci.. versionadded:: 3.6 26037db96d56Sopenharmony_ci 26047db96d56Sopenharmony_ci.. class:: SSLSession 26057db96d56Sopenharmony_ci 26067db96d56Sopenharmony_ci Session object used by :attr:`~SSLSocket.session`. 26077db96d56Sopenharmony_ci 26087db96d56Sopenharmony_ci .. attribute:: id 26097db96d56Sopenharmony_ci .. attribute:: time 26107db96d56Sopenharmony_ci .. attribute:: timeout 26117db96d56Sopenharmony_ci .. attribute:: ticket_lifetime_hint 26127db96d56Sopenharmony_ci .. attribute:: has_ticket 26137db96d56Sopenharmony_ci 26147db96d56Sopenharmony_ci 26157db96d56Sopenharmony_ci.. _ssl-security: 26167db96d56Sopenharmony_ci 26177db96d56Sopenharmony_ciSecurity considerations 26187db96d56Sopenharmony_ci----------------------- 26197db96d56Sopenharmony_ci 26207db96d56Sopenharmony_ciBest defaults 26217db96d56Sopenharmony_ci^^^^^^^^^^^^^ 26227db96d56Sopenharmony_ci 26237db96d56Sopenharmony_ciFor **client use**, if you don't have any special requirements for your 26247db96d56Sopenharmony_cisecurity policy, it is highly recommended that you use the 26257db96d56Sopenharmony_ci:func:`create_default_context` function to create your SSL context. 26267db96d56Sopenharmony_ciIt will load the system's trusted CA certificates, enable certificate 26277db96d56Sopenharmony_civalidation and hostname checking, and try to choose reasonably secure 26287db96d56Sopenharmony_ciprotocol and cipher settings. 26297db96d56Sopenharmony_ci 26307db96d56Sopenharmony_ciFor example, here is how you would use the :class:`smtplib.SMTP` class to 26317db96d56Sopenharmony_cicreate a trusted, secure connection to a SMTP server:: 26327db96d56Sopenharmony_ci 26337db96d56Sopenharmony_ci >>> import ssl, smtplib 26347db96d56Sopenharmony_ci >>> smtp = smtplib.SMTP("mail.python.org", port=587) 26357db96d56Sopenharmony_ci >>> context = ssl.create_default_context() 26367db96d56Sopenharmony_ci >>> smtp.starttls(context=context) 26377db96d56Sopenharmony_ci (220, b'2.0.0 Ready to start TLS') 26387db96d56Sopenharmony_ci 26397db96d56Sopenharmony_ciIf a client certificate is needed for the connection, it can be added with 26407db96d56Sopenharmony_ci:meth:`SSLContext.load_cert_chain`. 26417db96d56Sopenharmony_ci 26427db96d56Sopenharmony_ciBy contrast, if you create the SSL context by calling the :class:`SSLContext` 26437db96d56Sopenharmony_ciconstructor yourself, it will not have certificate validation nor hostname 26447db96d56Sopenharmony_cichecking enabled by default. If you do so, please read the paragraphs below 26457db96d56Sopenharmony_cito achieve a good security level. 26467db96d56Sopenharmony_ci 26477db96d56Sopenharmony_ciManual settings 26487db96d56Sopenharmony_ci^^^^^^^^^^^^^^^ 26497db96d56Sopenharmony_ci 26507db96d56Sopenharmony_ciVerifying certificates 26517db96d56Sopenharmony_ci'''''''''''''''''''''' 26527db96d56Sopenharmony_ci 26537db96d56Sopenharmony_ciWhen calling the :class:`SSLContext` constructor directly, 26547db96d56Sopenharmony_ci:const:`CERT_NONE` is the default. Since it does not authenticate the other 26557db96d56Sopenharmony_cipeer, it can be insecure, especially in client mode where most of time you 26567db96d56Sopenharmony_ciwould like to ensure the authenticity of the server you're talking to. 26577db96d56Sopenharmony_ciTherefore, when in client mode, it is highly recommended to use 26587db96d56Sopenharmony_ci:const:`CERT_REQUIRED`. However, it is in itself not sufficient; you also 26597db96d56Sopenharmony_cihave to check that the server certificate, which can be obtained by calling 26607db96d56Sopenharmony_ci:meth:`SSLSocket.getpeercert`, matches the desired service. For many 26617db96d56Sopenharmony_ciprotocols and applications, the service can be identified by the hostname; 26627db96d56Sopenharmony_ciin this case, the :func:`match_hostname` function can be used. This common 26637db96d56Sopenharmony_cicheck is automatically performed when :attr:`SSLContext.check_hostname` is 26647db96d56Sopenharmony_cienabled. 26657db96d56Sopenharmony_ci 26667db96d56Sopenharmony_ci.. versionchanged:: 3.7 26677db96d56Sopenharmony_ci Hostname matchings is now performed by OpenSSL. Python no longer uses 26687db96d56Sopenharmony_ci :func:`match_hostname`. 26697db96d56Sopenharmony_ci 26707db96d56Sopenharmony_ciIn server mode, if you want to authenticate your clients using the SSL layer 26717db96d56Sopenharmony_ci(rather than using a higher-level authentication mechanism), you'll also have 26727db96d56Sopenharmony_cito specify :const:`CERT_REQUIRED` and similarly check the client certificate. 26737db96d56Sopenharmony_ci 26747db96d56Sopenharmony_ci 26757db96d56Sopenharmony_ciProtocol versions 26767db96d56Sopenharmony_ci''''''''''''''''' 26777db96d56Sopenharmony_ci 26787db96d56Sopenharmony_ciSSL versions 2 and 3 are considered insecure and are therefore dangerous to 26797db96d56Sopenharmony_ciuse. If you want maximum compatibility between clients and servers, it is 26807db96d56Sopenharmony_cirecommended to use :const:`PROTOCOL_TLS_CLIENT` or 26817db96d56Sopenharmony_ci:const:`PROTOCOL_TLS_SERVER` as the protocol version. SSLv2 and SSLv3 are 26827db96d56Sopenharmony_cidisabled by default. 26837db96d56Sopenharmony_ci 26847db96d56Sopenharmony_ci:: 26857db96d56Sopenharmony_ci 26867db96d56Sopenharmony_ci >>> client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) 26877db96d56Sopenharmony_ci >>> client_context.minimum_version = ssl.TLSVersion.TLSv1_3 26887db96d56Sopenharmony_ci >>> client_context.maximum_version = ssl.TLSVersion.TLSv1_3 26897db96d56Sopenharmony_ci 26907db96d56Sopenharmony_ci 26917db96d56Sopenharmony_ciThe SSL context created above will only allow TLSv1.2 and later (if 26927db96d56Sopenharmony_cisupported by your system) connections to a server. :const:`PROTOCOL_TLS_CLIENT` 26937db96d56Sopenharmony_ciimplies certificate validation and hostname checks by default. You have to 26947db96d56Sopenharmony_ciload certificates into the context. 26957db96d56Sopenharmony_ci 26967db96d56Sopenharmony_ci 26977db96d56Sopenharmony_ciCipher selection 26987db96d56Sopenharmony_ci'''''''''''''''' 26997db96d56Sopenharmony_ci 27007db96d56Sopenharmony_ciIf you have advanced security requirements, fine-tuning of the ciphers 27017db96d56Sopenharmony_cienabled when negotiating a SSL session is possible through the 27027db96d56Sopenharmony_ci:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the 27037db96d56Sopenharmony_cissl module disables certain weak ciphers by default, but you may want 27047db96d56Sopenharmony_cito further restrict the cipher choice. Be sure to read OpenSSL's documentation 27057db96d56Sopenharmony_ciabout the `cipher list format <https://www.openssl.org/docs/man1.1.1/man1/ciphers.html#CIPHER-LIST-FORMAT>`_. 27067db96d56Sopenharmony_ciIf you want to check which ciphers are enabled by a given cipher list, use 27077db96d56Sopenharmony_ci:meth:`SSLContext.get_ciphers` or the ``openssl ciphers`` command on your 27087db96d56Sopenharmony_cisystem. 27097db96d56Sopenharmony_ci 27107db96d56Sopenharmony_ciMulti-processing 27117db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^ 27127db96d56Sopenharmony_ci 27137db96d56Sopenharmony_ciIf using this module as part of a multi-processed application (using, 27147db96d56Sopenharmony_cifor example the :mod:`multiprocessing` or :mod:`concurrent.futures` modules), 27157db96d56Sopenharmony_cibe aware that OpenSSL's internal random number generator does not properly 27167db96d56Sopenharmony_cihandle forked processes. Applications must change the PRNG state of the 27177db96d56Sopenharmony_ciparent process if they use any SSL feature with :func:`os.fork`. Any 27187db96d56Sopenharmony_cisuccessful call of :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or 27197db96d56Sopenharmony_ci:func:`~ssl.RAND_pseudo_bytes` is sufficient. 27207db96d56Sopenharmony_ci 27217db96d56Sopenharmony_ci 27227db96d56Sopenharmony_ci.. _ssl-tlsv1_3: 27237db96d56Sopenharmony_ci 27247db96d56Sopenharmony_ciTLS 1.3 27257db96d56Sopenharmony_ci------- 27267db96d56Sopenharmony_ci 27277db96d56Sopenharmony_ci.. versionadded:: 3.7 27287db96d56Sopenharmony_ci 27297db96d56Sopenharmony_ciThe TLS 1.3 protocol behaves slightly differently than previous version 27307db96d56Sopenharmony_ciof TLS/SSL. Some new TLS 1.3 features are not yet available. 27317db96d56Sopenharmony_ci 27327db96d56Sopenharmony_ci- TLS 1.3 uses a disjunct set of cipher suites. All AES-GCM and 27337db96d56Sopenharmony_ci ChaCha20 cipher suites are enabled by default. The method 27347db96d56Sopenharmony_ci :meth:`SSLContext.set_ciphers` cannot enable or disable any TLS 1.3 27357db96d56Sopenharmony_ci ciphers yet, but :meth:`SSLContext.get_ciphers` returns them. 27367db96d56Sopenharmony_ci- Session tickets are no longer sent as part of the initial handshake and 27377db96d56Sopenharmony_ci are handled differently. :attr:`SSLSocket.session` and :class:`SSLSession` 27387db96d56Sopenharmony_ci are not compatible with TLS 1.3. 27397db96d56Sopenharmony_ci- Client-side certificates are also no longer verified during the initial 27407db96d56Sopenharmony_ci handshake. A server can request a certificate at any time. Clients 27417db96d56Sopenharmony_ci process certificate requests while they send or receive application data 27427db96d56Sopenharmony_ci from the server. 27437db96d56Sopenharmony_ci- TLS 1.3 features like early data, deferred TLS client cert request, 27447db96d56Sopenharmony_ci signature algorithm configuration, and rekeying are not supported yet. 27457db96d56Sopenharmony_ci 27467db96d56Sopenharmony_ci 27477db96d56Sopenharmony_ci.. seealso:: 27487db96d56Sopenharmony_ci 27497db96d56Sopenharmony_ci Class :class:`socket.socket` 27507db96d56Sopenharmony_ci Documentation of underlying :mod:`socket` class 27517db96d56Sopenharmony_ci 27527db96d56Sopenharmony_ci `SSL/TLS Strong Encryption: An Introduction <https://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_ 27537db96d56Sopenharmony_ci Intro from the Apache HTTP Server documentation 27547db96d56Sopenharmony_ci 27557db96d56Sopenharmony_ci :rfc:`RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management <1422>` 27567db96d56Sopenharmony_ci Steve Kent 27577db96d56Sopenharmony_ci 27587db96d56Sopenharmony_ci :rfc:`RFC 4086: Randomness Requirements for Security <4086>` 27597db96d56Sopenharmony_ci Donald E., Jeffrey I. Schiller 27607db96d56Sopenharmony_ci 27617db96d56Sopenharmony_ci :rfc:`RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile <5280>` 27627db96d56Sopenharmony_ci D. Cooper 27637db96d56Sopenharmony_ci 27647db96d56Sopenharmony_ci :rfc:`RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 <5246>` 27657db96d56Sopenharmony_ci T. Dierks et. al. 27667db96d56Sopenharmony_ci 27677db96d56Sopenharmony_ci :rfc:`RFC 6066: Transport Layer Security (TLS) Extensions <6066>` 27687db96d56Sopenharmony_ci D. Eastlake 27697db96d56Sopenharmony_ci 27707db96d56Sopenharmony_ci `IANA TLS: Transport Layer Security (TLS) Parameters <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml>`_ 27717db96d56Sopenharmony_ci IANA 27727db96d56Sopenharmony_ci 27737db96d56Sopenharmony_ci :rfc:`RFC 7525: Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) <7525>` 27747db96d56Sopenharmony_ci IETF 27757db96d56Sopenharmony_ci 27767db96d56Sopenharmony_ci `Mozilla's Server Side TLS recommendations <https://wiki.mozilla.org/Security/Server_Side_TLS>`_ 27777db96d56Sopenharmony_ci Mozilla 2778