blob: 8bac365ffc0e4cc3e102d00beff2270eccf8def5 [file] [log] [blame]
Antoine Pitroue1bc8982011-01-02 22:12:22 +00001:mod:`ssl` --- TLS/SSL wrapper for socket objects
2=================================================
Thomas Woutersed03b412007-08-28 21:37:11 +00003
4.. module:: ssl
Antoine Pitroue1bc8982011-01-02 22:12:22 +00005 :synopsis: TLS/SSL wrapper for socket objects
Thomas Wouters47b49bf2007-08-30 22:15:33 +00006
7.. moduleauthor:: Bill Janssen <bill.janssen@gmail.com>
Thomas Wouters47b49bf2007-08-30 22:15:33 +00008.. sectionauthor:: Bill Janssen <bill.janssen@gmail.com>
9
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040010**Source code:** :source:`Lib/ssl.py`
Thomas Woutersed03b412007-08-28 21:37:11 +000011
Thomas Wouters1b7f8912007-09-19 03:06:30 +000012.. index:: single: OpenSSL; (use in module ssl)
13
14.. index:: TLS, SSL, Transport Layer Security, Secure Sockets Layer
15
Raymond Hettinger469271d2011-01-27 20:38:46 +000016--------------
17
Georg Brandl7f01a132009-09-16 15:58:14 +000018This module provides access to Transport Layer Security (often known as "Secure
19Sockets Layer") encryption and peer authentication facilities for network
20sockets, both client-side and server-side. This module uses the OpenSSL
21library. It is available on all modern Unix systems, Windows, Mac OS X, and
22probably additional platforms, as long as OpenSSL is installed on that platform.
Thomas Woutersed03b412007-08-28 21:37:11 +000023
24.. note::
25
Georg Brandl7f01a132009-09-16 15:58:14 +000026 Some behavior may be platform dependent, since calls are made to the
27 operating system socket APIs. The installed version of OpenSSL may also
Antoine Pitrou2463e5f2013-03-28 22:24:43 +010028 cause variations in behavior. For example, TLSv1.1 and TLSv1.2 come with
29 openssl version 1.0.1.
Thomas Woutersed03b412007-08-28 21:37:11 +000030
Christian Heimes3046fe42013-10-29 21:08:56 +010031.. warning::
Antoine Pitrou9eefe912013-11-17 15:35:33 +010032 Don't use this module without reading the :ref:`ssl-security`. Doing so
33 may lead to a false sense of security, as the default settings of the
34 ssl module are not necessarily appropriate for your application.
Christian Heimes3046fe42013-10-29 21:08:56 +010035
Christian Heimes3046fe42013-10-29 21:08:56 +010036
Georg Brandl7f01a132009-09-16 15:58:14 +000037This section documents the objects and functions in the ``ssl`` module; for more
38general information about TLS, SSL, and certificates, the reader is referred to
39the documents in the "See Also" section at the bottom.
Thomas Woutersed03b412007-08-28 21:37:11 +000040
Georg Brandl7f01a132009-09-16 15:58:14 +000041This module provides a class, :class:`ssl.SSLSocket`, which is derived from the
42:class:`socket.socket` type, and provides a socket-like wrapper that also
43encrypts and decrypts the data going over the socket with SSL. It supports
Antoine Pitroudab64262010-09-19 13:31:06 +000044additional methods such as :meth:`getpeercert`, which retrieves the
Mathieu Dupuyc49016e2020-03-30 23:28:25 +020045certificate of the other side of the connection, and :meth:`cipher`, which
Antoine Pitroudab64262010-09-19 13:31:06 +000046retrieves the cipher being used for the secure connection.
Thomas Woutersed03b412007-08-28 21:37:11 +000047
Antoine Pitrou152efa22010-05-16 18:19:27 +000048For more sophisticated applications, the :class:`ssl.SSLContext` class
49helps manage settings and certificates, which can then be inherited
50by SSL sockets created through the :meth:`SSLContext.wrap_socket` method.
51
Mayank Singhal9ef1b062018-06-05 19:44:37 +053052.. versionchanged:: 3.5.3
53 Updated to support linking with OpenSSL 1.1.0
54
Christian Heimes01113fa2016-09-05 23:23:24 +020055.. versionchanged:: 3.6
56
57 OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported.
58 In the future the ssl module will require at least OpenSSL 1.0.2 or
59 1.1.0.
60
Christian Heimesb8d0fa02021-04-17 15:49:50 +020061.. versionchanged:: 3.10
62
63 :pep:`644` has been implemented. The ssl module requires OpenSSL 1.1.1
64 or newer.
65
Antoine Pitrou152efa22010-05-16 18:19:27 +000066
Thomas Wouters1b7f8912007-09-19 03:06:30 +000067Functions, Constants, and Exceptions
68------------------------------------
69
Christian Heimes90f05a52018-02-27 09:21:34 +010070
71Socket creation
72^^^^^^^^^^^^^^^
73
74Since Python 3.2 and 2.7.9, it is recommended to use the
75:meth:`SSLContext.wrap_socket` of an :class:`SSLContext` instance to wrap
76sockets as :class:`SSLSocket` objects. The helper functions
77:func:`create_default_context` returns a new context with secure default
78settings. The old :func:`wrap_socket` function is deprecated since it is
79both inefficient and has no support for server name indication (SNI) and
80hostname matching.
81
82Client socket example with default context and IPv4/IPv6 dual stack::
83
84 import socket
85 import ssl
86
87 hostname = 'www.python.org'
88 context = ssl.create_default_context()
89
90 with socket.create_connection((hostname, 443)) as sock:
91 with context.wrap_socket(sock, server_hostname=hostname) as ssock:
92 print(ssock.version())
93
94
95Client socket example with custom context and IPv4::
96
97 hostname = 'www.python.org'
98 # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
99 context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
100 context.load_verify_locations('path/to/cabundle.pem')
101
102 with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
103 with context.wrap_socket(sock, server_hostname=hostname) as ssock:
104 print(ssock.version())
105
106
107Server socket example listening on localhost IPv4::
108
109 context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
110 context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
111
112 with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
113 sock.bind(('127.0.0.1', 8443))
114 sock.listen(5)
115 with context.wrap_socket(sock, server_side=True) as ssock:
116 conn, addr = ssock.accept()
117 ...
118
119
120Context creation
121^^^^^^^^^^^^^^^^
122
123A convenience function helps create :class:`SSLContext` objects for common
124purposes.
125
126.. function:: create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, capath=None, cadata=None)
127
128 Return a new :class:`SSLContext` object with default settings for
129 the given *purpose*. The settings are chosen by the :mod:`ssl` module,
130 and usually represent a higher security level than when calling the
131 :class:`SSLContext` constructor directly.
132
133 *cafile*, *capath*, *cadata* represent optional CA certificates to
134 trust for certificate verification, as in
135 :meth:`SSLContext.load_verify_locations`. If all three are
136 :const:`None`, this function can choose to trust the system's default
137 CA certificates instead.
138
139 The settings are: :data:`PROTOCOL_TLS`, :data:`OP_NO_SSLv2`, and
140 :data:`OP_NO_SSLv3` with high encryption cipher suites without RC4 and
141 without unauthenticated cipher suites. Passing :data:`~Purpose.SERVER_AUTH`
142 as *purpose* sets :data:`~SSLContext.verify_mode` to :data:`CERT_REQUIRED`
143 and either loads CA certificates (when at least one of *cafile*, *capath* or
144 *cadata* is given) or uses :meth:`SSLContext.load_default_certs` to load
145 default CA certificates.
146
Christian Heimesc7f70692019-05-31 11:44:05 +0200147 When :attr:`~SSLContext.keylog_filename` is supported and the environment
148 variable :envvar:`SSLKEYLOGFILE` is set, :func:`create_default_context`
149 enables key logging.
150
Christian Heimes90f05a52018-02-27 09:21:34 +0100151 .. note::
152 The protocol, options, cipher and other settings may change to more
153 restrictive values anytime without prior deprecation. The values
154 represent a fair balance between compatibility and security.
155
156 If your application needs specific settings, you should create a
157 :class:`SSLContext` and apply the settings yourself.
158
159 .. note::
160 If you find that when certain older clients or servers attempt to connect
161 with a :class:`SSLContext` created by this function that they get an error
162 stating "Protocol or cipher suite mismatch", it may be that they only
163 support SSL3.0 which this function excludes using the
164 :data:`OP_NO_SSLv3`. SSL3.0 is widely considered to be `completely broken
165 <https://en.wikipedia.org/wiki/POODLE>`_. If you still wish to continue to
166 use this function but still allow SSL 3.0 connections you can re-enable
167 them using::
168
169 ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
170 ctx.options &= ~ssl.OP_NO_SSLv3
171
172 .. versionadded:: 3.4
173
174 .. versionchanged:: 3.4.4
175
176 RC4 was dropped from the default cipher string.
177
178 .. versionchanged:: 3.6
179
180 ChaCha20/Poly1305 was added to the default cipher string.
181
182 3DES was dropped from the default cipher string.
183
Christian Heimesc7f70692019-05-31 11:44:05 +0200184 .. versionchanged:: 3.8
185
186 Support for key logging to :envvar:`SSLKEYLOGFILE` was added.
187
Christian Heimes90f05a52018-02-27 09:21:34 +0100188
189Exceptions
190^^^^^^^^^^
191
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000192.. exception:: SSLError
193
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000194 Raised to signal an error from the underlying SSL implementation
195 (currently provided by the OpenSSL library). This signifies some
196 problem in the higher-level encryption and authentication layer that's
197 superimposed on the underlying network connection. This error
Antoine Pitrou5574c302011-10-12 17:53:43 +0200198 is a subtype of :exc:`OSError`. The error code and message of
199 :exc:`SSLError` instances are provided by the OpenSSL library.
200
201 .. versionchanged:: 3.3
202 :exc:`SSLError` used to be a subtype of :exc:`socket.error`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000203
Antoine Pitrou3b36fb12012-06-22 21:11:52 +0200204 .. attribute:: library
205
206 A string mnemonic designating the OpenSSL submodule in which the error
207 occurred, such as ``SSL``, ``PEM`` or ``X509``. The range of possible
208 values depends on the OpenSSL version.
209
210 .. versionadded:: 3.3
211
212 .. attribute:: reason
213
214 A string mnemonic designating the reason this error occurred, for
215 example ``CERTIFICATE_VERIFY_FAILED``. The range of possible
216 values depends on the OpenSSL version.
217
218 .. versionadded:: 3.3
219
Antoine Pitrou41032a62011-10-27 23:56:55 +0200220.. exception:: SSLZeroReturnError
221
222 A subclass of :exc:`SSLError` raised when trying to read or write and
223 the SSL connection has been closed cleanly. Note that this doesn't
224 mean that the underlying transport (read TCP) has been closed.
225
226 .. versionadded:: 3.3
227
228.. exception:: SSLWantReadError
229
230 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
231 <ssl-nonblocking>` when trying to read or write data, but more data needs
232 to be received on the underlying TCP transport before the request can be
233 fulfilled.
234
235 .. versionadded:: 3.3
236
237.. exception:: SSLWantWriteError
238
239 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
240 <ssl-nonblocking>` when trying to read or write data, but more data needs
241 to be sent on the underlying TCP transport before the request can be
242 fulfilled.
243
244 .. versionadded:: 3.3
245
246.. exception:: SSLSyscallError
247
248 A subclass of :exc:`SSLError` raised when a system error was encountered
249 while trying to fulfill an operation on a SSL socket. Unfortunately,
250 there is no easy way to inspect the original errno number.
251
252 .. versionadded:: 3.3
253
254.. exception:: SSLEOFError
255
256 A subclass of :exc:`SSLError` raised when the SSL connection has been
Antoine Pitrouf3dc2d72011-10-28 00:01:03 +0200257 terminated abruptly. Generally, you shouldn't try to reuse the underlying
Antoine Pitrou41032a62011-10-27 23:56:55 +0200258 transport when this error is encountered.
259
260 .. versionadded:: 3.3
261
Christian Heimesb3ad0e52017-09-08 12:00:19 -0700262.. exception:: SSLCertVerificationError
263
264 A subclass of :exc:`SSLError` raised when certificate validation has
265 failed.
266
267 .. versionadded:: 3.7
268
269 .. attribute:: verify_code
270
271 A numeric error number that denotes the verification error.
272
273 .. attribute:: verify_message
274
275 A human readable string of the verification error.
276
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000277.. exception:: CertificateError
278
Christian Heimes61d478c2018-01-27 15:51:38 +0100279 An alias for :exc:`SSLCertVerificationError`.
280
281 .. versionchanged:: 3.7
282 The exception is now an alias for :exc:`SSLCertVerificationError`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000283
284
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000285Random generation
286^^^^^^^^^^^^^^^^^
287
Victor Stinner99c8b162011-05-24 12:05:19 +0200288.. function:: RAND_bytes(num)
289
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400290 Return *num* cryptographically strong pseudo-random bytes. Raises an
Victor Stinnera6752062011-05-25 11:27:40 +0200291 :class:`SSLError` if the PRNG has not been seeded with enough data or if the
292 operation is not supported by the current RAND method. :func:`RAND_status`
293 can be used to check the status of the PRNG and :func:`RAND_add` can be used
294 to seed the PRNG.
Victor Stinner99c8b162011-05-24 12:05:19 +0200295
Berker Peksageb7a97c2015-04-10 16:19:13 +0300296 For almost all applications :func:`os.urandom` is preferable.
297
Victor Stinner19fb53c2011-05-24 21:32:40 +0200298 Read the Wikipedia article, `Cryptographically secure pseudorandom number
Victor Stinnera6752062011-05-25 11:27:40 +0200299 generator (CSPRNG)
Georg Brandl5d941342016-02-26 19:37:12 +0100300 <https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator>`_,
Zach Thompsonc2f056b2019-09-10 08:40:14 -0500301 to get the requirements of a cryptographically strong generator.
Victor Stinner19fb53c2011-05-24 21:32:40 +0200302
Victor Stinner99c8b162011-05-24 12:05:19 +0200303 .. versionadded:: 3.3
304
305.. function:: RAND_pseudo_bytes(num)
306
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400307 Return (bytes, is_cryptographic): bytes are *num* pseudo-random bytes,
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200308 is_cryptographic is ``True`` if the bytes generated are cryptographically
Victor Stinnera6752062011-05-25 11:27:40 +0200309 strong. Raises an :class:`SSLError` if the operation is not supported by the
310 current RAND method.
Victor Stinner99c8b162011-05-24 12:05:19 +0200311
Victor Stinner19fb53c2011-05-24 21:32:40 +0200312 Generated pseudo-random byte sequences will be unique if they are of
313 sufficient length, but are not necessarily unpredictable. They can be used
314 for non-cryptographic purposes and for certain purposes in cryptographic
315 protocols, but usually not for key generation etc.
316
Berker Peksageb7a97c2015-04-10 16:19:13 +0300317 For almost all applications :func:`os.urandom` is preferable.
318
Victor Stinner99c8b162011-05-24 12:05:19 +0200319 .. versionadded:: 3.3
320
Christian Heimes01113fa2016-09-05 23:23:24 +0200321 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200322
323 OpenSSL has deprecated :func:`ssl.RAND_pseudo_bytes`, use
324 :func:`ssl.RAND_bytes` instead.
325
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000326.. function:: RAND_status()
327
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400328 Return ``True`` if the SSL pseudo-random number generator has been seeded
329 with 'enough' randomness, and ``False`` otherwise. You can use
330 :func:`ssl.RAND_egd` and :func:`ssl.RAND_add` to increase the randomness of
331 the pseudo-random number generator.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000332
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000333.. function:: RAND_add(bytes, entropy)
334
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400335 Mix the given *bytes* into the SSL pseudo-random number generator. The
Victor Stinner99c8b162011-05-24 12:05:19 +0200336 parameter *entropy* (a float) is a lower bound on the entropy contained in
Georg Brandl7f01a132009-09-16 15:58:14 +0000337 string (so you can always use :const:`0.0`). See :rfc:`1750` for more
338 information on sources of entropy.
Thomas Woutersed03b412007-08-28 21:37:11 +0000339
Georg Brandl8c16cb92016-02-25 20:17:45 +0100340 .. versionchanged:: 3.5
Serhiy Storchaka8490f5a2015-03-20 09:00:36 +0200341 Writable :term:`bytes-like object` is now accepted.
342
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000343Certificate handling
344^^^^^^^^^^^^^^^^^^^^
345
Marco Buttu7b2491a2017-04-13 16:17:59 +0200346.. testsetup::
347
348 import ssl
349
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000350.. function:: match_hostname(cert, hostname)
351
352 Verify that *cert* (in decoded format as returned by
353 :meth:`SSLSocket.getpeercert`) matches the given *hostname*. The rules
354 applied are those for checking the identity of HTTPS servers as outlined
Chandan Kumar63c2c8a2017-06-09 15:13:58 +0530355 in :rfc:`2818`, :rfc:`5280` and :rfc:`6125`. In addition to HTTPS, this
356 function should be suitable for checking the identity of servers in
357 various SSL-based protocols such as FTPS, IMAPS, POPS and others.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000358
359 :exc:`CertificateError` is raised on failure. On success, the function
360 returns nothing::
361
362 >>> cert = {'subject': ((('commonName', 'example.com'),),)}
363 >>> ssl.match_hostname(cert, "example.com")
364 >>> ssl.match_hostname(cert, "example.org")
365 Traceback (most recent call last):
366 File "<stdin>", line 1, in <module>
367 File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
368 ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
369
370 .. versionadded:: 3.2
371
Georg Brandl72c98d32013-10-27 07:16:53 +0100372 .. versionchanged:: 3.3.3
373 The function now follows :rfc:`6125`, section 6.4.3 and does neither
374 match multiple wildcards (e.g. ``*.*.com`` or ``*a*.example.org``) nor
375 a wildcard inside an internationalized domain names (IDN) fragment.
376 IDN A-labels such as ``www*.xn--pthon-kva.org`` are still supported,
377 but ``x*.python.org`` no longer matches ``xn--tda.python.org``.
378
Antoine Pitrouc481bfb2015-02-15 18:12:20 +0100379 .. versionchanged:: 3.5
380 Matching of IP addresses, when present in the subjectAltName field
381 of the certificate, is now supported.
382
Mandeep Singhede2ac92017-11-27 04:01:27 +0530383 .. versionchanged:: 3.7
Christian Heimes61d478c2018-01-27 15:51:38 +0100384 The function is no longer used to TLS connections. Hostname matching
385 is now performed by OpenSSL.
386
Mandeep Singhede2ac92017-11-27 04:01:27 +0530387 Allow wildcard when it is the leftmost and the only character
Christian Heimes61d478c2018-01-27 15:51:38 +0100388 in that segment. Partial wildcards like ``www*.example.com`` are no
389 longer supported.
390
391 .. deprecated:: 3.7
Mandeep Singhede2ac92017-11-27 04:01:27 +0530392
Antoine Pitrouc695c952014-04-28 20:57:36 +0200393.. function:: cert_time_to_seconds(cert_time)
Thomas Woutersed03b412007-08-28 21:37:11 +0000394
Antoine Pitrouc695c952014-04-28 20:57:36 +0200395 Return the time in seconds since the Epoch, given the ``cert_time``
396 string representing the "notBefore" or "notAfter" date from a
397 certificate in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C
398 locale).
Thomas Woutersed03b412007-08-28 21:37:11 +0000399
Antoine Pitrouc695c952014-04-28 20:57:36 +0200400 Here's an example:
Thomas Woutersed03b412007-08-28 21:37:11 +0000401
Antoine Pitrouc695c952014-04-28 20:57:36 +0200402 .. doctest:: newcontext
403
404 >>> import ssl
405 >>> timestamp = ssl.cert_time_to_seconds("Jan 5 09:34:43 2018 GMT")
Marco Buttu7b2491a2017-04-13 16:17:59 +0200406 >>> timestamp # doctest: +SKIP
Antoine Pitrouc695c952014-04-28 20:57:36 +0200407 1515144883
408 >>> from datetime import datetime
Marco Buttu7b2491a2017-04-13 16:17:59 +0200409 >>> print(datetime.utcfromtimestamp(timestamp)) # doctest: +SKIP
Antoine Pitrouc695c952014-04-28 20:57:36 +0200410 2018-01-05 09:34:43
411
412 "notBefore" or "notAfter" dates must use GMT (:rfc:`5280`).
413
414 .. versionchanged:: 3.5
415 Interpret the input time as a time in UTC as specified by 'GMT'
416 timezone in the input string. Local timezone was used
417 previously. Return an integer (no fractions of a second in the
418 input format)
Thomas Woutersed03b412007-08-28 21:37:11 +0000419
Christian Heimes598894f2016-09-05 23:19:05 +0200420.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None)
Thomas Woutersed03b412007-08-28 21:37:11 +0000421
Georg Brandl7f01a132009-09-16 15:58:14 +0000422 Given the address ``addr`` of an SSL-protected server, as a (*hostname*,
423 *port-number*) pair, fetches the server's certificate, and returns it as a
424 PEM-encoded string. If ``ssl_version`` is specified, uses that version of
425 the SSL protocol to attempt to connect to the server. If ``ca_certs`` is
426 specified, it should be a file containing a list of root certificates, the
Christian Heimes90f05a52018-02-27 09:21:34 +0100427 same format as used for the same parameter in
428 :meth:`SSLContext.wrap_socket`. The call will attempt to validate the
429 server certificate against that set of root certificates, and will fail
430 if the validation attempt fails.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000431
Antoine Pitrou15399c32011-04-28 19:23:55 +0200432 .. versionchanged:: 3.3
433 This function is now IPv6-compatible.
434
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200435 .. versionchanged:: 3.5
436 The default *ssl_version* is changed from :data:`PROTOCOL_SSLv3` to
Christian Heimes598894f2016-09-05 23:19:05 +0200437 :data:`PROTOCOL_TLS` for maximum compatibility with modern servers.
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200438
Georg Brandl7f01a132009-09-16 15:58:14 +0000439.. function:: DER_cert_to_PEM_cert(DER_cert_bytes)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000440
441 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
442 string version of the same certificate.
443
Georg Brandl7f01a132009-09-16 15:58:14 +0000444.. function:: PEM_cert_to_DER_cert(PEM_cert_string)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000445
Georg Brandl7f01a132009-09-16 15:58:14 +0000446 Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of
447 bytes for that same certificate.
Thomas Woutersed03b412007-08-28 21:37:11 +0000448
Christian Heimes6d7ad132013-06-09 18:02:55 +0200449.. function:: get_default_verify_paths()
450
451 Returns a named tuple with paths to OpenSSL's default cafile and capath.
452 The paths are the same as used by
453 :meth:`SSLContext.set_default_verify_paths`. The return value is a
454 :term:`named tuple` ``DefaultVerifyPaths``:
455
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300456 * :attr:`cafile` - resolved path to cafile or ``None`` if the file doesn't exist,
457 * :attr:`capath` - resolved path to capath or ``None`` if the directory doesn't exist,
Christian Heimes6d7ad132013-06-09 18:02:55 +0200458 * :attr:`openssl_cafile_env` - OpenSSL's environment key that points to a cafile,
459 * :attr:`openssl_cafile` - hard coded path to a cafile,
460 * :attr:`openssl_capath_env` - OpenSSL's environment key that points to a capath,
461 * :attr:`openssl_capath` - hard coded path to a capath directory
462
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400463 .. availability:: LibreSSL ignores the environment vars
464 :attr:`openssl_cafile_env` and :attr:`openssl_capath_env`.
Christian Heimes598894f2016-09-05 23:19:05 +0200465
Christian Heimes6d7ad132013-06-09 18:02:55 +0200466 .. versionadded:: 3.4
467
Christian Heimes44109d72013-11-22 01:51:30 +0100468.. function:: enum_certificates(store_name)
Christian Heimes46bebee2013-06-09 19:03:31 +0200469
470 Retrieve certificates from Windows' system cert store. *store_name* may be
471 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
Christian Heimes44109d72013-11-22 01:51:30 +0100472 stores, too.
Christian Heimes46bebee2013-06-09 19:03:31 +0200473
Christian Heimes44109d72013-11-22 01:51:30 +0100474 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
475 The encoding_type specifies the encoding of cert_bytes. It is either
476 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
477 PKCS#7 ASN.1 data. Trust specifies the purpose of the certificate as a set
478 of OIDS or exactly ``True`` if the certificate is trustworthy for all
479 purposes.
480
481 Example::
482
483 >>> ssl.enum_certificates("CA")
484 [(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
485 (b'data...', 'x509_asn', True)]
Christian Heimes46bebee2013-06-09 19:03:31 +0200486
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400487 .. availability:: Windows.
Christian Heimes46bebee2013-06-09 19:03:31 +0200488
489 .. versionadded:: 3.4
Christian Heimes6d7ad132013-06-09 18:02:55 +0200490
Christian Heimes44109d72013-11-22 01:51:30 +0100491.. function:: enum_crls(store_name)
492
493 Retrieve CRLs from Windows' system cert store. *store_name* may be
494 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
495 stores, too.
496
497 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
498 The encoding_type specifies the encoding of cert_bytes. It is either
499 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
500 PKCS#7 ASN.1 data.
501
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400502 .. availability:: Windows.
Christian Heimes44109d72013-11-22 01:51:30 +0100503
504 .. versionadded:: 3.4
505
Christian Heimes90f05a52018-02-27 09:21:34 +0100506.. function:: wrap_socket(sock, keyfile=None, certfile=None, \
507 server_side=False, cert_reqs=CERT_NONE, ssl_version=PROTOCOL_TLS, \
508 ca_certs=None, do_handshake_on_connect=True, \
509 suppress_ragged_eofs=True, ciphers=None)
510
511 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance
512 of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps
513 the underlying socket in an SSL context. ``sock`` must be a
514 :data:`~socket.SOCK_STREAM` socket; other socket types are unsupported.
515
516 Internally, function creates a :class:`SSLContext` with protocol
517 *ssl_version* and :attr:`SSLContext.options` set to *cert_reqs*. If
518 parameters *keyfile*, *certfile*, *ca_certs* or *ciphers* are set, then
519 the values are passed to :meth:`SSLContext.load_cert_chain`,
520 :meth:`SSLContext.load_verify_locations`, and
521 :meth:`SSLContext.set_ciphers`.
522
523 The arguments *server_side*, *do_handshake_on_connect*, and
524 *suppress_ragged_eofs* have the same meaning as
525 :meth:`SSLContext.wrap_socket`.
526
527 .. deprecated:: 3.7
528
529 Since Python 3.2 and 2.7.9, it is recommended to use the
530 :meth:`SSLContext.wrap_socket` instead of :func:`wrap_socket`. The
531 top-level function is limited and creates an insecure client socket
532 without server name indication or hostname matching.
Christian Heimes44109d72013-11-22 01:51:30 +0100533
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000534Constants
535^^^^^^^^^
536
Christian Heimes3aeacad2016-09-10 00:19:35 +0200537 All constants are now :class:`enum.IntEnum` or :class:`enum.IntFlag` collections.
538
539 .. versionadded:: 3.6
540
Thomas Woutersed03b412007-08-28 21:37:11 +0000541.. data:: CERT_NONE
542
Antoine Pitrou152efa22010-05-16 18:19:27 +0000543 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
Christian Heimesef24b6c2018-06-12 00:59:45 +0200544 parameter to :func:`wrap_socket`. Except for :const:`PROTOCOL_TLS_CLIENT`,
545 it is the default mode. With client-side sockets, just about any
546 cert is accepted. Validation errors, such as untrusted or expired cert,
547 are ignored and do not abort the TLS/SSL handshake.
548
549 In server mode, no certificate is requested from the client, so the client
550 does not send any for client cert authentication.
Antoine Pitrou152efa22010-05-16 18:19:27 +0000551
552 See the discussion of :ref:`ssl-security` below.
Thomas Woutersed03b412007-08-28 21:37:11 +0000553
554.. data:: CERT_OPTIONAL
555
Antoine Pitrou152efa22010-05-16 18:19:27 +0000556 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
Christian Heimesef24b6c2018-06-12 00:59:45 +0200557 parameter to :func:`wrap_socket`. In client mode, :const:`CERT_OPTIONAL`
558 has the same meaning as :const:`CERT_REQUIRED`. It is recommended to
559 use :const:`CERT_REQUIRED` for client-side sockets instead.
560
561 In server mode, a client certificate request is sent to the client. The
562 client may either ignore the request or send a certificate in order
563 perform TLS client cert authentication. If the client chooses to send
564 a certificate, it is verified. Any verification error immediately aborts
565 the TLS handshake.
Antoine Pitrou152efa22010-05-16 18:19:27 +0000566
567 Use of this setting requires a valid set of CA certificates to
568 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
569 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000570
571.. data:: CERT_REQUIRED
572
Antoine Pitrou152efa22010-05-16 18:19:27 +0000573 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
574 parameter to :func:`wrap_socket`. In this mode, certificates are
575 required from the other side of the socket connection; an :class:`SSLError`
576 will be raised if no certificate is provided, or if its validation fails.
Christian Heimesef24b6c2018-06-12 00:59:45 +0200577 This mode is **not** sufficient to verify a certificate in client mode as
578 it does not match hostnames. :attr:`~SSLContext.check_hostname` must be
579 enabled as well to verify the authenticity of a cert.
580 :const:`PROTOCOL_TLS_CLIENT` uses :const:`CERT_REQUIRED` and
581 enables :attr:`~SSLContext.check_hostname` by default.
582
583 With server socket, this mode provides mandatory TLS client cert
584 authentication. A client certificate request is sent to the client and
585 the client must provide a valid and trusted certificate.
Antoine Pitrou152efa22010-05-16 18:19:27 +0000586
587 Use of this setting requires a valid set of CA certificates to
588 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
589 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000590
Christian Heimes3aeacad2016-09-10 00:19:35 +0200591.. class:: VerifyMode
592
593 :class:`enum.IntEnum` collection of CERT_* constants.
594
595 .. versionadded:: 3.6
596
Christian Heimes22587792013-11-21 23:56:13 +0100597.. data:: VERIFY_DEFAULT
598
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500599 Possible value for :attr:`SSLContext.verify_flags`. In this mode, certificate
600 revocation lists (CRLs) are not checked. By default OpenSSL does neither
601 require nor verify CRLs.
Christian Heimes22587792013-11-21 23:56:13 +0100602
603 .. versionadded:: 3.4
604
605.. data:: VERIFY_CRL_CHECK_LEAF
606
607 Possible value for :attr:`SSLContext.verify_flags`. In this mode, only the
Jörn Heissler219fb9d2019-09-17 12:42:30 +0200608 peer cert is checked but none of the intermediate CA certificates. The mode
Christian Heimes22587792013-11-21 23:56:13 +0100609 requires a valid CRL that is signed by the peer cert's issuer (its direct
Serhiy Storchaka1c5d1d72020-05-26 11:04:14 +0300610 ancestor CA). If no proper CRL has been loaded with
Christian Heimes22587792013-11-21 23:56:13 +0100611 :attr:`SSLContext.load_verify_locations`, validation will fail.
612
613 .. versionadded:: 3.4
614
615.. data:: VERIFY_CRL_CHECK_CHAIN
616
617 Possible value for :attr:`SSLContext.verify_flags`. In this mode, CRLs of
618 all certificates in the peer cert chain are checked.
619
620 .. versionadded:: 3.4
621
622.. data:: VERIFY_X509_STRICT
623
624 Possible value for :attr:`SSLContext.verify_flags` to disable workarounds
625 for broken X.509 certificates.
626
627 .. versionadded:: 3.4
628
Chris Burre0b4aa02021-03-18 09:24:01 +0100629.. data:: VERIFY_ALLOW_PROXY_CERTS
630
631 Possible value for :attr:`SSLContext.verify_flags` to enables proxy
632 certificate verification.
633
634 .. versionadded:: 3.10
635
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500636.. data:: VERIFY_X509_TRUSTED_FIRST
637
638 Possible value for :attr:`SSLContext.verify_flags`. It instructs OpenSSL to
639 prefer trusted certificates when building the trust chain to validate a
640 certificate. This flag is enabled by default.
641
Benjamin Petersonc8358272015-03-08 09:42:25 -0400642 .. versionadded:: 3.4.4
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500643
Christian Heimes3aeacad2016-09-10 00:19:35 +0200644.. class:: VerifyFlags
645
646 :class:`enum.IntFlag` collection of VERIFY_* constants.
647
648 .. versionadded:: 3.6
649
Christian Heimes598894f2016-09-05 23:19:05 +0200650.. data:: PROTOCOL_TLS
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200651
652 Selects the highest protocol version that both the client and server support.
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700653 Despite the name, this option can select both "SSL" and "TLS" protocols.
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200654
Christian Heimes01113fa2016-09-05 23:23:24 +0200655 .. versionadded:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200656
Christian Heimes5fe668c2016-09-12 00:01:11 +0200657.. data:: PROTOCOL_TLS_CLIENT
658
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700659 Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`,
Christian Heimes5fe668c2016-09-12 00:01:11 +0200660 but only support client-side :class:`SSLSocket` connections. The protocol
661 enables :data:`CERT_REQUIRED` and :attr:`~SSLContext.check_hostname` by
662 default.
663
664 .. versionadded:: 3.6
665
666.. data:: PROTOCOL_TLS_SERVER
667
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700668 Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`,
Christian Heimes5fe668c2016-09-12 00:01:11 +0200669 but only support server-side :class:`SSLSocket` connections.
670
671 .. versionadded:: 3.6
672
Christian Heimes598894f2016-09-05 23:19:05 +0200673.. data:: PROTOCOL_SSLv23
674
Toshio Kuratomi7b3a0282019-05-06 15:28:14 -0500675 Alias for :data:`PROTOCOL_TLS`.
Christian Heimes598894f2016-09-05 23:19:05 +0200676
Christian Heimes01113fa2016-09-05 23:23:24 +0200677 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200678
Berker Peksagd93c4de2017-02-06 13:37:19 +0300679 Use :data:`PROTOCOL_TLS` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200680
Thomas Woutersed03b412007-08-28 21:37:11 +0000681.. data:: PROTOCOL_SSLv2
682
683 Selects SSL version 2 as the channel encryption protocol.
684
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500685 This protocol is not available if OpenSSL is compiled with the
686 ``OPENSSL_NO_SSL2`` flag.
Victor Stinner3de49192011-05-09 00:42:58 +0200687
Antoine Pitrou8eac60d2010-05-16 14:19:41 +0000688 .. warning::
689
690 SSL version 2 is insecure. Its use is highly discouraged.
691
Christian Heimes01113fa2016-09-05 23:23:24 +0200692 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200693
694 OpenSSL has removed support for SSLv2.
695
Thomas Woutersed03b412007-08-28 21:37:11 +0000696.. data:: PROTOCOL_SSLv3
697
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200698 Selects SSL version 3 as the channel encryption protocol.
699
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500700 This protocol is not be available if OpenSSL is compiled with the
701 ``OPENSSL_NO_SSLv3`` flag.
702
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200703 .. warning::
704
705 SSL version 3 is insecure. Its use is highly discouraged.
Thomas Woutersed03b412007-08-28 21:37:11 +0000706
Christian Heimes01113fa2016-09-05 23:23:24 +0200707 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200708
709 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300710 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200711
Thomas Woutersed03b412007-08-28 21:37:11 +0000712.. data:: PROTOCOL_TLSv1
713
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100714 Selects TLS version 1.0 as the channel encryption protocol.
715
Christian Heimes01113fa2016-09-05 23:23:24 +0200716 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200717
718 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300719 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200720
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100721.. data:: PROTOCOL_TLSv1_1
722
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100723 Selects TLS version 1.1 as the channel encryption protocol.
724 Available only with openssl version 1.0.1+.
725
726 .. versionadded:: 3.4
727
Christian Heimes01113fa2016-09-05 23:23:24 +0200728 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200729
730 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300731 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200732
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100733.. data:: PROTOCOL_TLSv1_2
734
Illia Volochii2798f242021-04-18 10:10:53 +0300735 Selects TLS version 1.2 as the channel encryption protocol.
736 Available only with openssl version 1.0.1+.
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100737
738 .. versionadded:: 3.4
Thomas Woutersed03b412007-08-28 21:37:11 +0000739
Christian Heimes01113fa2016-09-05 23:23:24 +0200740 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200741
742 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300743 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200744
Antoine Pitroub5218772010-05-21 09:56:06 +0000745.. data:: OP_ALL
746
747 Enables workarounds for various bugs present in other SSL implementations.
Antoine Pitrou9f6b02e2012-01-27 10:02:55 +0100748 This option is set by default. It does not necessarily set the same
749 flags as OpenSSL's ``SSL_OP_ALL`` constant.
Antoine Pitroub5218772010-05-21 09:56:06 +0000750
751 .. versionadded:: 3.2
752
753.. data:: OP_NO_SSLv2
754
755 Prevents an SSLv2 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200756 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000757 choosing SSLv2 as the protocol version.
758
759 .. versionadded:: 3.2
760
Christian Heimes01113fa2016-09-05 23:23:24 +0200761 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200762
763 SSLv2 is deprecated
764
765
Antoine Pitroub5218772010-05-21 09:56:06 +0000766.. data:: OP_NO_SSLv3
767
768 Prevents an SSLv3 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200769 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000770 choosing SSLv3 as the protocol version.
771
772 .. versionadded:: 3.2
773
Christian Heimes01113fa2016-09-05 23:23:24 +0200774 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200775
776 SSLv3 is deprecated
777
Antoine Pitroub5218772010-05-21 09:56:06 +0000778.. data:: OP_NO_TLSv1
779
780 Prevents a TLSv1 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200781 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000782 choosing TLSv1 as the protocol version.
783
784 .. versionadded:: 3.2
785
Christian Heimes698dde12018-02-27 11:54:43 +0100786 .. deprecated:: 3.7
787 The option is deprecated since OpenSSL 1.1.0, use the new
788 :attr:`SSLContext.minimum_version` and
789 :attr:`SSLContext.maximum_version` instead.
790
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100791.. data:: OP_NO_TLSv1_1
792
793 Prevents a TLSv1.1 connection. This option is only applicable in conjunction
Christian Heimes598894f2016-09-05 23:19:05 +0200794 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.1 as
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100795 the protocol version. Available only with openssl version 1.0.1+.
796
797 .. versionadded:: 3.4
798
Christian Heimes698dde12018-02-27 11:54:43 +0100799 .. deprecated:: 3.7
800 The option is deprecated since OpenSSL 1.1.0.
801
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100802.. data:: OP_NO_TLSv1_2
803
804 Prevents a TLSv1.2 connection. This option is only applicable in conjunction
Christian Heimes598894f2016-09-05 23:19:05 +0200805 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.2 as
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100806 the protocol version. Available only with openssl version 1.0.1+.
807
808 .. versionadded:: 3.4
809
Christian Heimes698dde12018-02-27 11:54:43 +0100810 .. deprecated:: 3.7
811 The option is deprecated since OpenSSL 1.1.0.
812
Christian Heimescb5b68a2017-09-07 18:07:00 -0700813.. data:: OP_NO_TLSv1_3
814
815 Prevents a TLSv1.3 connection. This option is only applicable in conjunction
816 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.3 as
817 the protocol version. TLS 1.3 is available with OpenSSL 1.1.1 or later.
818 When Python has been compiled against an older version of OpenSSL, the
819 flag defaults to *0*.
820
821 .. versionadded:: 3.7
822
Christian Heimes698dde12018-02-27 11:54:43 +0100823 .. deprecated:: 3.7
824 The option is deprecated since OpenSSL 1.1.0. It was added to 2.7.15,
825 3.6.3 and 3.7.0 for backwards compatibility with OpenSSL 1.0.2.
826
Christian Heimes67c48012018-05-15 16:25:40 -0400827.. data:: OP_NO_RENEGOTIATION
828
829 Disable all renegotiation in TLSv1.2 and earlier. Do not send
830 HelloRequest messages, and ignore renegotiation requests via ClientHello.
831
832 This option is only available with OpenSSL 1.1.0h and later.
833
834 .. versionadded:: 3.7
835
Antoine Pitrou6db49442011-12-19 13:27:11 +0100836.. data:: OP_CIPHER_SERVER_PREFERENCE
837
838 Use the server's cipher ordering preference, rather than the client's.
839 This option has no effect on client sockets and SSLv2 server sockets.
840
841 .. versionadded:: 3.3
842
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100843.. data:: OP_SINGLE_DH_USE
844
845 Prevents re-use of the same DH key for distinct SSL sessions. This
846 improves forward secrecy but requires more computational resources.
847 This option only applies to server sockets.
848
849 .. versionadded:: 3.3
850
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100851.. data:: OP_SINGLE_ECDH_USE
852
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100853 Prevents re-use of the same ECDH key for distinct SSL sessions. This
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100854 improves forward secrecy but requires more computational resources.
855 This option only applies to server sockets.
856
857 .. versionadded:: 3.3
858
Christian Heimes05d9fe32018-02-27 08:55:39 +0100859.. data:: OP_ENABLE_MIDDLEBOX_COMPAT
860
861 Send dummy Change Cipher Spec (CCS) messages in TLS 1.3 handshake to make
862 a TLS 1.3 connection look more like a TLS 1.2 connection.
863
864 This option is only available with OpenSSL 1.1.1 and later.
865
866 .. versionadded:: 3.8
867
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100868.. data:: OP_NO_COMPRESSION
869
870 Disable compression on the SSL channel. This is useful if the application
871 protocol supports its own compression scheme.
872
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100873 .. versionadded:: 3.3
874
Christian Heimes3aeacad2016-09-10 00:19:35 +0200875.. class:: Options
876
877 :class:`enum.IntFlag` collection of OP_* constants.
878
Christian Heimes99a65702016-09-10 23:44:53 +0200879.. data:: OP_NO_TICKET
880
881 Prevent client side from requesting a session ticket.
882
Christian Heimes3aeacad2016-09-10 00:19:35 +0200883 .. versionadded:: 3.6
884
Christian Heimes6f37ebc2021-04-09 17:59:21 +0200885.. data:: OP_IGNORE_UNEXPECTED_EOF
886
887 Ignore unexpected shutdown of TLS connections.
888
889 This option is only available with OpenSSL 3.0.0 and later.
890
891 .. versionadded:: 3.10
892
Benjamin Petersoncca27322015-01-23 16:35:37 -0500893.. data:: HAS_ALPN
894
895 Whether the OpenSSL library has built-in support for the *Application-Layer
896 Protocol Negotiation* TLS extension as described in :rfc:`7301`.
897
898 .. versionadded:: 3.5
899
Christian Heimes61d478c2018-01-27 15:51:38 +0100900.. data:: HAS_NEVER_CHECK_COMMON_NAME
901
902 Whether the OpenSSL library has built-in support not checking subject
903 common name and :attr:`SSLContext.hostname_checks_common_name` is
904 writeable.
905
906 .. versionadded:: 3.7
907
Antoine Pitrou501da612011-12-21 09:27:41 +0100908.. data:: HAS_ECDH
909
Christian Heimes698dde12018-02-27 11:54:43 +0100910 Whether the OpenSSL library has built-in support for the Elliptic Curve-based
Antoine Pitrou501da612011-12-21 09:27:41 +0100911 Diffie-Hellman key exchange. This should be true unless the feature was
912 explicitly disabled by the distributor.
913
914 .. versionadded:: 3.3
915
Antoine Pitroud5323212010-10-22 18:19:07 +0000916.. data:: HAS_SNI
917
918 Whether the OpenSSL library has built-in support for the *Server Name
Chandan Kumar63c2c8a2017-06-09 15:13:58 +0530919 Indication* extension (as defined in :rfc:`6066`).
Antoine Pitroud5323212010-10-22 18:19:07 +0000920
921 .. versionadded:: 3.2
922
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100923.. data:: HAS_NPN
924
Christian Heimes698dde12018-02-27 11:54:43 +0100925 Whether the OpenSSL library has built-in support for the *Next Protocol
Sanyam Khurana338cd832018-01-20 05:55:37 +0530926 Negotiation* as described in the `Application Layer Protocol
927 Negotiation <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_.
928 When true, you can use the :meth:`SSLContext.set_npn_protocols` method to advertise
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100929 which protocols you want to support.
930
931 .. versionadded:: 3.3
932
Christian Heimes698dde12018-02-27 11:54:43 +0100933.. data:: HAS_SSLv2
934
935 Whether the OpenSSL library has built-in support for the SSL 2.0 protocol.
936
937 .. versionadded:: 3.7
938
939.. data:: HAS_SSLv3
940
941 Whether the OpenSSL library has built-in support for the SSL 3.0 protocol.
942
943 .. versionadded:: 3.7
944
945.. data:: HAS_TLSv1
946
947 Whether the OpenSSL library has built-in support for the TLS 1.0 protocol.
948
949 .. versionadded:: 3.7
950
951.. data:: HAS_TLSv1_1
952
953 Whether the OpenSSL library has built-in support for the TLS 1.1 protocol.
954
955 .. versionadded:: 3.7
956
957.. data:: HAS_TLSv1_2
958
959 Whether the OpenSSL library has built-in support for the TLS 1.2 protocol.
960
961 .. versionadded:: 3.7
962
Christian Heimescb5b68a2017-09-07 18:07:00 -0700963.. data:: HAS_TLSv1_3
964
965 Whether the OpenSSL library has built-in support for the TLS 1.3 protocol.
966
967 .. versionadded:: 3.7
968
Antoine Pitroud6494802011-07-21 01:11:30 +0200969.. data:: CHANNEL_BINDING_TYPES
970
971 List of supported TLS channel binding types. Strings in this list
972 can be used as arguments to :meth:`SSLSocket.get_channel_binding`.
973
974 .. versionadded:: 3.3
975
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000976.. data:: OPENSSL_VERSION
977
978 The version string of the OpenSSL library loaded by the interpreter::
979
980 >>> ssl.OPENSSL_VERSION
Alex Gaynor275104e2017-03-02 05:23:19 -0500981 'OpenSSL 1.0.2k 26 Jan 2017'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000982
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000983 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000984
985.. data:: OPENSSL_VERSION_INFO
986
987 A tuple of five integers representing version information about the
988 OpenSSL library::
989
990 >>> ssl.OPENSSL_VERSION_INFO
Alex Gaynor275104e2017-03-02 05:23:19 -0500991 (1, 0, 2, 11, 15)
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000992
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000993 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000994
995.. data:: OPENSSL_VERSION_NUMBER
996
997 The raw version number of the OpenSSL library, as a single integer::
998
999 >>> ssl.OPENSSL_VERSION_NUMBER
Alex Gaynor275104e2017-03-02 05:23:19 -05001000 268443839
Antoine Pitrou04f6a322010-04-05 21:40:07 +00001001 >>> hex(ssl.OPENSSL_VERSION_NUMBER)
Alex Gaynor275104e2017-03-02 05:23:19 -05001002 '0x100020bf'
Antoine Pitrou04f6a322010-04-05 21:40:07 +00001003
Antoine Pitrou43a94c312010-04-05 21:44:48 +00001004 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +00001005
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001006.. data:: ALERT_DESCRIPTION_HANDSHAKE_FAILURE
1007 ALERT_DESCRIPTION_INTERNAL_ERROR
1008 ALERT_DESCRIPTION_*
1009
1010 Alert Descriptions from :rfc:`5246` and others. The `IANA TLS Alert Registry
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03001011 <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001012 contains this list and references to the RFCs where their meaning is defined.
1013
1014 Used as the return value of the callback function in
1015 :meth:`SSLContext.set_servername_callback`.
1016
1017 .. versionadded:: 3.4
1018
Christian Heimes3aeacad2016-09-10 00:19:35 +02001019.. class:: AlertDescription
1020
1021 :class:`enum.IntEnum` collection of ALERT_DESCRIPTION_* constants.
1022
1023 .. versionadded:: 3.6
1024
Christian Heimes72d28502013-11-23 13:56:58 +01001025.. data:: Purpose.SERVER_AUTH
1026
Antoine Pitrou5bef4102013-11-23 16:16:29 +01001027 Option for :func:`create_default_context` and
1028 :meth:`SSLContext.load_default_certs`. This value indicates that the
1029 context may be used to authenticate Web servers (therefore, it will
1030 be used to create client-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +01001031
1032 .. versionadded:: 3.4
1033
Christian Heimes6b2ff982013-11-23 14:42:01 +01001034.. data:: Purpose.CLIENT_AUTH
Christian Heimes72d28502013-11-23 13:56:58 +01001035
Antoine Pitrou5bef4102013-11-23 16:16:29 +01001036 Option for :func:`create_default_context` and
1037 :meth:`SSLContext.load_default_certs`. This value indicates that the
1038 context may be used to authenticate Web clients (therefore, it will
1039 be used to create server-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +01001040
1041 .. versionadded:: 3.4
1042
Christian Heimes3aeacad2016-09-10 00:19:35 +02001043.. class:: SSLErrorNumber
1044
1045 :class:`enum.IntEnum` collection of SSL_ERROR_* constants.
1046
1047 .. versionadded:: 3.6
1048
Christian Heimes698dde12018-02-27 11:54:43 +01001049.. class:: TLSVersion
1050
1051 :class:`enum.IntEnum` collection of SSL and TLS versions for
1052 :attr:`SSLContext.maximum_version` and :attr:`SSLContext.minimum_version`.
1053
1054 .. versionadded:: 3.7
1055
1056.. attribute:: TLSVersion.MINIMUM_SUPPORTED
1057.. attribute:: TLSVersion.MAXIMUM_SUPPORTED
1058
1059 The minimum or maximum supported SSL or TLS version. These are magic
1060 constants. Their values don't reflect the lowest and highest available
1061 TLS/SSL versions.
1062
1063.. attribute:: TLSVersion.SSLv3
1064.. attribute:: TLSVersion.TLSv1
1065.. attribute:: TLSVersion.TLSv1_1
1066.. attribute:: TLSVersion.TLSv1_2
1067.. attribute:: TLSVersion.TLSv1_3
1068
1069 SSL 3.0 to TLS 1.3.
Thomas Woutersed03b412007-08-28 21:37:11 +00001070
Christian Heimesc7f70692019-05-31 11:44:05 +02001071
Antoine Pitrou152efa22010-05-16 18:19:27 +00001072SSL Sockets
1073-----------
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001074
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001075.. class:: SSLSocket(socket.socket)
Antoine Pitrou792ff3e2010-09-19 13:19:21 +00001076
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001077 SSL sockets provide the following methods of :ref:`socket-objects`:
Zachary Wareba9fb0d2014-06-11 15:02:25 -05001078
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001079 - :meth:`~socket.socket.accept()`
1080 - :meth:`~socket.socket.bind()`
1081 - :meth:`~socket.socket.close()`
1082 - :meth:`~socket.socket.connect()`
1083 - :meth:`~socket.socket.detach()`
1084 - :meth:`~socket.socket.fileno()`
1085 - :meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`
1086 - :meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`
1087 - :meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`,
1088 :meth:`~socket.socket.setblocking()`
1089 - :meth:`~socket.socket.listen()`
1090 - :meth:`~socket.socket.makefile()`
1091 - :meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()`
1092 (but passing a non-zero ``flags`` argument is not allowed)
1093 - :meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with
1094 the same limitation)
Victor Stinner92127a52014-10-10 12:43:17 +02001095 - :meth:`~socket.socket.sendfile()` (but :mod:`os.sendfile` will be used
1096 for plain-text sockets only, else :meth:`~socket.socket.send()` will be used)
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001097 - :meth:`~socket.socket.shutdown()`
Zachary Wareba9fb0d2014-06-11 15:02:25 -05001098
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001099 However, since the SSL (and TLS) protocol has its own framing atop
1100 of TCP, the SSL sockets abstraction can, in certain respects, diverge from
1101 the specification of normal, OS-level sockets. See especially the
1102 :ref:`notes on non-blocking sockets <ssl-nonblocking>`.
Antoine Pitroue1f2f302010-09-19 13:56:11 +00001103
Christian Heimes9d50ab52018-02-27 10:17:30 +01001104 Instances of :class:`SSLSocket` must be created using the
Alex Gaynor1cf2a802017-02-28 22:26:56 -05001105 :meth:`SSLContext.wrap_socket` method.
Victor Stinnerd28fe8c2014-10-10 12:07:19 +02001106
Victor Stinner92127a52014-10-10 12:43:17 +02001107 .. versionchanged:: 3.5
1108 The :meth:`sendfile` method was added.
1109
Victor Stinner14690702015-04-06 22:46:13 +02001110 .. versionchanged:: 3.5
1111 The :meth:`shutdown` does not reset the socket timeout each time bytes
1112 are received or sent. The socket timeout is now to maximum total duration
1113 of the shutdown.
1114
Christian Heimesd0486372016-09-10 23:23:33 +02001115 .. deprecated:: 3.6
1116 It is deprecated to create a :class:`SSLSocket` instance directly, use
1117 :meth:`SSLContext.wrap_socket` to wrap a socket.
1118
Christian Heimes9d50ab52018-02-27 10:17:30 +01001119 .. versionchanged:: 3.7
1120 :class:`SSLSocket` instances must to created with
1121 :meth:`~SSLContext.wrap_socket`. In earlier versions, it was possible
1122 to create instances directly. This was never documented or officially
1123 supported.
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001124
Christian Heimes89d15502021-04-19 06:55:30 +02001125 .. versionchanged:: 3.10
1126 Python now uses ``SSL_read_ex`` and ``SSL_write_ex`` internally. The
1127 functions support reading and writing of data larger than 2 GB. Writing
1128 zero-length data no longer fails with a protocol violation error.
1129
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001130SSL sockets also have the following additional methods and attributes:
Antoine Pitrou792ff3e2010-09-19 13:19:21 +00001131
Martin Panterf6b1d662016-03-28 00:22:09 +00001132.. method:: SSLSocket.read(len=1024, buffer=None)
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001133
1134 Read up to *len* bytes of data from the SSL socket and return the result as
1135 a ``bytes`` instance. If *buffer* is specified, then read into the buffer
1136 instead, and return the number of bytes read.
1137
Victor Stinner41f92c22014-10-10 12:05:56 +02001138 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001139 :ref:`non-blocking <ssl-nonblocking>` and the read would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001140
1141 As at any time a re-negotiation is possible, a call to :meth:`read` can also
1142 cause write operations.
1143
Victor Stinner14690702015-04-06 22:46:13 +02001144 .. versionchanged:: 3.5
1145 The socket timeout is no more reset each time bytes are received or sent.
1146 The socket timeout is now to maximum total duration to read up to *len*
1147 bytes.
1148
Christian Heimesd0486372016-09-10 23:23:33 +02001149 .. deprecated:: 3.6
1150 Use :meth:`~SSLSocket.recv` instead of :meth:`~SSLSocket.read`.
1151
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001152.. method:: SSLSocket.write(buf)
1153
1154 Write *buf* to the SSL socket and return the number of bytes written. The
1155 *buf* argument must be an object supporting the buffer interface.
1156
Victor Stinner41f92c22014-10-10 12:05:56 +02001157 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001158 :ref:`non-blocking <ssl-nonblocking>` and the write would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001159
1160 As at any time a re-negotiation is possible, a call to :meth:`write` can
1161 also cause read operations.
1162
Victor Stinner14690702015-04-06 22:46:13 +02001163 .. versionchanged:: 3.5
1164 The socket timeout is no more reset each time bytes are received or sent.
1165 The socket timeout is now to maximum total duration to write *buf*.
1166
Christian Heimesd0486372016-09-10 23:23:33 +02001167 .. deprecated:: 3.6
1168 Use :meth:`~SSLSocket.send` instead of :meth:`~SSLSocket.write`.
1169
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001170.. note::
1171
1172 The :meth:`~SSLSocket.read` and :meth:`~SSLSocket.write` methods are the
1173 low-level methods that read and write unencrypted, application-level data
Martin Panter1f1177d2015-10-31 11:48:53 +00001174 and decrypt/encrypt it to encrypted, wire-level data. These methods
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001175 require an active SSL connection, i.e. the handshake was completed and
1176 :meth:`SSLSocket.unwrap` was not called.
1177
1178 Normally you should use the socket API methods like
1179 :meth:`~socket.socket.recv` and :meth:`~socket.socket.send` instead of these
1180 methods.
1181
Bill Janssen48dc27c2007-12-05 03:38:10 +00001182.. method:: SSLSocket.do_handshake()
1183
Antoine Pitroub3593ca2011-07-11 01:39:19 +02001184 Perform the SSL setup handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +00001185
Christian Heimes1aa9a752013-12-02 02:41:19 +01001186 .. versionchanged:: 3.4
Zachary Ware88a19772014-07-25 13:30:50 -05001187 The handshake method also performs :func:`match_hostname` when the
Christian Heimes1aa9a752013-12-02 02:41:19 +01001188 :attr:`~SSLContext.check_hostname` attribute of the socket's
1189 :attr:`~SSLSocket.context` is true.
1190
Victor Stinner14690702015-04-06 22:46:13 +02001191 .. versionchanged:: 3.5
1192 The socket timeout is no more reset each time bytes are received or sent.
1193 The socket timeout is now to maximum total duration of the handshake.
1194
Christian Heimes61d478c2018-01-27 15:51:38 +01001195 .. versionchanged:: 3.7
1196 Hostname or IP address is matched by OpenSSL during handshake. The
1197 function :func:`match_hostname` is no longer used. In case OpenSSL
1198 refuses a hostname or IP address, the handshake is aborted early and
1199 a TLS alert message is send to the peer.
1200
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001201.. method:: SSLSocket.getpeercert(binary_form=False)
1202
Georg Brandl7f01a132009-09-16 15:58:14 +00001203 If there is no certificate for the peer on the other end of the connection,
Antoine Pitrou20b85552013-09-29 19:50:53 +02001204 return ``None``. If the SSL handshake hasn't been done yet, raise
1205 :exc:`ValueError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001206
Antoine Pitroud34941a2013-04-16 20:27:17 +02001207 If the ``binary_form`` parameter is :const:`False`, and a certificate was
Georg Brandl7f01a132009-09-16 15:58:14 +00001208 received from the peer, this method returns a :class:`dict` instance. If the
1209 certificate was not validated, the dict is empty. If the certificate was
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001210 validated, it returns a dict with several keys, amongst them ``subject``
1211 (the principal for which the certificate was issued) and ``issuer``
1212 (the principal issuing the certificate). If a certificate contains an
1213 instance of the *Subject Alternative Name* extension (see :rfc:`3280`),
1214 there will also be a ``subjectAltName`` key in the dictionary.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001215
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001216 The ``subject`` and ``issuer`` fields are tuples containing the sequence
1217 of relative distinguished names (RDNs) given in the certificate's data
1218 structure for the respective fields, and each RDN is a sequence of
1219 name-value pairs. Here is a real-world example::
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001220
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001221 {'issuer': ((('countryName', 'IL'),),
1222 (('organizationName', 'StartCom Ltd.'),),
1223 (('organizationalUnitName',
1224 'Secure Digital Certificate Signing'),),
1225 (('commonName',
1226 'StartCom Class 2 Primary Intermediate Server CA'),)),
1227 'notAfter': 'Nov 22 08:15:19 2013 GMT',
1228 'notBefore': 'Nov 21 03:09:52 2011 GMT',
1229 'serialNumber': '95F0',
1230 'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),),
1231 (('countryName', 'US'),),
1232 (('stateOrProvinceName', 'California'),),
1233 (('localityName', 'San Francisco'),),
1234 (('organizationName', 'Electronic Frontier Foundation, Inc.'),),
1235 (('commonName', '*.eff.org'),),
1236 (('emailAddress', 'hostmaster@eff.org'),)),
1237 'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')),
1238 'version': 3}
1239
1240 .. note::
Larry Hastings3732ed22014-03-15 21:13:56 -07001241
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001242 To validate a certificate for a particular service, you can use the
1243 :func:`match_hostname` function.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001244
Georg Brandl7f01a132009-09-16 15:58:14 +00001245 If the ``binary_form`` parameter is :const:`True`, and a certificate was
1246 provided, this method returns the DER-encoded form of the entire certificate
1247 as a sequence of bytes, or :const:`None` if the peer did not provide a
Antoine Pitroud34941a2013-04-16 20:27:17 +02001248 certificate. Whether the peer provides a certificate depends on the SSL
1249 socket's role:
1250
1251 * for a client SSL socket, the server will always provide a certificate,
1252 regardless of whether validation was required;
1253
1254 * for a server SSL socket, the client will only provide a certificate
1255 when requested by the server; therefore :meth:`getpeercert` will return
1256 :const:`None` if you used :const:`CERT_NONE` (rather than
1257 :const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`).
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001258
Antoine Pitroufb046912010-11-09 20:21:19 +00001259 .. versionchanged:: 3.2
1260 The returned dictionary includes additional items such as ``issuer``
1261 and ``notBefore``.
1262
Antoine Pitrou20b85552013-09-29 19:50:53 +02001263 .. versionchanged:: 3.4
1264 :exc:`ValueError` is raised when the handshake isn't done.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001265 The returned dictionary includes additional X509v3 extension items
Larry Hastings3732ed22014-03-15 21:13:56 -07001266 such as ``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001267
Christian Heimes2b7de662019-12-07 17:59:36 +01001268 .. versionchanged:: 3.9
1269 IPv6 address strings no longer have a trailing new line.
1270
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001271.. method:: SSLSocket.cipher()
1272
Georg Brandl7f01a132009-09-16 15:58:14 +00001273 Returns a three-value tuple containing the name of the cipher being used, the
1274 version of the SSL protocol that defines its use, and the number of secret
1275 bits being used. If no connection has been established, returns ``None``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001276
Benjamin Peterson4cb17812015-01-07 11:14:26 -06001277.. method:: SSLSocket.shared_ciphers()
1278
1279 Return the list of ciphers shared by the client during the handshake. Each
1280 entry of the returned list is a three-value tuple containing the name of the
1281 cipher, the version of the SSL protocol that defines its use, and the number
1282 of secret bits the cipher uses. :meth:`~SSLSocket.shared_ciphers` returns
1283 ``None`` if no connection has been established or the socket is a client
1284 socket.
1285
1286 .. versionadded:: 3.5
1287
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +01001288.. method:: SSLSocket.compression()
1289
1290 Return the compression algorithm being used as a string, or ``None``
1291 if the connection isn't compressed.
1292
1293 If the higher-level protocol supports its own compression mechanism,
1294 you can use :data:`OP_NO_COMPRESSION` to disable SSL-level compression.
1295
1296 .. versionadded:: 3.3
1297
Antoine Pitroud6494802011-07-21 01:11:30 +02001298.. method:: SSLSocket.get_channel_binding(cb_type="tls-unique")
1299
1300 Get channel binding data for current connection, as a bytes object. Returns
1301 ``None`` if not connected or the handshake has not been completed.
1302
1303 The *cb_type* parameter allow selection of the desired channel binding
1304 type. Valid channel binding types are listed in the
1305 :data:`CHANNEL_BINDING_TYPES` list. Currently only the 'tls-unique' channel
1306 binding, defined by :rfc:`5929`, is supported. :exc:`ValueError` will be
1307 raised if an unsupported channel binding type is requested.
1308
1309 .. versionadded:: 3.3
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001310
Benjamin Petersoncca27322015-01-23 16:35:37 -05001311.. method:: SSLSocket.selected_alpn_protocol()
1312
1313 Return the protocol that was selected during the TLS handshake. If
1314 :meth:`SSLContext.set_alpn_protocols` was not called, if the other party does
Benjamin Peterson88615022015-01-23 17:30:26 -05001315 not support ALPN, if this socket does not support any of the client's
1316 proposed protocols, or if the handshake has not happened yet, ``None`` is
Benjamin Petersoncca27322015-01-23 16:35:37 -05001317 returned.
1318
1319 .. versionadded:: 3.5
1320
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001321.. method:: SSLSocket.selected_npn_protocol()
1322
Benjamin Petersoncca27322015-01-23 16:35:37 -05001323 Return the higher-level protocol that was selected during the TLS/SSL
Antoine Pitrou47e40422014-09-04 21:00:10 +02001324 handshake. If :meth:`SSLContext.set_npn_protocols` was not called, or
1325 if the other party does not support NPN, or if the handshake has not yet
1326 happened, this will return ``None``.
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001327
1328 .. versionadded:: 3.3
1329
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001330.. method:: SSLSocket.unwrap()
1331
Georg Brandl7f01a132009-09-16 15:58:14 +00001332 Performs the SSL shutdown handshake, which removes the TLS layer from the
1333 underlying socket, and returns the underlying socket object. This can be
1334 used to go from encrypted operation over a connection to unencrypted. The
1335 returned socket should always be used for further communication with the
1336 other side of the connection, rather than the original socket.
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001337
Christian Heimes9fb051f2018-09-23 08:32:31 +02001338.. method:: SSLSocket.verify_client_post_handshake()
1339
1340 Requests post-handshake authentication (PHA) from a TLS 1.3 client. PHA
1341 can only be initiated for a TLS 1.3 connection from a server-side socket,
1342 after the initial TLS handshake and with PHA enabled on both sides, see
1343 :attr:`SSLContext.post_handshake_auth`.
1344
1345 The method does not perform a cert exchange immediately. The server-side
1346 sends a CertificateRequest during the next write event and expects the
1347 client to respond with a certificate on the next read event.
1348
1349 If any precondition isn't met (e.g. not TLS 1.3, PHA not enabled), an
1350 :exc:`SSLError` is raised.
1351
Christian Heimes9fb051f2018-09-23 08:32:31 +02001352 .. note::
1353 Only available with OpenSSL 1.1.1 and TLS 1.3 enabled. Without TLS 1.3
1354 support, the method raises :exc:`NotImplementedError`.
1355
Zhiming Wangae2ea332019-03-01 01:15:04 +08001356 .. versionadded:: 3.8
1357
Antoine Pitrou47e40422014-09-04 21:00:10 +02001358.. method:: SSLSocket.version()
1359
1360 Return the actual SSL protocol version negotiated by the connection
1361 as a string, or ``None`` is no secure connection is established.
1362 As of this writing, possible return values include ``"SSLv2"``,
1363 ``"SSLv3"``, ``"TLSv1"``, ``"TLSv1.1"`` and ``"TLSv1.2"``.
1364 Recent OpenSSL versions may define more return values.
1365
1366 .. versionadded:: 3.5
1367
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001368.. method:: SSLSocket.pending()
1369
1370 Returns the number of already decrypted bytes available for read, pending on
1371 the connection.
1372
Antoine Pitrouec883db2010-05-24 21:20:20 +00001373.. attribute:: SSLSocket.context
1374
1375 The :class:`SSLContext` object this SSL socket is tied to. If the SSL
Christian Heimes90f05a52018-02-27 09:21:34 +01001376 socket was created using the deprecated :func:`wrap_socket` function
Antoine Pitrouec883db2010-05-24 21:20:20 +00001377 (rather than :meth:`SSLContext.wrap_socket`), this is a custom context
1378 object created for this SSL socket.
1379
1380 .. versionadded:: 3.2
1381
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001382.. attribute:: SSLSocket.server_side
1383
1384 A boolean which is ``True`` for server-side sockets and ``False`` for
1385 client-side sockets.
1386
Victor Stinner41f92c22014-10-10 12:05:56 +02001387 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001388
1389.. attribute:: SSLSocket.server_hostname
1390
Victor Stinner41f92c22014-10-10 12:05:56 +02001391 Hostname of the server: :class:`str` type, or ``None`` for server-side
1392 socket or if the hostname was not specified in the constructor.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001393
Victor Stinner41f92c22014-10-10 12:05:56 +02001394 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001395
Christian Heimes11a14932018-02-24 02:35:08 +01001396 .. versionchanged:: 3.7
1397 The attribute is now always ASCII text. When ``server_hostname`` is
1398 an internationalized domain name (IDN), this attribute now stores the
1399 A-label form (``"xn--pythn-mua.org"``), rather than the U-label form
1400 (``"pythön.org"``).
1401
Christian Heimes99a65702016-09-10 23:44:53 +02001402.. attribute:: SSLSocket.session
1403
1404 The :class:`SSLSession` for this SSL connection. The session is available
1405 for client and server side sockets after the TLS handshake has been
1406 performed. For client sockets the session can be set before
1407 :meth:`~SSLSocket.do_handshake` has been called to reuse a session.
1408
1409 .. versionadded:: 3.6
1410
1411.. attribute:: SSLSocket.session_reused
1412
1413 .. versionadded:: 3.6
1414
Antoine Pitrouec883db2010-05-24 21:20:20 +00001415
Antoine Pitrou152efa22010-05-16 18:19:27 +00001416SSL Contexts
1417------------
1418
Antoine Pitroucafaad42010-05-24 15:58:43 +00001419.. versionadded:: 3.2
1420
Antoine Pitroub0182c82010-10-12 20:09:02 +00001421An SSL context holds various data longer-lived than single SSL connections,
1422such as SSL configuration options, certificate(s) and private key(s).
1423It also manages a cache of SSL sessions for server-side sockets, in order
1424to speed up repeated connections from the same clients.
1425
Christian Heimes598894f2016-09-05 23:19:05 +02001426.. class:: SSLContext(protocol=PROTOCOL_TLS)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001427
Christian Heimes598894f2016-09-05 23:19:05 +02001428 Create a new SSL context. You may pass *protocol* which must be one
Christian Heimes90f05a52018-02-27 09:21:34 +01001429 of the ``PROTOCOL_*`` constants defined in this module. The parameter
1430 specifies which version of the SSL protocol to use. Typically, the
1431 server chooses a particular protocol version, and the client must adapt
1432 to the server's choice. Most of the versions are not interoperable
1433 with the other versions. If not specified, the default is
1434 :data:`PROTOCOL_TLS`; it provides the most compatibility with other
1435 versions.
1436
1437 Here's a table showing which versions in a client (down the side) can connect
1438 to which versions in a server (along the top):
1439
1440 .. table::
1441
1442 ======================== ============ ============ ============= ========= =========== ===========
1443 *client* / **server** **SSLv2** **SSLv3** **TLS** [3]_ **TLSv1** **TLSv1.1** **TLSv1.2**
1444 ------------------------ ------------ ------------ ------------- --------- ----------- -----------
1445 *SSLv2* yes no no [1]_ no no no
1446 *SSLv3* no yes no [2]_ no no no
1447 *TLS* (*SSLv23*) [3]_ no [1]_ no [2]_ yes yes yes yes
1448 *TLSv1* no no yes yes no no
1449 *TLSv1.1* no no yes no yes no
1450 *TLSv1.2* no no yes no no yes
1451 ======================== ============ ============ ============= ========= =========== ===========
1452
1453 .. rubric:: Footnotes
1454 .. [1] :class:`SSLContext` disables SSLv2 with :data:`OP_NO_SSLv2` by default.
1455 .. [2] :class:`SSLContext` disables SSLv3 with :data:`OP_NO_SSLv3` by default.
1456 .. [3] TLS 1.3 protocol will be available with :data:`PROTOCOL_TLS` in
1457 OpenSSL >= 1.1.1. There is no dedicated PROTOCOL constant for just
1458 TLS 1.3.
Antoine Pitrou5bef4102013-11-23 16:16:29 +01001459
1460 .. seealso::
1461 :func:`create_default_context` lets the :mod:`ssl` module choose
1462 security settings for a given purpose.
Antoine Pitroub0182c82010-10-12 20:09:02 +00001463
Christian Heimes01113fa2016-09-05 23:23:24 +02001464 .. versionchanged:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +02001465
Christian Heimes358cfd42016-09-10 22:43:48 +02001466 The context is created with secure default values. The options
1467 :data:`OP_NO_COMPRESSION`, :data:`OP_CIPHER_SERVER_PREFERENCE`,
1468 :data:`OP_SINGLE_DH_USE`, :data:`OP_SINGLE_ECDH_USE`,
1469 :data:`OP_NO_SSLv2` (except for :data:`PROTOCOL_SSLv2`),
1470 and :data:`OP_NO_SSLv3` (except for :data:`PROTOCOL_SSLv3`) are
1471 set by default. The initial cipher suite list contains only ``HIGH``
1472 ciphers, no ``NULL`` ciphers and no ``MD5`` ciphers (except for
1473 :data:`PROTOCOL_SSLv2`).
Christian Heimes598894f2016-09-05 23:19:05 +02001474
Antoine Pitrou152efa22010-05-16 18:19:27 +00001475
1476:class:`SSLContext` objects have the following methods and attributes:
1477
Christian Heimes9a5395a2013-06-17 15:44:12 +02001478.. method:: SSLContext.cert_store_stats()
1479
1480 Get statistics about quantities of loaded X.509 certificates, count of
1481 X.509 certificates flagged as CA certificates and certificate revocation
1482 lists as dictionary.
1483
1484 Example for a context with one CA cert and one other cert::
1485
1486 >>> context.cert_store_stats()
1487 {'crl': 0, 'x509_ca': 1, 'x509': 2}
1488
1489 .. versionadded:: 3.4
1490
Christian Heimesefff7062013-11-21 03:35:02 +01001491
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001492.. method:: SSLContext.load_cert_chain(certfile, keyfile=None, password=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001493
1494 Load a private key and the corresponding certificate. The *certfile*
1495 string must be the path to a single file in PEM format containing the
1496 certificate as well as any number of CA certificates needed to establish
1497 the certificate's authenticity. The *keyfile* string, if present, must
1498 point to a file containing the private key in. Otherwise the private
1499 key will be taken from *certfile* as well. See the discussion of
1500 :ref:`ssl-certificates` for more information on how the certificate
1501 is stored in the *certfile*.
1502
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001503 The *password* argument may be a function to call to get the password for
1504 decrypting the private key. It will only be called if the private key is
1505 encrypted and a password is necessary. It will be called with no arguments,
1506 and it should return a string, bytes, or bytearray. If the return value is
1507 a string it will be encoded as UTF-8 before using it to decrypt the key.
1508 Alternatively a string, bytes, or bytearray value may be supplied directly
1509 as the *password* argument. It will be ignored if the private key is not
1510 encrypted and no password is needed.
1511
1512 If the *password* argument is not specified and a password is required,
1513 OpenSSL's built-in password prompting mechanism will be used to
1514 interactively prompt the user for a password.
1515
Antoine Pitrou152efa22010-05-16 18:19:27 +00001516 An :class:`SSLError` is raised if the private key doesn't
1517 match with the certificate.
1518
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001519 .. versionchanged:: 3.3
1520 New optional argument *password*.
1521
Christian Heimes72d28502013-11-23 13:56:58 +01001522.. method:: SSLContext.load_default_certs(purpose=Purpose.SERVER_AUTH)
1523
1524 Load a set of default "certification authority" (CA) certificates from
1525 default locations. On Windows it loads CA certs from the ``CA`` and
1526 ``ROOT`` system stores. On other systems it calls
1527 :meth:`SSLContext.set_default_verify_paths`. In the future the method may
1528 load CA certificates from other locations, too.
1529
1530 The *purpose* flag specifies what kind of CA certificates are loaded. The
1531 default settings :data:`Purpose.SERVER_AUTH` loads certificates, that are
1532 flagged and trusted for TLS web server authentication (client side
Christian Heimes6b2ff982013-11-23 14:42:01 +01001533 sockets). :data:`Purpose.CLIENT_AUTH` loads CA certificates for client
Christian Heimes72d28502013-11-23 13:56:58 +01001534 certificate verification on the server side.
1535
1536 .. versionadded:: 3.4
1537
Christian Heimesefff7062013-11-21 03:35:02 +01001538.. method:: SSLContext.load_verify_locations(cafile=None, capath=None, cadata=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001539
1540 Load a set of "certification authority" (CA) certificates used to validate
1541 other peers' certificates when :data:`verify_mode` is other than
1542 :data:`CERT_NONE`. At least one of *cafile* or *capath* must be specified.
1543
Christian Heimes22587792013-11-21 23:56:13 +01001544 This method can also load certification revocation lists (CRLs) in PEM or
Donald Stufft8b852f12014-05-20 12:58:38 -04001545 DER format. In order to make use of CRLs, :attr:`SSLContext.verify_flags`
Christian Heimes22587792013-11-21 23:56:13 +01001546 must be configured properly.
1547
Christian Heimes3e738f92013-06-09 18:07:16 +02001548 The *cafile* string, if present, is the path to a file of concatenated
Antoine Pitrou152efa22010-05-16 18:19:27 +00001549 CA certificates in PEM format. See the discussion of
1550 :ref:`ssl-certificates` for more information about how to arrange the
1551 certificates in this file.
1552
1553 The *capath* string, if present, is
1554 the path to a directory containing several CA certificates in PEM format,
1555 following an `OpenSSL specific layout
Sanyam Khurana338cd832018-01-20 05:55:37 +05301556 <https://www.openssl.org/docs/manmaster/man3/SSL_CTX_load_verify_locations.html>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001557
Christian Heimesefff7062013-11-21 03:35:02 +01001558 The *cadata* object, if present, is either an ASCII string of one or more
Serhiy Storchakab757c832014-12-05 22:25:22 +02001559 PEM-encoded certificates or a :term:`bytes-like object` of DER-encoded
Christian Heimesefff7062013-11-21 03:35:02 +01001560 certificates. Like with *capath* extra lines around PEM-encoded
1561 certificates are ignored but at least one certificate must be present.
1562
1563 .. versionchanged:: 3.4
1564 New optional argument *cadata*
1565
Christian Heimes9a5395a2013-06-17 15:44:12 +02001566.. method:: SSLContext.get_ca_certs(binary_form=False)
1567
1568 Get a list of loaded "certification authority" (CA) certificates. If the
1569 ``binary_form`` parameter is :const:`False` each list
1570 entry is a dict like the output of :meth:`SSLSocket.getpeercert`. Otherwise
1571 the method returns a list of DER-encoded certificates. The returned list
1572 does not contain certificates from *capath* unless a certificate was
1573 requested and loaded by a SSL connection.
1574
Antoine Pitrou97aa9532015-04-13 21:06:15 +02001575 .. note::
1576 Certificates in a capath directory aren't loaded unless they have
1577 been used at least once.
1578
Larry Hastingsd36fc432013-08-03 02:49:53 -07001579 .. versionadded:: 3.4
Christian Heimes9a5395a2013-06-17 15:44:12 +02001580
Christian Heimes25bfcd52016-09-06 00:04:45 +02001581.. method:: SSLContext.get_ciphers()
1582
1583 Get a list of enabled ciphers. The list is in order of cipher priority.
1584 See :meth:`SSLContext.set_ciphers`.
1585
1586 Example::
1587
1588 >>> ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
1589 >>> ctx.set_ciphers('ECDHE+AESGCM:!ECDSA')
Christian Heimesb8d0fa02021-04-17 15:49:50 +02001590 >>> ctx.get_ciphers()
Christian Heimes25bfcd52016-09-06 00:04:45 +02001591 [{'aead': True,
1592 'alg_bits': 256,
1593 'auth': 'auth-rsa',
1594 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA '
1595 'Enc=AESGCM(256) Mac=AEAD',
1596 'digest': None,
1597 'id': 50380848,
1598 'kea': 'kx-ecdhe',
1599 'name': 'ECDHE-RSA-AES256-GCM-SHA384',
1600 'protocol': 'TLSv1.2',
1601 'strength_bits': 256,
1602 'symmetric': 'aes-256-gcm'},
1603 {'aead': True,
1604 'alg_bits': 128,
1605 'auth': 'auth-rsa',
1606 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA '
1607 'Enc=AESGCM(128) Mac=AEAD',
1608 'digest': None,
1609 'id': 50380847,
1610 'kea': 'kx-ecdhe',
1611 'name': 'ECDHE-RSA-AES128-GCM-SHA256',
1612 'protocol': 'TLSv1.2',
1613 'strength_bits': 128,
1614 'symmetric': 'aes-128-gcm'}]
1615
Christian Heimes25bfcd52016-09-06 00:04:45 +02001616 .. versionadded:: 3.6
1617
Antoine Pitrou664c2d12010-11-17 20:29:42 +00001618.. method:: SSLContext.set_default_verify_paths()
1619
1620 Load a set of default "certification authority" (CA) certificates from
1621 a filesystem path defined when building the OpenSSL library. Unfortunately,
1622 there's no easy way to know whether this method succeeds: no error is
1623 returned if no certificates are to be found. When the OpenSSL library is
1624 provided as part of the operating system, though, it is likely to be
1625 configured properly.
1626
Antoine Pitrou152efa22010-05-16 18:19:27 +00001627.. method:: SSLContext.set_ciphers(ciphers)
1628
1629 Set the available ciphers for sockets created with this context.
1630 It should be a string in the `OpenSSL cipher list format
Marcin Niemira9c5ba092018-07-08 00:24:20 +02001631 <https://www.openssl.org/docs/manmaster/man1/ciphers.html>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001632 If no cipher can be selected (because compile-time options or other
1633 configuration forbids use of all the specified ciphers), an
1634 :class:`SSLError` will be raised.
1635
1636 .. note::
1637 when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will
1638 give the currently selected cipher.
1639
Christian Heimesb8d0fa02021-04-17 15:49:50 +02001640 TLS 1.3 cipher suites cannot be disabled with
1641 :meth:`~SSLContext.set_ciphers`.
Christian Heimese8eb6cb2018-05-22 22:50:12 +02001642
Benjamin Petersoncca27322015-01-23 16:35:37 -05001643.. method:: SSLContext.set_alpn_protocols(protocols)
1644
1645 Specify which protocols the socket should advertise during the SSL/TLS
1646 handshake. It should be a list of ASCII strings, like ``['http/1.1',
1647 'spdy/2']``, ordered by preference. The selection of a protocol will happen
1648 during the handshake, and will play out according to :rfc:`7301`. After a
1649 successful handshake, the :meth:`SSLSocket.selected_alpn_protocol` method will
1650 return the agreed-upon protocol.
1651
1652 This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is
Serhiy Storchaka138ccbb2019-11-12 16:57:03 +02001653 ``False``.
Benjamin Petersoncca27322015-01-23 16:35:37 -05001654
1655 .. versionadded:: 3.5
1656
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001657.. method:: SSLContext.set_npn_protocols(protocols)
1658
R David Murrayc7f75792013-06-26 15:11:12 -04001659 Specify which protocols the socket should advertise during the SSL/TLS
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001660 handshake. It should be a list of strings, like ``['http/1.1', 'spdy/2']``,
1661 ordered by preference. The selection of a protocol will happen during the
Sanyam Khurana338cd832018-01-20 05:55:37 +05301662 handshake, and will play out according to the `Application Layer Protocol Negotiation
1663 <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_. After a
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001664 successful handshake, the :meth:`SSLSocket.selected_npn_protocol` method will
1665 return the agreed-upon protocol.
1666
1667 This method will raise :exc:`NotImplementedError` if :data:`HAS_NPN` is
Serhiy Storchaka138ccbb2019-11-12 16:57:03 +02001668 ``False``.
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001669
1670 .. versionadded:: 3.3
1671
Christian Heimes11a14932018-02-24 02:35:08 +01001672.. attribute:: SSLContext.sni_callback
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001673
1674 Register a callback function that will be called after the TLS Client Hello
1675 handshake message has been received by the SSL/TLS server when the TLS client
1676 specifies a server name indication. The server name indication mechanism
1677 is specified in :rfc:`6066` section 3 - Server Name Indication.
1678
Christian Heimes11a14932018-02-24 02:35:08 +01001679 Only one callback can be set per ``SSLContext``. If *sni_callback*
1680 is set to ``None`` then the callback is disabled. Calling this function a
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001681 subsequent time will disable the previously registered callback.
1682
Christian Heimes11a14932018-02-24 02:35:08 +01001683 The callback function will be called with three
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001684 arguments; the first being the :class:`ssl.SSLSocket`, the second is a string
1685 that represents the server name that the client is intending to communicate
Antoine Pitrou50b24d02013-04-11 20:48:42 +02001686 (or :const:`None` if the TLS Client Hello does not contain a server name)
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001687 and the third argument is the original :class:`SSLContext`. The server name
Christian Heimes11a14932018-02-24 02:35:08 +01001688 argument is text. For internationalized domain name, the server
1689 name is an IDN A-label (``"xn--pythn-mua.org"``).
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001690
1691 A typical use of this callback is to change the :class:`ssl.SSLSocket`'s
1692 :attr:`SSLSocket.context` attribute to a new object of type
1693 :class:`SSLContext` representing a certificate chain that matches the server
1694 name.
1695
1696 Due to the early negotiation phase of the TLS connection, only limited
1697 methods and attributes are usable like
Benjamin Petersoncca27322015-01-23 16:35:37 -05001698 :meth:`SSLSocket.selected_alpn_protocol` and :attr:`SSLSocket.context`.
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001699 :meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.getpeercert`,
1700 :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compress` methods require that
1701 the TLS connection has progressed beyond the TLS Client Hello and therefore
1702 will not contain return meaningful values nor can they be called safely.
1703
Christian Heimes11a14932018-02-24 02:35:08 +01001704 The *sni_callback* function must return ``None`` to allow the
Terry Jan Reedy8e7586b2013-03-11 18:38:13 -04001705 TLS negotiation to continue. If a TLS failure is required, a constant
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001706 :const:`ALERT_DESCRIPTION_* <ALERT_DESCRIPTION_INTERNAL_ERROR>` can be
1707 returned. Other return values will result in a TLS fatal error with
1708 :const:`ALERT_DESCRIPTION_INTERNAL_ERROR`.
1709
Christian Heimes11a14932018-02-24 02:35:08 +01001710 If an exception is raised from the *sni_callback* function the TLS
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001711 connection will terminate with a fatal TLS alert message
1712 :const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`.
1713
1714 This method will raise :exc:`NotImplementedError` if the OpenSSL library
1715 had OPENSSL_NO_TLSEXT defined when it was built.
1716
Christian Heimes11a14932018-02-24 02:35:08 +01001717 .. versionadded:: 3.7
1718
1719.. attribute:: SSLContext.set_servername_callback(server_name_callback)
1720
1721 This is a legacy API retained for backwards compatibility. When possible,
1722 you should use :attr:`sni_callback` instead. The given *server_name_callback*
1723 is similar to *sni_callback*, except that when the server hostname is an
1724 IDN-encoded internationalized domain name, the *server_name_callback*
1725 receives a decoded U-label (``"pythön.org"``).
1726
1727 If there is an decoding error on the server name, the TLS connection will
1728 terminate with an :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` fatal TLS
1729 alert message to the client.
1730
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001731 .. versionadded:: 3.4
1732
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001733.. method:: SSLContext.load_dh_params(dhfile)
1734
Matt Eaton9cf8c422018-03-10 19:00:04 -06001735 Load the key generation parameters for Diffie-Hellman (DH) key exchange.
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001736 Using DH key exchange improves forward secrecy at the expense of
1737 computational resources (both on the server and on the client).
1738 The *dhfile* parameter should be the path to a file containing DH
1739 parameters in PEM format.
1740
1741 This setting doesn't apply to client sockets. You can also use the
1742 :data:`OP_SINGLE_DH_USE` option to further improve security.
1743
1744 .. versionadded:: 3.3
1745
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001746.. method:: SSLContext.set_ecdh_curve(curve_name)
1747
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001748 Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH) key
1749 exchange. ECDH is significantly faster than regular DH while arguably
1750 as secure. The *curve_name* parameter should be a string describing
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001751 a well-known elliptic curve, for example ``prime256v1`` for a widely
1752 supported curve.
1753
1754 This setting doesn't apply to client sockets. You can also use the
1755 :data:`OP_SINGLE_ECDH_USE` option to further improve security.
1756
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +03001757 This method is not available if :data:`HAS_ECDH` is ``False``.
Antoine Pitrou501da612011-12-21 09:27:41 +01001758
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001759 .. versionadded:: 3.3
1760
1761 .. seealso::
Sanyam Khurana1b4587a2017-12-06 22:09:33 +05301762 `SSL/TLS & Perfect Forward Secrecy <https://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy>`_
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001763 Vincent Bernat.
1764
Antoine Pitroud5323212010-10-22 18:19:07 +00001765.. method:: SSLContext.wrap_socket(sock, server_side=False, \
1766 do_handshake_on_connect=True, suppress_ragged_eofs=True, \
Christian Heimes99a65702016-09-10 23:44:53 +02001767 server_hostname=None, session=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001768
Christian Heimes4df60f12017-09-15 20:26:05 +02001769 Wrap an existing Python socket *sock* and return an instance of
Christian Heimes90f05a52018-02-27 09:21:34 +01001770 :attr:`SSLContext.sslsocket_class` (default :class:`SSLSocket`). The
1771 returned SSL socket is tied to the context, its settings and certificates.
1772 *sock* must be a :data:`~socket.SOCK_STREAM` socket; other
1773 socket types are unsupported.
Antoine Pitrou3e86ba42013-12-28 17:26:33 +01001774
Christian Heimes90f05a52018-02-27 09:21:34 +01001775 The parameter ``server_side`` is a boolean which identifies whether
1776 server-side or client-side behavior is desired from this socket.
1777
1778 For client-side sockets, the context construction is lazy; if the
1779 underlying socket isn't connected yet, the context construction will be
1780 performed after :meth:`connect` is called on the socket. For
1781 server-side sockets, if the socket has no remote peer, it is assumed
1782 to be a listening socket, and the server-side SSL wrapping is
1783 automatically performed on client connections accepted via the
1784 :meth:`accept` method. The method may raise :exc:`SSLError`.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001785
Antoine Pitroud5323212010-10-22 18:19:07 +00001786 On client connections, the optional parameter *server_hostname* specifies
1787 the hostname of the service which we are connecting to. This allows a
1788 single server to host multiple SSL-based services with distinct certificates,
Benjamin Peterson7243b572014-11-23 17:04:34 -06001789 quite similarly to HTTP virtual hosts. Specifying *server_hostname* will
1790 raise a :exc:`ValueError` if *server_side* is true.
1791
Christian Heimes90f05a52018-02-27 09:21:34 +01001792 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
1793 handshake automatically after doing a :meth:`socket.connect`, or whether the
1794 application program will call it explicitly, by invoking the
1795 :meth:`SSLSocket.do_handshake` method. Calling
1796 :meth:`SSLSocket.do_handshake` explicitly gives the program control over the
1797 blocking behavior of the socket I/O involved in the handshake.
1798
1799 The parameter ``suppress_ragged_eofs`` specifies how the
1800 :meth:`SSLSocket.recv` method should signal unexpected EOF from the other end
1801 of the connection. If specified as :const:`True` (the default), it returns a
1802 normal EOF (an empty bytes object) in response to unexpected EOF errors
1803 raised from the underlying socket; if :const:`False`, it will raise the
1804 exceptions back to the caller.
1805
Christian Heimes99a65702016-09-10 23:44:53 +02001806 *session*, see :attr:`~SSLSocket.session`.
1807
Benjamin Peterson7243b572014-11-23 17:04:34 -06001808 .. versionchanged:: 3.5
1809 Always allow a server_hostname to be passed, even if OpenSSL does not
1810 have SNI.
Antoine Pitroud5323212010-10-22 18:19:07 +00001811
Christian Heimes99a65702016-09-10 23:44:53 +02001812 .. versionchanged:: 3.6
1813 *session* argument was added.
1814
Christian Heimes4df60f12017-09-15 20:26:05 +02001815 .. versionchanged:: 3.7
1816 The method returns on instance of :attr:`SSLContext.sslsocket_class`
1817 instead of hard-coded :class:`SSLSocket`.
1818
1819.. attribute:: SSLContext.sslsocket_class
1820
Toshio Kuratomi7b3a0282019-05-06 15:28:14 -05001821 The return type of :meth:`SSLContext.wrap_socket`, defaults to
Christian Heimes4df60f12017-09-15 20:26:05 +02001822 :class:`SSLSocket`. The attribute can be overridden on instance of class
1823 in order to return a custom subclass of :class:`SSLSocket`.
1824
1825 .. versionadded:: 3.7
1826
Victor Stinner805b2622014-10-10 12:49:08 +02001827.. method:: SSLContext.wrap_bio(incoming, outgoing, server_side=False, \
Christian Heimes99a65702016-09-10 23:44:53 +02001828 server_hostname=None, session=None)
Victor Stinner805b2622014-10-10 12:49:08 +02001829
Christian Heimes4df60f12017-09-15 20:26:05 +02001830 Wrap the BIO objects *incoming* and *outgoing* and return an instance of
Toshio Kuratomi7b3a0282019-05-06 15:28:14 -05001831 :attr:`SSLContext.sslobject_class` (default :class:`SSLObject`). The SSL
Christian Heimes4df60f12017-09-15 20:26:05 +02001832 routines will read input data from the incoming BIO and write data to the
1833 outgoing BIO.
Victor Stinner805b2622014-10-10 12:49:08 +02001834
Christian Heimes99a65702016-09-10 23:44:53 +02001835 The *server_side*, *server_hostname* and *session* parameters have the
1836 same meaning as in :meth:`SSLContext.wrap_socket`.
1837
1838 .. versionchanged:: 3.6
1839 *session* argument was added.
Victor Stinner805b2622014-10-10 12:49:08 +02001840
Christian Heimes4df60f12017-09-15 20:26:05 +02001841 .. versionchanged:: 3.7
1842 The method returns on instance of :attr:`SSLContext.sslobject_class`
1843 instead of hard-coded :class:`SSLObject`.
1844
1845.. attribute:: SSLContext.sslobject_class
1846
1847 The return type of :meth:`SSLContext.wrap_bio`, defaults to
1848 :class:`SSLObject`. The attribute can be overridden on instance of class
1849 in order to return a custom subclass of :class:`SSLObject`.
1850
1851 .. versionadded:: 3.7
1852
Antoine Pitroub0182c82010-10-12 20:09:02 +00001853.. method:: SSLContext.session_stats()
1854
1855 Get statistics about the SSL sessions created or managed by this context.
Christian Heimesb8d0fa02021-04-17 15:49:50 +02001856 A dictionary is returned which maps the names of each `piece of information <https://www.openssl.org/docs/man1.1.1/ssl/SSL_CTX_sess_number.html>`_ to their
Antoine Pitroub0182c82010-10-12 20:09:02 +00001857 numeric values. For example, here is the total number of hits and misses
1858 in the session cache since the context was created::
1859
1860 >>> stats = context.session_stats()
1861 >>> stats['hits'], stats['misses']
1862 (0, 0)
1863
Christian Heimes1aa9a752013-12-02 02:41:19 +01001864.. attribute:: SSLContext.check_hostname
1865
Ville Skyttä9798cef2021-03-27 16:20:11 +02001866 Whether to match the peer cert's hostname in
Christian Heimes1aa9a752013-12-02 02:41:19 +01001867 :meth:`SSLSocket.do_handshake`. The context's
1868 :attr:`~SSLContext.verify_mode` must be set to :data:`CERT_OPTIONAL` or
1869 :data:`CERT_REQUIRED`, and you must pass *server_hostname* to
Christian Heimese82c0342017-09-15 20:29:57 +02001870 :meth:`~SSLContext.wrap_socket` in order to match the hostname. Enabling
1871 hostname checking automatically sets :attr:`~SSLContext.verify_mode` from
1872 :data:`CERT_NONE` to :data:`CERT_REQUIRED`. It cannot be set back to
Christian Heimes894d0f72019-09-12 13:10:05 +02001873 :data:`CERT_NONE` as long as hostname checking is enabled. The
1874 :data:`PROTOCOL_TLS_CLIENT` protocol enables hostname checking by default.
1875 With other protocols, hostname checking must be enabled explicitly.
Christian Heimes1aa9a752013-12-02 02:41:19 +01001876
1877 Example::
1878
1879 import socket, ssl
1880
Christian Heimes894d0f72019-09-12 13:10:05 +02001881 context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
Christian Heimes1aa9a752013-12-02 02:41:19 +01001882 context.verify_mode = ssl.CERT_REQUIRED
1883 context.check_hostname = True
1884 context.load_default_certs()
1885
1886 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Berker Peksag38bf87c2014-07-17 05:00:36 +03001887 ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
1888 ssl_sock.connect(('www.verisign.com', 443))
Christian Heimes1aa9a752013-12-02 02:41:19 +01001889
1890 .. versionadded:: 3.4
1891
Christian Heimese82c0342017-09-15 20:29:57 +02001892 .. versionchanged:: 3.7
1893
1894 :attr:`~SSLContext.verify_mode` is now automatically changed
1895 to :data:`CERT_REQUIRED` when hostname checking is enabled and
1896 :attr:`~SSLContext.verify_mode` is :data:`CERT_NONE`. Previously
1897 the same operation would have failed with a :exc:`ValueError`.
1898
Christian Heimesc7f70692019-05-31 11:44:05 +02001899.. attribute:: SSLContext.keylog_filename
1900
1901 Write TLS keys to a keylog file, whenever key material is generated or
1902 received. The keylog file is designed for debugging purposes only. The
1903 file format is specified by NSS and used by many traffic analyzers such
1904 as Wireshark. The log file is opened in append-only mode. Writes are
1905 synchronized between threads, but not between processes.
1906
1907 .. versionadded:: 3.8
1908
Christian Heimes698dde12018-02-27 11:54:43 +01001909.. attribute:: SSLContext.maximum_version
1910
1911 A :class:`TLSVersion` enum member representing the highest supported
1912 TLS version. The value defaults to :attr:`TLSVersion.MAXIMUM_SUPPORTED`.
1913 The attribute is read-only for protocols other than :attr:`PROTOCOL_TLS`,
1914 :attr:`PROTOCOL_TLS_CLIENT`, and :attr:`PROTOCOL_TLS_SERVER`.
1915
1916 The attributes :attr:`~SSLContext.maximum_version`,
1917 :attr:`~SSLContext.minimum_version` and
1918 :attr:`SSLContext.options` all affect the supported SSL
1919 and TLS versions of the context. The implementation does not prevent
1920 invalid combination. For example a context with
1921 :attr:`OP_NO_TLSv1_2` in :attr:`~SSLContext.options` and
1922 :attr:`~SSLContext.maximum_version` set to :attr:`TLSVersion.TLSv1_2`
1923 will not be able to establish a TLS 1.2 connection.
1924
Zhiming Wangae2ea332019-03-01 01:15:04 +08001925 .. versionadded:: 3.7
1926
Christian Heimes698dde12018-02-27 11:54:43 +01001927.. attribute:: SSLContext.minimum_version
1928
1929 Like :attr:`SSLContext.maximum_version` except it is the lowest
1930 supported version or :attr:`TLSVersion.MINIMUM_SUPPORTED`.
1931
Zhiming Wangae2ea332019-03-01 01:15:04 +08001932 .. versionadded:: 3.7
1933
Christian Heimes78c7d522019-06-03 21:00:10 +02001934.. attribute:: SSLContext.num_tickets
1935
1936 Control the number of TLS 1.3 session tickets of a
1937 :attr:`TLS_PROTOCOL_SERVER` context. The setting has no impact on TLS
1938 1.0 to 1.2 connections.
1939
Christian Heimes78c7d522019-06-03 21:00:10 +02001940 .. versionadded:: 3.8
1941
Antoine Pitroub5218772010-05-21 09:56:06 +00001942.. attribute:: SSLContext.options
1943
1944 An integer representing the set of SSL options enabled on this context.
1945 The default value is :data:`OP_ALL`, but you can specify other options
1946 such as :data:`OP_NO_SSLv2` by ORing them together.
1947
Christian Heimes3aeacad2016-09-10 00:19:35 +02001948 .. versionchanged:: 3.6
1949 :attr:`SSLContext.options` returns :class:`Options` flags:
1950
Marco Buttu7b2491a2017-04-13 16:17:59 +02001951 >>> ssl.create_default_context().options # doctest: +SKIP
Christian Heimes3aeacad2016-09-10 00:19:35 +02001952 <Options.OP_ALL|OP_NO_SSLv3|OP_NO_SSLv2|OP_NO_COMPRESSION: 2197947391>
1953
Christian Heimes9fb051f2018-09-23 08:32:31 +02001954.. attribute:: SSLContext.post_handshake_auth
1955
1956 Enable TLS 1.3 post-handshake client authentication. Post-handshake auth
1957 is disabled by default and a server can only request a TLS client
1958 certificate during the initial handshake. When enabled, a server may
1959 request a TLS client certificate at any time after the handshake.
1960
1961 When enabled on client-side sockets, the client signals the server that
1962 it supports post-handshake authentication.
1963
1964 When enabled on server-side sockets, :attr:`SSLContext.verify_mode` must
1965 be set to :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`, too. The
1966 actual client cert exchange is delayed until
1967 :meth:`SSLSocket.verify_client_post_handshake` is called and some I/O is
1968 performed.
1969
Zhiming Wangae2ea332019-03-01 01:15:04 +08001970 .. versionadded:: 3.8
1971
Antoine Pitrou152efa22010-05-16 18:19:27 +00001972.. attribute:: SSLContext.protocol
1973
1974 The protocol version chosen when constructing the context. This attribute
1975 is read-only.
1976
Christian Heimes61d478c2018-01-27 15:51:38 +01001977.. attribute:: SSLContext.hostname_checks_common_name
1978
1979 Whether :attr:`~SSLContext.check_hostname` falls back to verify the cert's
1980 subject common name in the absence of a subject alternative name
1981 extension (default: true).
1982
Zhiming Wangae2ea332019-03-01 01:15:04 +08001983 .. versionadded:: 3.7
1984
Christian Heimesb467d9a2021-04-17 10:07:19 +02001985 .. versionchanged:: 3.10
1986
1987 The flag had no effect with OpenSSL before version 1.1.1k. Python 3.8.9,
1988 3.9.3, and 3.10 include workarounds for previous versions.
1989
matthewhughes9348e836bb2020-07-17 09:59:15 +01001990.. attribute:: SSLContext.security_level
1991
1992 An integer representing the `security level
1993 <https://www.openssl.org/docs/manmaster/man3/SSL_CTX_get_security_level.html>`_
1994 for the context. This attribute is read-only.
1995
matthewhughes9348e836bb2020-07-17 09:59:15 +01001996 .. versionadded:: 3.10
1997
Christian Heimes22587792013-11-21 23:56:13 +01001998.. attribute:: SSLContext.verify_flags
1999
2000 The flags for certificate verification operations. You can set flags like
2001 :data:`VERIFY_CRL_CHECK_LEAF` by ORing them together. By default OpenSSL
2002 does neither require nor verify certificate revocation lists (CRLs).
2003
2004 .. versionadded:: 3.4
2005
Christian Heimes3aeacad2016-09-10 00:19:35 +02002006 .. versionchanged:: 3.6
2007 :attr:`SSLContext.verify_flags` returns :class:`VerifyFlags` flags:
2008
Marco Buttu7b2491a2017-04-13 16:17:59 +02002009 >>> ssl.create_default_context().verify_flags # doctest: +SKIP
Ethan Furmanb7751062021-03-30 21:17:26 -07002010 ssl.VERIFY_X509_TRUSTED_FIRST
Christian Heimes3aeacad2016-09-10 00:19:35 +02002011
Antoine Pitrou152efa22010-05-16 18:19:27 +00002012.. attribute:: SSLContext.verify_mode
2013
2014 Whether to try to verify other peers' certificates and how to behave
2015 if verification fails. This attribute must be one of
2016 :data:`CERT_NONE`, :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`.
2017
Christian Heimes3aeacad2016-09-10 00:19:35 +02002018 .. versionchanged:: 3.6
2019 :attr:`SSLContext.verify_mode` returns :class:`VerifyMode` enum:
2020
2021 >>> ssl.create_default_context().verify_mode
Ethan Furmanb7751062021-03-30 21:17:26 -07002022 ssl.CERT_REQUIRED
Antoine Pitrou152efa22010-05-16 18:19:27 +00002023
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002024.. index:: single: certificates
2025
2026.. index:: single: X509 certificate
2027
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002028.. _ssl-certificates:
2029
Thomas Woutersed03b412007-08-28 21:37:11 +00002030Certificates
2031------------
2032
Georg Brandl7f01a132009-09-16 15:58:14 +00002033Certificates in general are part of a public-key / private-key system. In this
2034system, each *principal*, (which may be a machine, or a person, or an
2035organization) is assigned a unique two-part encryption key. One part of the key
2036is public, and is called the *public key*; the other part is kept secret, and is
2037called the *private key*. The two parts are related, in that if you encrypt a
2038message with one of the parts, you can decrypt it with the other part, and
2039**only** with the other part.
Thomas Woutersed03b412007-08-28 21:37:11 +00002040
Georg Brandl7f01a132009-09-16 15:58:14 +00002041A certificate contains information about two principals. It contains the name
2042of a *subject*, and the subject's public key. It also contains a statement by a
Andrés Delfino50924392018-06-18 01:34:30 -03002043second principal, the *issuer*, that the subject is who they claim to be, and
Georg Brandl7f01a132009-09-16 15:58:14 +00002044that this is indeed the subject's public key. The issuer's statement is signed
2045with the issuer's private key, which only the issuer knows. However, anyone can
2046verify the issuer's statement by finding the issuer's public key, decrypting the
2047statement with it, and comparing it to the other information in the certificate.
2048The certificate also contains information about the time period over which it is
2049valid. This is expressed as two fields, called "notBefore" and "notAfter".
Thomas Woutersed03b412007-08-28 21:37:11 +00002050
Georg Brandl7f01a132009-09-16 15:58:14 +00002051In the Python use of certificates, a client or server can use a certificate to
2052prove who they are. The other side of a network connection can also be required
2053to produce a certificate, and that certificate can be validated to the
2054satisfaction of the client or server that requires such validation. The
2055connection attempt can be set to raise an exception if the validation fails.
2056Validation is done automatically, by the underlying OpenSSL framework; the
2057application need not concern itself with its mechanics. But the application
2058does usually need to provide sets of certificates to allow this process to take
2059place.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002060
Georg Brandl7f01a132009-09-16 15:58:14 +00002061Python uses files to contain certificates. They should be formatted as "PEM"
2062(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
2063and a footer line::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002064
2065 -----BEGIN CERTIFICATE-----
2066 ... (certificate in base64 PEM encoding) ...
2067 -----END CERTIFICATE-----
2068
Antoine Pitrou152efa22010-05-16 18:19:27 +00002069Certificate chains
2070^^^^^^^^^^^^^^^^^^
2071
Georg Brandl7f01a132009-09-16 15:58:14 +00002072The Python files which contain certificates can contain a sequence of
2073certificates, sometimes called a *certificate chain*. This chain should start
2074with the specific certificate for the principal who "is" the client or server,
2075and then the certificate for the issuer of that certificate, and then the
2076certificate for the issuer of *that* certificate, and so on up the chain till
2077you get to a certificate which is *self-signed*, that is, a certificate which
2078has the same subject and issuer, sometimes called a *root certificate*. The
2079certificates should just be concatenated together in the certificate file. For
2080example, suppose we had a three certificate chain, from our server certificate
2081to the certificate of the certification authority that signed our server
2082certificate, to the root certificate of the agency which issued the
2083certification authority's certificate::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002084
2085 -----BEGIN CERTIFICATE-----
2086 ... (certificate for your server)...
2087 -----END CERTIFICATE-----
2088 -----BEGIN CERTIFICATE-----
2089 ... (the certificate for the CA)...
2090 -----END CERTIFICATE-----
2091 -----BEGIN CERTIFICATE-----
2092 ... (the root certificate for the CA's issuer)...
2093 -----END CERTIFICATE-----
2094
Antoine Pitrou152efa22010-05-16 18:19:27 +00002095CA certificates
2096^^^^^^^^^^^^^^^
2097
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002098If you are going to require validation of the other side of the connection's
2099certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandl7f01a132009-09-16 15:58:14 +00002100chains for each issuer you are willing to trust. Again, this file just contains
2101these chains concatenated together. For validation, Python will use the first
Donald Stufft41374652014-03-24 19:26:03 -04002102chain it finds in the file which matches. The platform's certificates file can
2103be used by calling :meth:`SSLContext.load_default_certs`, this is done
2104automatically with :func:`.create_default_context`.
Thomas Woutersed03b412007-08-28 21:37:11 +00002105
Antoine Pitrou152efa22010-05-16 18:19:27 +00002106Combined key and certificate
2107^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2108
2109Often the private key is stored in the same file as the certificate; in this
2110case, only the ``certfile`` parameter to :meth:`SSLContext.load_cert_chain`
2111and :func:`wrap_socket` needs to be passed. If the private key is stored
2112with the certificate, it should come before the first certificate in
2113the certificate chain::
2114
2115 -----BEGIN RSA PRIVATE KEY-----
2116 ... (private key in base64 encoding) ...
2117 -----END RSA PRIVATE KEY-----
2118 -----BEGIN CERTIFICATE-----
2119 ... (certificate in base64 PEM encoding) ...
2120 -----END CERTIFICATE-----
2121
2122Self-signed certificates
2123^^^^^^^^^^^^^^^^^^^^^^^^
2124
Georg Brandl7f01a132009-09-16 15:58:14 +00002125If you are going to create a server that provides SSL-encrypted connection
2126services, you will need to acquire a certificate for that service. There are
2127many ways of acquiring appropriate certificates, such as buying one from a
2128certification authority. Another common practice is to generate a self-signed
2129certificate. The simplest way to do this is with the OpenSSL package, using
2130something like the following::
Thomas Woutersed03b412007-08-28 21:37:11 +00002131
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002132 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
2133 Generating a 1024 bit RSA private key
2134 .......++++++
2135 .............................++++++
2136 writing new private key to 'cert.pem'
2137 -----
2138 You are about to be asked to enter information that will be incorporated
2139 into your certificate request.
2140 What you are about to enter is what is called a Distinguished Name or a DN.
2141 There are quite a few fields but you can leave some blank
2142 For some fields there will be a default value,
2143 If you enter '.', the field will be left blank.
2144 -----
2145 Country Name (2 letter code) [AU]:US
2146 State or Province Name (full name) [Some-State]:MyState
2147 Locality Name (eg, city) []:Some City
2148 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
2149 Organizational Unit Name (eg, section) []:My Group
2150 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
2151 Email Address []:ops@myserver.mygroup.myorganization.com
2152 %
Thomas Woutersed03b412007-08-28 21:37:11 +00002153
Georg Brandl7f01a132009-09-16 15:58:14 +00002154The disadvantage of a self-signed certificate is that it is its own root
2155certificate, and no one else will have it in their cache of known (and trusted)
2156root certificates.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002157
2158
Thomas Woutersed03b412007-08-28 21:37:11 +00002159Examples
2160--------
2161
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002162Testing for SSL support
2163^^^^^^^^^^^^^^^^^^^^^^^
2164
Georg Brandl7f01a132009-09-16 15:58:14 +00002165To test for the presence of SSL support in a Python installation, user code
2166should use the following idiom::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002167
2168 try:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002169 import ssl
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002170 except ImportError:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002171 pass
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002172 else:
Serhiy Storchakadba90392016-05-10 12:01:23 +03002173 ... # do something that requires SSL support
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002174
2175Client-side operation
2176^^^^^^^^^^^^^^^^^^^^^
2177
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002178This example creates a SSL context with the recommended security settings
2179for client sockets, including automatic certificate verification::
Thomas Woutersed03b412007-08-28 21:37:11 +00002180
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002181 >>> context = ssl.create_default_context()
Thomas Woutersed03b412007-08-28 21:37:11 +00002182
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002183If you prefer to tune security settings yourself, you might create
2184a context from scratch (but beware that you might not get the settings
2185right)::
Antoine Pitrou152efa22010-05-16 18:19:27 +00002186
Christian Heimes894d0f72019-09-12 13:10:05 +02002187 >>> context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
Antoine Pitrou152efa22010-05-16 18:19:27 +00002188 >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
2189
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002190(this snippet assumes your operating system places a bundle of all CA
2191certificates in ``/etc/ssl/certs/ca-bundle.crt``; if not, you'll get an
2192error and have to adjust the location)
Antoine Pitrou152efa22010-05-16 18:19:27 +00002193
Christian Heimes894d0f72019-09-12 13:10:05 +02002194The :data:`PROTOCOL_TLS_CLIENT` protocol configures the context for cert
2195validation and hostname verification. :attr:`~SSLContext.verify_mode` is
2196set to :data:`CERT_REQUIRED` and :attr:`~SSLContext.check_hostname` is set
2197to ``True``. All other protocols create SSL contexts with insecure defaults.
2198
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002199When you use the context to connect to a server, :const:`CERT_REQUIRED`
Christian Heimes894d0f72019-09-12 13:10:05 +02002200and :attr:`~SSLContext.check_hostname` validate the server certificate: it
2201ensures that the server certificate was signed with one of the CA
2202certificates, checks the signature for correctness, and verifies other
2203properties like validity and identity of the hostname::
Antoine Pitrou152efa22010-05-16 18:19:27 +00002204
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002205 >>> conn = context.wrap_socket(socket.socket(socket.AF_INET),
2206 ... server_hostname="www.python.org")
2207 >>> conn.connect(("www.python.org", 443))
Antoine Pitrou152efa22010-05-16 18:19:27 +00002208
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002209You may then fetch the certificate::
Antoine Pitrou152efa22010-05-16 18:19:27 +00002210
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002211 >>> cert = conn.getpeercert()
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002212
2213Visual inspection shows that the certificate does identify the desired service
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002214(that is, the HTTPS host ``www.python.org``)::
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002215
2216 >>> pprint.pprint(cert)
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002217 {'OCSP': ('http://ocsp.digicert.com',),
2218 'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',),
2219 'crlDistributionPoints': ('http://crl3.digicert.com/sha2-ev-server-g1.crl',
2220 'http://crl4.digicert.com/sha2-ev-server-g1.crl'),
2221 'issuer': ((('countryName', 'US'),),
2222 (('organizationName', 'DigiCert Inc'),),
2223 (('organizationalUnitName', 'www.digicert.com'),),
2224 (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),)),
2225 'notAfter': 'Sep 9 12:00:00 2016 GMT',
2226 'notBefore': 'Sep 5 00:00:00 2014 GMT',
2227 'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26',
2228 'subject': ((('businessCategory', 'Private Organization'),),
2229 (('1.3.6.1.4.1.311.60.2.1.3', 'US'),),
2230 (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),),
2231 (('serialNumber', '3359300'),),
2232 (('streetAddress', '16 Allen Rd'),),
2233 (('postalCode', '03894-4801'),),
2234 (('countryName', 'US'),),
2235 (('stateOrProvinceName', 'NH'),),
Mathieu Dupuyc49016e2020-03-30 23:28:25 +02002236 (('localityName', 'Wolfeboro'),),
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002237 (('organizationName', 'Python Software Foundation'),),
2238 (('commonName', 'www.python.org'),)),
2239 'subjectAltName': (('DNS', 'www.python.org'),
2240 ('DNS', 'python.org'),
Stéphane Wirtel19177fb2018-05-15 20:58:35 +02002241 ('DNS', 'pypi.org'),
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002242 ('DNS', 'docs.python.org'),
Stéphane Wirtel19177fb2018-05-15 20:58:35 +02002243 ('DNS', 'testpypi.org'),
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002244 ('DNS', 'bugs.python.org'),
2245 ('DNS', 'wiki.python.org'),
2246 ('DNS', 'hg.python.org'),
2247 ('DNS', 'mail.python.org'),
2248 ('DNS', 'packaging.python.org'),
2249 ('DNS', 'pythonhosted.org'),
2250 ('DNS', 'www.pythonhosted.org'),
2251 ('DNS', 'test.pythonhosted.org'),
2252 ('DNS', 'us.pycon.org'),
2253 ('DNS', 'id.python.org')),
Antoine Pitrou441ae042012-01-06 20:06:15 +01002254 'version': 3}
Antoine Pitrou152efa22010-05-16 18:19:27 +00002255
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002256Now the SSL channel is established and the certificate verified, you can
2257proceed to talk with the server::
Antoine Pitrou152efa22010-05-16 18:19:27 +00002258
Antoine Pitroudab64262010-09-19 13:31:06 +00002259 >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n")
2260 >>> pprint.pprint(conn.recv(1024).split(b"\r\n"))
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002261 [b'HTTP/1.1 200 OK',
2262 b'Date: Sat, 18 Oct 2014 18:27:20 GMT',
2263 b'Server: nginx',
2264 b'Content-Type: text/html; charset=utf-8',
2265 b'X-Frame-Options: SAMEORIGIN',
2266 b'Content-Length: 45679',
2267 b'Accept-Ranges: bytes',
2268 b'Via: 1.1 varnish',
2269 b'Age: 2188',
2270 b'X-Served-By: cache-lcy1134-LCY',
2271 b'X-Cache: HIT',
2272 b'X-Cache-Hits: 11',
2273 b'Vary: Cookie',
2274 b'Strict-Transport-Security: max-age=63072000; includeSubDomains',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002275 b'Connection: close',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002276 b'',
2277 b'']
2278
Antoine Pitrou152efa22010-05-16 18:19:27 +00002279See the discussion of :ref:`ssl-security` below.
2280
2281
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002282Server-side operation
2283^^^^^^^^^^^^^^^^^^^^^
2284
Antoine Pitrou152efa22010-05-16 18:19:27 +00002285For server operation, typically you'll need to have a server certificate, and
2286private key, each in a file. You'll first create a context holding the key
2287and the certificate, so that clients can check your authenticity. Then
2288you'll open a socket, bind it to a port, call :meth:`listen` on it, and start
2289waiting for clients to connect::
Thomas Woutersed03b412007-08-28 21:37:11 +00002290
2291 import socket, ssl
2292
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002293 context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
Antoine Pitrou152efa22010-05-16 18:19:27 +00002294 context.load_cert_chain(certfile="mycertfile", keyfile="mykeyfile")
2295
Thomas Woutersed03b412007-08-28 21:37:11 +00002296 bindsocket = socket.socket()
2297 bindsocket.bind(('myaddr.mydomain.com', 10023))
2298 bindsocket.listen(5)
2299
Antoine Pitrou152efa22010-05-16 18:19:27 +00002300When a client connects, you'll call :meth:`accept` on the socket to get the
2301new socket from the other end, and use the context's :meth:`SSLContext.wrap_socket`
2302method to create a server-side SSL socket for the connection::
Thomas Woutersed03b412007-08-28 21:37:11 +00002303
2304 while True:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002305 newsocket, fromaddr = bindsocket.accept()
2306 connstream = context.wrap_socket(newsocket, server_side=True)
2307 try:
2308 deal_with_client(connstream)
2309 finally:
Antoine Pitroub205d582011-01-02 22:09:27 +00002310 connstream.shutdown(socket.SHUT_RDWR)
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002311 connstream.close()
Thomas Woutersed03b412007-08-28 21:37:11 +00002312
Antoine Pitrou152efa22010-05-16 18:19:27 +00002313Then you'll read data from the ``connstream`` and do something with it till you
Georg Brandl7f01a132009-09-16 15:58:14 +00002314are finished with the client (or the client is finished with you)::
Thomas Woutersed03b412007-08-28 21:37:11 +00002315
2316 def deal_with_client(connstream):
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002317 data = connstream.recv(1024)
2318 # empty data means the client is finished with us
2319 while data:
2320 if not do_something(connstream, data):
2321 # we'll assume do_something returns False
2322 # when we're finished with client
2323 break
2324 data = connstream.recv(1024)
2325 # finished with client
Thomas Woutersed03b412007-08-28 21:37:11 +00002326
Antoine Pitrou152efa22010-05-16 18:19:27 +00002327And go back to listening for new client connections (of course, a real server
2328would probably handle each client connection in a separate thread, or put
Victor Stinner29611452014-10-10 12:52:43 +02002329the sockets in :ref:`non-blocking mode <ssl-nonblocking>` and use an event loop).
Antoine Pitrou152efa22010-05-16 18:19:27 +00002330
2331
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002332.. _ssl-nonblocking:
2333
2334Notes on non-blocking sockets
2335-----------------------------
2336
Antoine Pitroub4bebda2014-04-29 10:03:28 +02002337SSL sockets behave slightly different than regular sockets in
2338non-blocking mode. When working with non-blocking sockets, there are
2339thus several things you need to be aware of:
2340
2341- Most :class:`SSLSocket` methods will raise either
2342 :exc:`SSLWantWriteError` or :exc:`SSLWantReadError` instead of
2343 :exc:`BlockingIOError` if an I/O operation would
2344 block. :exc:`SSLWantReadError` will be raised if a read operation on
2345 the underlying socket is necessary, and :exc:`SSLWantWriteError` for
2346 a write operation on the underlying socket. Note that attempts to
2347 *write* to an SSL socket may require *reading* from the underlying
2348 socket first, and attempts to *read* from the SSL socket may require
2349 a prior *write* to the underlying socket.
2350
2351 .. versionchanged:: 3.5
2352
2353 In earlier Python versions, the :meth:`!SSLSocket.send` method
2354 returned zero instead of raising :exc:`SSLWantWriteError` or
2355 :exc:`SSLWantReadError`.
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002356
2357- Calling :func:`~select.select` tells you that the OS-level socket can be
2358 read from (or written to), but it does not imply that there is sufficient
2359 data at the upper SSL layer. For example, only part of an SSL frame might
2360 have arrived. Therefore, you must be ready to handle :meth:`SSLSocket.recv`
2361 and :meth:`SSLSocket.send` failures, and retry after another call to
2362 :func:`~select.select`.
2363
Antoine Pitrou75e03382014-05-18 00:55:13 +02002364- Conversely, since the SSL layer has its own framing, a SSL socket may
2365 still have data available for reading without :func:`~select.select`
2366 being aware of it. Therefore, you should first call
2367 :meth:`SSLSocket.recv` to drain any potentially available data, and then
2368 only block on a :func:`~select.select` call if still necessary.
2369
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002370 (of course, similar provisions apply when using other primitives such as
Antoine Pitrou75e03382014-05-18 00:55:13 +02002371 :func:`~select.poll`, or those in the :mod:`selectors` module)
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002372
2373- The SSL handshake itself will be non-blocking: the
2374 :meth:`SSLSocket.do_handshake` method has to be retried until it returns
2375 successfully. Here is a synopsis using :func:`~select.select` to wait for
2376 the socket's readiness::
2377
2378 while True:
2379 try:
2380 sock.do_handshake()
2381 break
Antoine Pitrou873bf262011-10-27 23:59:03 +02002382 except ssl.SSLWantReadError:
2383 select.select([sock], [], [])
2384 except ssl.SSLWantWriteError:
2385 select.select([], [sock], [])
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002386
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002387.. seealso::
2388
Victor Stinner29611452014-10-10 12:52:43 +02002389 The :mod:`asyncio` module supports :ref:`non-blocking SSL sockets
2390 <ssl-nonblocking>` and provides a
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002391 higher level API. It polls for events using the :mod:`selectors` module and
2392 handles :exc:`SSLWantWriteError`, :exc:`SSLWantReadError` and
2393 :exc:`BlockingIOError` exceptions. It runs the SSL handshake asynchronously
2394 as well.
2395
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002396
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002397Memory BIO Support
2398------------------
2399
2400.. versionadded:: 3.5
2401
2402Ever since the SSL module was introduced in Python 2.6, the :class:`SSLSocket`
2403class has provided two related but distinct areas of functionality:
2404
2405- SSL protocol handling
2406- Network IO
2407
2408The network IO API is identical to that provided by :class:`socket.socket`,
2409from which :class:`SSLSocket` also inherits. This allows an SSL socket to be
2410used as a drop-in replacement for a regular socket, making it very easy to add
2411SSL support to an existing application.
2412
2413Combining SSL protocol handling and network IO usually works well, but there
2414are some cases where it doesn't. An example is async IO frameworks that want to
2415use a different IO multiplexing model than the "select/poll on a file
2416descriptor" (readiness based) model that is assumed by :class:`socket.socket`
2417and by the internal OpenSSL socket IO routines. This is mostly relevant for
2418platforms like Windows where this model is not efficient. For this purpose, a
2419reduced scope variant of :class:`SSLSocket` called :class:`SSLObject` is
2420provided.
2421
2422.. class:: SSLObject
2423
2424 A reduced-scope variant of :class:`SSLSocket` representing an SSL protocol
Victor Stinner2debf152014-10-10 13:04:08 +02002425 instance that does not contain any network IO methods. This class is
2426 typically used by framework authors that want to implement asynchronous IO
2427 for SSL through memory buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002428
Victor Stinner2debf152014-10-10 13:04:08 +02002429 This class implements an interface on top of a low-level SSL object as
2430 implemented by OpenSSL. This object captures the state of an SSL connection
2431 but does not provide any network IO itself. IO needs to be performed through
2432 separate "BIO" objects which are OpenSSL's IO abstraction layer.
2433
Christian Heimes9d50ab52018-02-27 10:17:30 +01002434 This class has no public constructor. An :class:`SSLObject` instance
2435 must be created using the :meth:`~SSLContext.wrap_bio` method. This
2436 method will create the :class:`SSLObject` instance and bind it to a
2437 pair of BIOs. The *incoming* BIO is used to pass data from Python to the
2438 SSL protocol instance, while the *outgoing* BIO is used to pass data the
2439 other way around.
Victor Stinner2debf152014-10-10 13:04:08 +02002440
2441 The following methods are available:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002442
Victor Stinner805b2622014-10-10 12:49:08 +02002443 - :attr:`~SSLSocket.context`
2444 - :attr:`~SSLSocket.server_side`
2445 - :attr:`~SSLSocket.server_hostname`
Christian Heimes99a65702016-09-10 23:44:53 +02002446 - :attr:`~SSLSocket.session`
2447 - :attr:`~SSLSocket.session_reused`
Victor Stinner805b2622014-10-10 12:49:08 +02002448 - :meth:`~SSLSocket.read`
2449 - :meth:`~SSLSocket.write`
2450 - :meth:`~SSLSocket.getpeercert`
Rémi Lapeyre74e1b6b2020-04-07 09:38:59 +02002451 - :meth:`~SSLSocket.selected_alpn_protocol`
Victor Stinner805b2622014-10-10 12:49:08 +02002452 - :meth:`~SSLSocket.selected_npn_protocol`
2453 - :meth:`~SSLSocket.cipher`
Benjamin Peterson4cb17812015-01-07 11:14:26 -06002454 - :meth:`~SSLSocket.shared_ciphers`
Victor Stinner805b2622014-10-10 12:49:08 +02002455 - :meth:`~SSLSocket.compression`
2456 - :meth:`~SSLSocket.pending`
2457 - :meth:`~SSLSocket.do_handshake`
Rémi Lapeyre74e1b6b2020-04-07 09:38:59 +02002458 - :meth:`~SSLSocket.verify_client_post_handshake`
Victor Stinner805b2622014-10-10 12:49:08 +02002459 - :meth:`~SSLSocket.unwrap`
2460 - :meth:`~SSLSocket.get_channel_binding`
Rémi Lapeyre74e1b6b2020-04-07 09:38:59 +02002461 - :meth:`~SSLSocket.version`
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002462
Victor Stinner2debf152014-10-10 13:04:08 +02002463 When compared to :class:`SSLSocket`, this object lacks the following
2464 features:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002465
Benjamin Petersonfdfca5f2017-06-11 00:24:38 -07002466 - Any form of network IO; ``recv()`` and ``send()`` read and write only to
2467 the underlying :class:`MemoryBIO` buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002468
Victor Stinner2debf152014-10-10 13:04:08 +02002469 - There is no *do_handshake_on_connect* machinery. You must always manually
2470 call :meth:`~SSLSocket.do_handshake` to start the handshake.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002471
Victor Stinner2debf152014-10-10 13:04:08 +02002472 - There is no handling of *suppress_ragged_eofs*. All end-of-file conditions
2473 that are in violation of the protocol are reported via the
2474 :exc:`SSLEOFError` exception.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002475
Victor Stinner2debf152014-10-10 13:04:08 +02002476 - The method :meth:`~SSLSocket.unwrap` call does not return anything,
2477 unlike for an SSL socket where it returns the underlying socket.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002478
Victor Stinner2debf152014-10-10 13:04:08 +02002479 - The *server_name_callback* callback passed to
2480 :meth:`SSLContext.set_servername_callback` will get an :class:`SSLObject`
2481 instance instead of a :class:`SSLSocket` instance as its first parameter.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002482
Victor Stinner2debf152014-10-10 13:04:08 +02002483 Some notes related to the use of :class:`SSLObject`:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002484
Victor Stinner2debf152014-10-10 13:04:08 +02002485 - All IO on an :class:`SSLObject` is :ref:`non-blocking <ssl-nonblocking>`.
2486 This means that for example :meth:`~SSLSocket.read` will raise an
2487 :exc:`SSLWantReadError` if it needs more data than the incoming BIO has
2488 available.
2489
2490 - There is no module-level ``wrap_bio()`` call like there is for
2491 :meth:`~SSLContext.wrap_socket`. An :class:`SSLObject` is always created
2492 via an :class:`SSLContext`.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002493
Christian Heimes9d50ab52018-02-27 10:17:30 +01002494 .. versionchanged:: 3.7
2495 :class:`SSLObject` instances must to created with
2496 :meth:`~SSLContext.wrap_bio`. In earlier versions, it was possible to
2497 create instances directly. This was never documented or officially
2498 supported.
2499
Victor Stinner805b2622014-10-10 12:49:08 +02002500An SSLObject communicates with the outside world using memory buffers. The
2501class :class:`MemoryBIO` provides a memory buffer that can be used for this
2502purpose. It wraps an OpenSSL memory BIO (Basic IO) object:
2503
2504.. class:: MemoryBIO
2505
2506 A memory buffer that can be used to pass data between Python and an SSL
2507 protocol instance.
2508
2509 .. attribute:: MemoryBIO.pending
2510
2511 Return the number of bytes currently in the memory buffer.
2512
2513 .. attribute:: MemoryBIO.eof
2514
2515 A boolean indicating whether the memory BIO is current at the end-of-file
2516 position.
2517
2518 .. method:: MemoryBIO.read(n=-1)
2519
2520 Read up to *n* bytes from the memory buffer. If *n* is not specified or
2521 negative, all bytes are returned.
2522
2523 .. method:: MemoryBIO.write(buf)
2524
2525 Write the bytes from *buf* to the memory BIO. The *buf* argument must be an
2526 object supporting the buffer protocol.
2527
2528 The return value is the number of bytes written, which is always equal to
2529 the length of *buf*.
2530
2531 .. method:: MemoryBIO.write_eof()
2532
2533 Write an EOF marker to the memory BIO. After this method has been called, it
2534 is illegal to call :meth:`~MemoryBIO.write`. The attribute :attr:`eof` will
2535 become true after all data currently in the buffer has been read.
2536
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002537
Christian Heimes99a65702016-09-10 23:44:53 +02002538SSL session
2539-----------
2540
2541.. versionadded:: 3.6
2542
2543.. class:: SSLSession
2544
2545 Session object used by :attr:`~SSLSocket.session`.
2546
2547 .. attribute:: id
2548 .. attribute:: time
2549 .. attribute:: timeout
2550 .. attribute:: ticket_lifetime_hint
2551 .. attribute:: has_ticket
2552
2553
Antoine Pitrou152efa22010-05-16 18:19:27 +00002554.. _ssl-security:
2555
2556Security considerations
2557-----------------------
2558
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002559Best defaults
2560^^^^^^^^^^^^^
Antoine Pitrou152efa22010-05-16 18:19:27 +00002561
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002562For **client use**, if you don't have any special requirements for your
2563security policy, it is highly recommended that you use the
2564:func:`create_default_context` function to create your SSL context.
2565It will load the system's trusted CA certificates, enable certificate
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002566validation and hostname checking, and try to choose reasonably secure
2567protocol and cipher settings.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002568
2569For example, here is how you would use the :class:`smtplib.SMTP` class to
2570create a trusted, secure connection to a SMTP server::
2571
2572 >>> import ssl, smtplib
2573 >>> smtp = smtplib.SMTP("mail.python.org", port=587)
2574 >>> context = ssl.create_default_context()
2575 >>> smtp.starttls(context=context)
2576 (220, b'2.0.0 Ready to start TLS')
2577
2578If a client certificate is needed for the connection, it can be added with
2579:meth:`SSLContext.load_cert_chain`.
2580
2581By contrast, if you create the SSL context by calling the :class:`SSLContext`
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002582constructor yourself, it will not have certificate validation nor hostname
2583checking enabled by default. If you do so, please read the paragraphs below
2584to achieve a good security level.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002585
2586Manual settings
2587^^^^^^^^^^^^^^^
2588
2589Verifying certificates
2590''''''''''''''''''''''
2591
Donald Stufft8b852f12014-05-20 12:58:38 -04002592When calling the :class:`SSLContext` constructor directly,
Antoine Pitrou152efa22010-05-16 18:19:27 +00002593:const:`CERT_NONE` is the default. Since it does not authenticate the other
2594peer, it can be insecure, especially in client mode where most of time you
2595would like to ensure the authenticity of the server you're talking to.
2596Therefore, when in client mode, it is highly recommended to use
2597:const:`CERT_REQUIRED`. However, it is in itself not sufficient; you also
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002598have to check that the server certificate, which can be obtained by calling
2599:meth:`SSLSocket.getpeercert`, matches the desired service. For many
2600protocols and applications, the service can be identified by the hostname;
Christian Heimes1aa9a752013-12-02 02:41:19 +01002601in this case, the :func:`match_hostname` function can be used. This common
2602check is automatically performed when :attr:`SSLContext.check_hostname` is
2603enabled.
Antoine Pitrou152efa22010-05-16 18:19:27 +00002604
Christian Heimes61d478c2018-01-27 15:51:38 +01002605.. versionchanged:: 3.7
2606 Hostname matchings is now performed by OpenSSL. Python no longer uses
2607 :func:`match_hostname`.
2608
Antoine Pitrou152efa22010-05-16 18:19:27 +00002609In server mode, if you want to authenticate your clients using the SSL layer
2610(rather than using a higher-level authentication mechanism), you'll also have
2611to specify :const:`CERT_REQUIRED` and similarly check the client certificate.
2612
Thomas Woutersed03b412007-08-28 21:37:11 +00002613
Antoine Pitroub5218772010-05-21 09:56:06 +00002614Protocol versions
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002615'''''''''''''''''
Antoine Pitroub5218772010-05-21 09:56:06 +00002616
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002617SSL versions 2 and 3 are considered insecure and are therefore dangerous to
2618use. If you want maximum compatibility between clients and servers, it is
Christian Heimes5fe668c2016-09-12 00:01:11 +02002619recommended to use :const:`PROTOCOL_TLS_CLIENT` or
2620:const:`PROTOCOL_TLS_SERVER` as the protocol version. SSLv2 and SSLv3 are
2621disabled by default.
Antoine Pitroub5218772010-05-21 09:56:06 +00002622
Marco Buttu7b2491a2017-04-13 16:17:59 +02002623::
2624
Christian Heimesc4d2e502016-09-12 01:14:35 +02002625 >>> client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
2626 >>> client_context.options |= ssl.OP_NO_TLSv1
2627 >>> client_context.options |= ssl.OP_NO_TLSv1_1
Christian Heimes5fe668c2016-09-12 00:01:11 +02002628
Antoine Pitroub5218772010-05-21 09:56:06 +00002629
Christian Heimes598894f2016-09-05 23:19:05 +02002630The SSL context created above will only allow TLSv1.2 and later (if
Christian Heimes5fe668c2016-09-12 00:01:11 +02002631supported by your system) connections to a server. :const:`PROTOCOL_TLS_CLIENT`
2632implies certificate validation and hostname checks by default. You have to
2633load certificates into the context.
2634
Antoine Pitroub5218772010-05-21 09:56:06 +00002635
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002636Cipher selection
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002637''''''''''''''''
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002638
2639If you have advanced security requirements, fine-tuning of the ciphers
2640enabled when negotiating a SSL session is possible through the
2641:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
2642ssl module disables certain weak ciphers by default, but you may want
Donald Stufft79ccaa22014-03-21 21:33:34 -04002643to further restrict the cipher choice. Be sure to read OpenSSL's documentation
Sanyam Khurana338cd832018-01-20 05:55:37 +05302644about the `cipher list format <https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-LIST-FORMAT>`_.
Christian Heimes5fe668c2016-09-12 00:01:11 +02002645If you want to check which ciphers are enabled by a given cipher list, use
2646:meth:`SSLContext.get_ciphers` or the ``openssl ciphers`` command on your
2647system.
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002648
Antoine Pitrou9eefe912013-11-17 15:35:33 +01002649Multi-processing
2650^^^^^^^^^^^^^^^^
2651
2652If using this module as part of a multi-processed application (using,
2653for example the :mod:`multiprocessing` or :mod:`concurrent.futures` modules),
2654be aware that OpenSSL's internal random number generator does not properly
2655handle forked processes. Applications must change the PRNG state of the
2656parent process if they use any SSL feature with :func:`os.fork`. Any
2657successful call of :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or
2658:func:`~ssl.RAND_pseudo_bytes` is sufficient.
2659
Georg Brandl48310cd2009-01-03 21:18:54 +00002660
Christian Heimes529525f2018-05-23 22:24:45 +02002661.. _ssl-tlsv1_3:
2662
2663TLS 1.3
2664-------
2665
2666.. versionadded:: 3.7
2667
Christian Heimesb8d0fa02021-04-17 15:49:50 +02002668The TLS 1.3 protocol behaves slightly differently than previous version
2669of TLS/SSL. Some new TLS 1.3 features are not yet available.
Christian Heimes529525f2018-05-23 22:24:45 +02002670
2671- TLS 1.3 uses a disjunct set of cipher suites. All AES-GCM and
2672 ChaCha20 cipher suites are enabled by default. The method
2673 :meth:`SSLContext.set_ciphers` cannot enable or disable any TLS 1.3
Stéphane Wirtel07fbbfd2018-10-05 16:17:18 +02002674 ciphers yet, but :meth:`SSLContext.get_ciphers` returns them.
Christian Heimes529525f2018-05-23 22:24:45 +02002675- Session tickets are no longer sent as part of the initial handshake and
2676 are handled differently. :attr:`SSLSocket.session` and :class:`SSLSession`
2677 are not compatible with TLS 1.3.
2678- Client-side certificates are also no longer verified during the initial
2679 handshake. A server can request a certificate at any time. Clients
2680 process certificate requests while they send or receive application data
2681 from the server.
2682- TLS 1.3 features like early data, deferred TLS client cert request,
2683 signature algorithm configuration, and rekeying are not supported yet.
2684
2685
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002686.. seealso::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002687
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002688 Class :class:`socket.socket`
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002689 Documentation of underlying :mod:`socket` class
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002690
Georg Brandl5d941342016-02-26 19:37:12 +01002691 `SSL/TLS Strong Encryption: An Introduction <https://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_
Matt Eaton9cf8c422018-03-10 19:00:04 -06002692 Intro from the Apache HTTP Server documentation
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002693
Serhiy Storchaka0a36ac12018-05-31 07:39:00 +03002694 :rfc:`RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management <1422>`
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002695 Steve Kent
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002696
Serhiy Storchaka0a36ac12018-05-31 07:39:00 +03002697 :rfc:`RFC 4086: Randomness Requirements for Security <4086>`
Chandan Kumar63c2c8a2017-06-09 15:13:58 +05302698 Donald E., Jeffrey I. Schiller
Thomas Wouters89d996e2007-09-08 17:39:28 +00002699
Serhiy Storchaka0a36ac12018-05-31 07:39:00 +03002700 :rfc:`RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile <5280>`
Chandan Kumar63c2c8a2017-06-09 15:13:58 +05302701 D. Cooper
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002702
Serhiy Storchaka0a36ac12018-05-31 07:39:00 +03002703 :rfc:`RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 <5246>`
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002704 T. Dierks et. al.
2705
Serhiy Storchaka0a36ac12018-05-31 07:39:00 +03002706 :rfc:`RFC 6066: Transport Layer Security (TLS) Extensions <6066>`
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002707 D. Eastlake
2708
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002709 `IANA TLS: Transport Layer Security (TLS) Parameters <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002710 IANA
Christian Heimesad0ffa02017-09-06 16:19:56 -07002711
Serhiy Storchaka0a36ac12018-05-31 07:39:00 +03002712 :rfc:`RFC 7525: Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) <7525>`
Christian Heimesad0ffa02017-09-06 16:19:56 -07002713 IETF
2714
2715 `Mozilla's Server Side TLS recommendations <https://wiki.mozilla.org/Security/Server_Side_TLS>`_
2716 Mozilla