blob: aa1075d4b02b09a8fa983f3d50db793e9d3d7e79 [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
45certificate of the other side of the connection, and :meth:`cipher`,which
46retrieves 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
Christian Heimes01113fa2016-09-05 23:23:24 +020052.. versionchanged:: 3.6
53
54 OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported.
55 In the future the ssl module will require at least OpenSSL 1.0.2 or
56 1.1.0.
57
Antoine Pitrou152efa22010-05-16 18:19:27 +000058
Thomas Wouters1b7f8912007-09-19 03:06:30 +000059Functions, Constants, and Exceptions
60------------------------------------
61
62.. exception:: SSLError
63
Antoine Pitrou59fdd672010-10-08 10:37:08 +000064 Raised to signal an error from the underlying SSL implementation
65 (currently provided by the OpenSSL library). This signifies some
66 problem in the higher-level encryption and authentication layer that's
67 superimposed on the underlying network connection. This error
Antoine Pitrou5574c302011-10-12 17:53:43 +020068 is a subtype of :exc:`OSError`. The error code and message of
69 :exc:`SSLError` instances are provided by the OpenSSL library.
70
71 .. versionchanged:: 3.3
72 :exc:`SSLError` used to be a subtype of :exc:`socket.error`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +000073
Antoine Pitrou3b36fb12012-06-22 21:11:52 +020074 .. attribute:: library
75
76 A string mnemonic designating the OpenSSL submodule in which the error
77 occurred, such as ``SSL``, ``PEM`` or ``X509``. The range of possible
78 values depends on the OpenSSL version.
79
80 .. versionadded:: 3.3
81
82 .. attribute:: reason
83
84 A string mnemonic designating the reason this error occurred, for
85 example ``CERTIFICATE_VERIFY_FAILED``. The range of possible
86 values depends on the OpenSSL version.
87
88 .. versionadded:: 3.3
89
Antoine Pitrou41032a62011-10-27 23:56:55 +020090.. exception:: SSLZeroReturnError
91
92 A subclass of :exc:`SSLError` raised when trying to read or write and
93 the SSL connection has been closed cleanly. Note that this doesn't
94 mean that the underlying transport (read TCP) has been closed.
95
96 .. versionadded:: 3.3
97
98.. exception:: SSLWantReadError
99
100 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
101 <ssl-nonblocking>` when trying to read or write data, but more data needs
102 to be received on the underlying TCP transport before the request can be
103 fulfilled.
104
105 .. versionadded:: 3.3
106
107.. exception:: SSLWantWriteError
108
109 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
110 <ssl-nonblocking>` when trying to read or write data, but more data needs
111 to be sent on the underlying TCP transport before the request can be
112 fulfilled.
113
114 .. versionadded:: 3.3
115
116.. exception:: SSLSyscallError
117
118 A subclass of :exc:`SSLError` raised when a system error was encountered
119 while trying to fulfill an operation on a SSL socket. Unfortunately,
120 there is no easy way to inspect the original errno number.
121
122 .. versionadded:: 3.3
123
124.. exception:: SSLEOFError
125
126 A subclass of :exc:`SSLError` raised when the SSL connection has been
Antoine Pitrouf3dc2d72011-10-28 00:01:03 +0200127 terminated abruptly. Generally, you shouldn't try to reuse the underlying
Antoine Pitrou41032a62011-10-27 23:56:55 +0200128 transport when this error is encountered.
129
130 .. versionadded:: 3.3
131
Christian Heimesb3ad0e52017-09-08 12:00:19 -0700132.. exception:: SSLCertVerificationError
133
134 A subclass of :exc:`SSLError` raised when certificate validation has
135 failed.
136
137 .. versionadded:: 3.7
138
139 .. attribute:: verify_code
140
141 A numeric error number that denotes the verification error.
142
143 .. attribute:: verify_message
144
145 A human readable string of the verification error.
146
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000147.. exception:: CertificateError
148
Christian Heimes61d478c2018-01-27 15:51:38 +0100149 An alias for :exc:`SSLCertVerificationError`.
150
151 .. versionchanged:: 3.7
152 The exception is now an alias for :exc:`SSLCertVerificationError`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000153
154
155Socket creation
156^^^^^^^^^^^^^^^
157
158The following function allows for standalone socket creation. Starting from
159Python 3.2, it can be more flexible to use :meth:`SSLContext.wrap_socket`
160instead.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000161
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000162.. function:: wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, ssl_version={see docs}, ca_certs=None, do_handshake_on_connect=True, suppress_ragged_eofs=True, ciphers=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000163
Georg Brandl7f01a132009-09-16 15:58:14 +0000164 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance
165 of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps
Antoine Pitrou3e86ba42013-12-28 17:26:33 +0100166 the underlying socket in an SSL context. ``sock`` must be a
167 :data:`~socket.SOCK_STREAM` socket; other socket types are unsupported.
168
169 For client-side sockets, the context construction is lazy; if the
170 underlying socket isn't connected yet, the context construction will be
171 performed after :meth:`connect` is called on the socket. For
172 server-side sockets, if the socket has no remote peer, it is assumed
173 to be a listening socket, and the server-side SSL wrapping is
174 automatically performed on client connections accepted via the
175 :meth:`accept` method. :func:`wrap_socket` may raise :exc:`SSLError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000176
Georg Brandl7f01a132009-09-16 15:58:14 +0000177 The ``keyfile`` and ``certfile`` parameters specify optional files which
178 contain a certificate to be used to identify the local side of the
179 connection. See the discussion of :ref:`ssl-certificates` for more
180 information on how the certificate is stored in the ``certfile``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000181
Georg Brandl7f01a132009-09-16 15:58:14 +0000182 The parameter ``server_side`` is a boolean which identifies whether
183 server-side or client-side behavior is desired from this socket.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000184
Georg Brandl7f01a132009-09-16 15:58:14 +0000185 The parameter ``cert_reqs`` specifies whether a certificate is required from
186 the other side of the connection, and whether it will be validated if
187 provided. It must be one of the three values :const:`CERT_NONE`
188 (certificates ignored), :const:`CERT_OPTIONAL` (not required, but validated
189 if provided), or :const:`CERT_REQUIRED` (required and validated). If the
190 value of this parameter is not :const:`CERT_NONE`, then the ``ca_certs``
191 parameter must point to a file of CA certificates.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000192
Georg Brandl7f01a132009-09-16 15:58:14 +0000193 The ``ca_certs`` file contains a set of concatenated "certification
194 authority" certificates, which are used to validate certificates passed from
195 the other end of the connection. See the discussion of
196 :ref:`ssl-certificates` for more information about how to arrange the
197 certificates in this file.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000198
Georg Brandl7f01a132009-09-16 15:58:14 +0000199 The parameter ``ssl_version`` specifies which version of the SSL protocol to
200 use. Typically, the server chooses a particular protocol version, and the
201 client must adapt to the server's choice. Most of the versions are not
Antoine Pitrou84a2edc2012-01-09 21:35:11 +0100202 interoperable with the other versions. If not specified, the default is
Christian Heimes598894f2016-09-05 23:19:05 +0200203 :data:`PROTOCOL_TLS`; it provides the most compatibility with other
Georg Brandl7f01a132009-09-16 15:58:14 +0000204 versions.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000205
Georg Brandl7f01a132009-09-16 15:58:14 +0000206 Here's a table showing which versions in a client (down the side) can connect
207 to which versions in a server (along the top):
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000208
209 .. table::
210
Christian Heimes17352ff2016-09-13 12:09:55 +0200211 ======================== ============ ============ ============= ========= =========== ===========
Christian Heimescb5b68a2017-09-07 18:07:00 -0700212 *client* / **server** **SSLv2** **SSLv3** **TLS** [3]_ **TLSv1** **TLSv1.1** **TLSv1.2**
Christian Heimes17352ff2016-09-13 12:09:55 +0200213 ------------------------ ------------ ------------ ------------- --------- ----------- -----------
214 *SSLv2* yes no no [1]_ no no no
215 *SSLv3* no yes no [2]_ no no no
Christian Heimescb5b68a2017-09-07 18:07:00 -0700216 *TLS* (*SSLv23*) [3]_ no [1]_ no [2]_ yes yes yes yes
Christian Heimes17352ff2016-09-13 12:09:55 +0200217 *TLSv1* no no yes yes no no
218 *TLSv1.1* no no yes no yes no
219 *TLSv1.2* no no yes no no yes
220 ======================== ============ ============ ============= ========= =========== ===========
221
222 .. rubric:: Footnotes
223 .. [1] :class:`SSLContext` disables SSLv2 with :data:`OP_NO_SSLv2` by default.
Christian Heimesed9c0702016-09-13 13:27:26 +0200224 .. [2] :class:`SSLContext` disables SSLv3 with :data:`OP_NO_SSLv3` by default.
Christian Heimescb5b68a2017-09-07 18:07:00 -0700225 .. [3] TLS 1.3 protocol will be available with :data:`PROTOCOL_TLS` in
226 OpenSSL >= 1.1.1. There is no dedicated PROTOCOL constant for just
227 TLS 1.3.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000228
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000229 .. note::
230
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000231 Which connections succeed will vary depending on the version of
Antoine Pitrou2b207ba2014-12-03 20:00:56 +0100232 OpenSSL. For example, before OpenSSL 1.0.0, an SSLv23 client
233 would always attempt SSLv2 connections.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000234
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000235 The *ciphers* parameter sets the available ciphers for this SSL object.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000236 It should be a string in the `OpenSSL cipher list format
Felipe19e4d932017-09-20 20:20:18 +0200237 <https://wiki.openssl.org/index.php/Manual:Ciphers(1)#CIPHER_LIST_FORMAT>`_.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000238
Bill Janssen48dc27c2007-12-05 03:38:10 +0000239 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
240 handshake automatically after doing a :meth:`socket.connect`, or whether the
Georg Brandl7f01a132009-09-16 15:58:14 +0000241 application program will call it explicitly, by invoking the
242 :meth:`SSLSocket.do_handshake` method. Calling
243 :meth:`SSLSocket.do_handshake` explicitly gives the program control over the
244 blocking behavior of the socket I/O involved in the handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000245
Georg Brandl7f01a132009-09-16 15:58:14 +0000246 The parameter ``suppress_ragged_eofs`` specifies how the
Antoine Pitroudab64262010-09-19 13:31:06 +0000247 :meth:`SSLSocket.recv` method should signal unexpected EOF from the other end
Georg Brandl7f01a132009-09-16 15:58:14 +0000248 of the connection. If specified as :const:`True` (the default), it returns a
Antoine Pitroudab64262010-09-19 13:31:06 +0000249 normal EOF (an empty bytes object) in response to unexpected EOF errors
250 raised from the underlying socket; if :const:`False`, it will raise the
251 exceptions back to the caller.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000252
Ezio Melotti4d5195b2010-04-20 10:57:44 +0000253 .. versionchanged:: 3.2
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000254 New optional argument *ciphers*.
255
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100256Context creation
257^^^^^^^^^^^^^^^^
258
259A convenience function helps create :class:`SSLContext` objects for common
260purposes.
261
262.. function:: create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, capath=None, cadata=None)
263
264 Return a new :class:`SSLContext` object with default settings for
265 the given *purpose*. The settings are chosen by the :mod:`ssl` module,
266 and usually represent a higher security level than when calling the
267 :class:`SSLContext` constructor directly.
268
269 *cafile*, *capath*, *cadata* represent optional CA certificates to
270 trust for certificate verification, as in
271 :meth:`SSLContext.load_verify_locations`. If all three are
272 :const:`None`, this function can choose to trust the system's default
273 CA certificates instead.
274
Christian Heimes598894f2016-09-05 23:19:05 +0200275 The settings are: :data:`PROTOCOL_TLS`, :data:`OP_NO_SSLv2`, and
Benjamin Peterson59c4eb72015-03-16 12:43:38 -0500276 :data:`OP_NO_SSLv3` with high encryption cipher suites without RC4 and
Donald Stufft6a2ba942014-03-23 19:05:28 -0400277 without unauthenticated cipher suites. Passing :data:`~Purpose.SERVER_AUTH`
278 as *purpose* sets :data:`~SSLContext.verify_mode` to :data:`CERT_REQUIRED`
279 and either loads CA certificates (when at least one of *cafile*, *capath* or
280 *cadata* is given) or uses :meth:`SSLContext.load_default_certs` to load
281 default CA certificates.
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100282
283 .. note::
284 The protocol, options, cipher and other settings may change to more
285 restrictive values anytime without prior deprecation. The values
286 represent a fair balance between compatibility and security.
287
288 If your application needs specific settings, you should create a
289 :class:`SSLContext` and apply the settings yourself.
290
Donald Stufft6a2ba942014-03-23 19:05:28 -0400291 .. note::
292 If you find that when certain older clients or servers attempt to connect
Benjamin Peterson6f362fa2015-04-08 11:11:00 -0400293 with a :class:`SSLContext` created by this function that they get an error
294 stating "Protocol or cipher suite mismatch", it may be that they only
295 support SSL3.0 which this function excludes using the
296 :data:`OP_NO_SSLv3`. SSL3.0 is widely considered to be `completely broken
297 <https://en.wikipedia.org/wiki/POODLE>`_. If you still wish to continue to
298 use this function but still allow SSL 3.0 connections you can re-enable
299 them using::
Donald Stufft6a2ba942014-03-23 19:05:28 -0400300
301 ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
302 ctx.options &= ~ssl.OP_NO_SSLv3
303
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100304 .. versionadded:: 3.4
305
Benjamin Peterson59c4eb72015-03-16 12:43:38 -0500306 .. versionchanged:: 3.4.4
307
308 RC4 was dropped from the default cipher string.
309
Christian Heimesac041c02016-09-06 20:07:58 +0200310 .. versionchanged:: 3.6
Christian Heimes03d13c02016-09-06 20:06:47 +0200311
312 ChaCha20/Poly1305 was added to the default cipher string.
313
314 3DES was dropped from the default cipher string.
315
Christian Heimescb5b68a2017-09-07 18:07:00 -0700316 .. versionchanged:: 3.7
317
318 TLS 1.3 cipher suites TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384,
319 and TLS_CHACHA20_POLY1305_SHA256 were added to the default cipher string.
320
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100321
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000322Random generation
323^^^^^^^^^^^^^^^^^
324
Victor Stinner99c8b162011-05-24 12:05:19 +0200325.. function:: RAND_bytes(num)
326
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400327 Return *num* cryptographically strong pseudo-random bytes. Raises an
Victor Stinnera6752062011-05-25 11:27:40 +0200328 :class:`SSLError` if the PRNG has not been seeded with enough data or if the
329 operation is not supported by the current RAND method. :func:`RAND_status`
330 can be used to check the status of the PRNG and :func:`RAND_add` can be used
331 to seed the PRNG.
Victor Stinner99c8b162011-05-24 12:05:19 +0200332
Berker Peksageb7a97c2015-04-10 16:19:13 +0300333 For almost all applications :func:`os.urandom` is preferable.
334
Victor Stinner19fb53c2011-05-24 21:32:40 +0200335 Read the Wikipedia article, `Cryptographically secure pseudorandom number
Victor Stinnera6752062011-05-25 11:27:40 +0200336 generator (CSPRNG)
Georg Brandl5d941342016-02-26 19:37:12 +0100337 <https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator>`_,
Victor Stinner19fb53c2011-05-24 21:32:40 +0200338 to get the requirements of a cryptographically generator.
339
Victor Stinner99c8b162011-05-24 12:05:19 +0200340 .. versionadded:: 3.3
341
342.. function:: RAND_pseudo_bytes(num)
343
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400344 Return (bytes, is_cryptographic): bytes are *num* pseudo-random bytes,
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200345 is_cryptographic is ``True`` if the bytes generated are cryptographically
Victor Stinnera6752062011-05-25 11:27:40 +0200346 strong. Raises an :class:`SSLError` if the operation is not supported by the
347 current RAND method.
Victor Stinner99c8b162011-05-24 12:05:19 +0200348
Victor Stinner19fb53c2011-05-24 21:32:40 +0200349 Generated pseudo-random byte sequences will be unique if they are of
350 sufficient length, but are not necessarily unpredictable. They can be used
351 for non-cryptographic purposes and for certain purposes in cryptographic
352 protocols, but usually not for key generation etc.
353
Berker Peksageb7a97c2015-04-10 16:19:13 +0300354 For almost all applications :func:`os.urandom` is preferable.
355
Victor Stinner99c8b162011-05-24 12:05:19 +0200356 .. versionadded:: 3.3
357
Christian Heimes01113fa2016-09-05 23:23:24 +0200358 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200359
360 OpenSSL has deprecated :func:`ssl.RAND_pseudo_bytes`, use
361 :func:`ssl.RAND_bytes` instead.
362
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000363.. function:: RAND_status()
364
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400365 Return ``True`` if the SSL pseudo-random number generator has been seeded
366 with 'enough' randomness, and ``False`` otherwise. You can use
367 :func:`ssl.RAND_egd` and :func:`ssl.RAND_add` to increase the randomness of
368 the pseudo-random number generator.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000369
370.. function:: RAND_egd(path)
371
Victor Stinner99c8b162011-05-24 12:05:19 +0200372 If you are running an entropy-gathering daemon (EGD) somewhere, and *path*
Georg Brandl7f01a132009-09-16 15:58:14 +0000373 is the pathname of a socket connection open to it, this will read 256 bytes
374 of randomness from the socket, and add it to the SSL pseudo-random number
375 generator to increase the security of generated secret keys. This is
376 typically only necessary on systems without better sources of randomness.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000377
Georg Brandl7f01a132009-09-16 15:58:14 +0000378 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources
379 of entropy-gathering daemons.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000380
Christian Heimes598894f2016-09-05 23:19:05 +0200381 Availability: not available with LibreSSL and OpenSSL > 1.1.0
Victor Stinner3ce67a92015-01-06 13:53:09 +0100382
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000383.. function:: RAND_add(bytes, entropy)
384
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400385 Mix the given *bytes* into the SSL pseudo-random number generator. The
Victor Stinner99c8b162011-05-24 12:05:19 +0200386 parameter *entropy* (a float) is a lower bound on the entropy contained in
Georg Brandl7f01a132009-09-16 15:58:14 +0000387 string (so you can always use :const:`0.0`). See :rfc:`1750` for more
388 information on sources of entropy.
Thomas Woutersed03b412007-08-28 21:37:11 +0000389
Georg Brandl8c16cb92016-02-25 20:17:45 +0100390 .. versionchanged:: 3.5
Serhiy Storchaka8490f5a2015-03-20 09:00:36 +0200391 Writable :term:`bytes-like object` is now accepted.
392
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000393Certificate handling
394^^^^^^^^^^^^^^^^^^^^
395
Marco Buttu7b2491a2017-04-13 16:17:59 +0200396.. testsetup::
397
398 import ssl
399
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000400.. function:: match_hostname(cert, hostname)
401
402 Verify that *cert* (in decoded format as returned by
403 :meth:`SSLSocket.getpeercert`) matches the given *hostname*. The rules
404 applied are those for checking the identity of HTTPS servers as outlined
Chandan Kumar63c2c8a2017-06-09 15:13:58 +0530405 in :rfc:`2818`, :rfc:`5280` and :rfc:`6125`. In addition to HTTPS, this
406 function should be suitable for checking the identity of servers in
407 various SSL-based protocols such as FTPS, IMAPS, POPS and others.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000408
409 :exc:`CertificateError` is raised on failure. On success, the function
410 returns nothing::
411
412 >>> cert = {'subject': ((('commonName', 'example.com'),),)}
413 >>> ssl.match_hostname(cert, "example.com")
414 >>> ssl.match_hostname(cert, "example.org")
415 Traceback (most recent call last):
416 File "<stdin>", line 1, in <module>
417 File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
418 ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
419
420 .. versionadded:: 3.2
421
Georg Brandl72c98d32013-10-27 07:16:53 +0100422 .. versionchanged:: 3.3.3
423 The function now follows :rfc:`6125`, section 6.4.3 and does neither
424 match multiple wildcards (e.g. ``*.*.com`` or ``*a*.example.org``) nor
425 a wildcard inside an internationalized domain names (IDN) fragment.
426 IDN A-labels such as ``www*.xn--pthon-kva.org`` are still supported,
427 but ``x*.python.org`` no longer matches ``xn--tda.python.org``.
428
Antoine Pitrouc481bfb2015-02-15 18:12:20 +0100429 .. versionchanged:: 3.5
430 Matching of IP addresses, when present in the subjectAltName field
431 of the certificate, is now supported.
432
Mandeep Singhede2ac92017-11-27 04:01:27 +0530433 .. versionchanged:: 3.7
Christian Heimes61d478c2018-01-27 15:51:38 +0100434 The function is no longer used to TLS connections. Hostname matching
435 is now performed by OpenSSL.
436
Mandeep Singhede2ac92017-11-27 04:01:27 +0530437 Allow wildcard when it is the leftmost and the only character
Christian Heimes61d478c2018-01-27 15:51:38 +0100438 in that segment. Partial wildcards like ``www*.example.com`` are no
439 longer supported.
440
441 .. deprecated:: 3.7
Mandeep Singhede2ac92017-11-27 04:01:27 +0530442
Antoine Pitrouc695c952014-04-28 20:57:36 +0200443.. function:: cert_time_to_seconds(cert_time)
Thomas Woutersed03b412007-08-28 21:37:11 +0000444
Antoine Pitrouc695c952014-04-28 20:57:36 +0200445 Return the time in seconds since the Epoch, given the ``cert_time``
446 string representing the "notBefore" or "notAfter" date from a
447 certificate in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C
448 locale).
Thomas Woutersed03b412007-08-28 21:37:11 +0000449
Antoine Pitrouc695c952014-04-28 20:57:36 +0200450 Here's an example:
Thomas Woutersed03b412007-08-28 21:37:11 +0000451
Antoine Pitrouc695c952014-04-28 20:57:36 +0200452 .. doctest:: newcontext
453
454 >>> import ssl
455 >>> timestamp = ssl.cert_time_to_seconds("Jan 5 09:34:43 2018 GMT")
Marco Buttu7b2491a2017-04-13 16:17:59 +0200456 >>> timestamp # doctest: +SKIP
Antoine Pitrouc695c952014-04-28 20:57:36 +0200457 1515144883
458 >>> from datetime import datetime
Marco Buttu7b2491a2017-04-13 16:17:59 +0200459 >>> print(datetime.utcfromtimestamp(timestamp)) # doctest: +SKIP
Antoine Pitrouc695c952014-04-28 20:57:36 +0200460 2018-01-05 09:34:43
461
462 "notBefore" or "notAfter" dates must use GMT (:rfc:`5280`).
463
464 .. versionchanged:: 3.5
465 Interpret the input time as a time in UTC as specified by 'GMT'
466 timezone in the input string. Local timezone was used
467 previously. Return an integer (no fractions of a second in the
468 input format)
Thomas Woutersed03b412007-08-28 21:37:11 +0000469
Christian Heimes598894f2016-09-05 23:19:05 +0200470.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None)
Thomas Woutersed03b412007-08-28 21:37:11 +0000471
Georg Brandl7f01a132009-09-16 15:58:14 +0000472 Given the address ``addr`` of an SSL-protected server, as a (*hostname*,
473 *port-number*) pair, fetches the server's certificate, and returns it as a
474 PEM-encoded string. If ``ssl_version`` is specified, uses that version of
475 the SSL protocol to attempt to connect to the server. If ``ca_certs`` is
476 specified, it should be a file containing a list of root certificates, the
477 same format as used for the same parameter in :func:`wrap_socket`. The call
478 will attempt to validate the server certificate against that set of root
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000479 certificates, and will fail if the validation attempt fails.
480
Antoine Pitrou15399c32011-04-28 19:23:55 +0200481 .. versionchanged:: 3.3
482 This function is now IPv6-compatible.
483
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200484 .. versionchanged:: 3.5
485 The default *ssl_version* is changed from :data:`PROTOCOL_SSLv3` to
Christian Heimes598894f2016-09-05 23:19:05 +0200486 :data:`PROTOCOL_TLS` for maximum compatibility with modern servers.
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200487
Georg Brandl7f01a132009-09-16 15:58:14 +0000488.. function:: DER_cert_to_PEM_cert(DER_cert_bytes)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000489
490 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
491 string version of the same certificate.
492
Georg Brandl7f01a132009-09-16 15:58:14 +0000493.. function:: PEM_cert_to_DER_cert(PEM_cert_string)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000494
Georg Brandl7f01a132009-09-16 15:58:14 +0000495 Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of
496 bytes for that same certificate.
Thomas Woutersed03b412007-08-28 21:37:11 +0000497
Christian Heimes6d7ad132013-06-09 18:02:55 +0200498.. function:: get_default_verify_paths()
499
500 Returns a named tuple with paths to OpenSSL's default cafile and capath.
501 The paths are the same as used by
502 :meth:`SSLContext.set_default_verify_paths`. The return value is a
503 :term:`named tuple` ``DefaultVerifyPaths``:
504
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300505 * :attr:`cafile` - resolved path to cafile or ``None`` if the file doesn't exist,
506 * :attr:`capath` - resolved path to capath or ``None`` if the directory doesn't exist,
Christian Heimes6d7ad132013-06-09 18:02:55 +0200507 * :attr:`openssl_cafile_env` - OpenSSL's environment key that points to a cafile,
508 * :attr:`openssl_cafile` - hard coded path to a cafile,
509 * :attr:`openssl_capath_env` - OpenSSL's environment key that points to a capath,
510 * :attr:`openssl_capath` - hard coded path to a capath directory
511
Christian Heimes598894f2016-09-05 23:19:05 +0200512 Availability: LibreSSL ignores the environment vars
513 :attr:`openssl_cafile_env` and :attr:`openssl_capath_env`
514
Christian Heimes6d7ad132013-06-09 18:02:55 +0200515 .. versionadded:: 3.4
516
Christian Heimes44109d72013-11-22 01:51:30 +0100517.. function:: enum_certificates(store_name)
Christian Heimes46bebee2013-06-09 19:03:31 +0200518
519 Retrieve certificates from Windows' system cert store. *store_name* may be
520 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
Christian Heimes44109d72013-11-22 01:51:30 +0100521 stores, too.
Christian Heimes46bebee2013-06-09 19:03:31 +0200522
Christian Heimes44109d72013-11-22 01:51:30 +0100523 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
524 The encoding_type specifies the encoding of cert_bytes. It is either
525 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
526 PKCS#7 ASN.1 data. Trust specifies the purpose of the certificate as a set
527 of OIDS or exactly ``True`` if the certificate is trustworthy for all
528 purposes.
529
530 Example::
531
532 >>> ssl.enum_certificates("CA")
533 [(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
534 (b'data...', 'x509_asn', True)]
Christian Heimes46bebee2013-06-09 19:03:31 +0200535
536 Availability: Windows.
537
538 .. versionadded:: 3.4
Christian Heimes6d7ad132013-06-09 18:02:55 +0200539
Christian Heimes44109d72013-11-22 01:51:30 +0100540.. function:: enum_crls(store_name)
541
542 Retrieve CRLs from Windows' system cert store. *store_name* may be
543 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
544 stores, too.
545
546 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
547 The encoding_type specifies the encoding of cert_bytes. It is either
548 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
549 PKCS#7 ASN.1 data.
550
551 Availability: Windows.
552
553 .. versionadded:: 3.4
554
555
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000556Constants
557^^^^^^^^^
558
Christian Heimes3aeacad2016-09-10 00:19:35 +0200559 All constants are now :class:`enum.IntEnum` or :class:`enum.IntFlag` collections.
560
561 .. versionadded:: 3.6
562
Thomas Woutersed03b412007-08-28 21:37:11 +0000563.. data:: CERT_NONE
564
Antoine Pitrou152efa22010-05-16 18:19:27 +0000565 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
566 parameter to :func:`wrap_socket`. In this mode (the default), no
567 certificates will be required from the other side of the socket connection.
568 If a certificate is received from the other end, no attempt to validate it
569 is made.
570
571 See the discussion of :ref:`ssl-security` below.
Thomas Woutersed03b412007-08-28 21:37:11 +0000572
573.. data:: CERT_OPTIONAL
574
Antoine Pitrou152efa22010-05-16 18:19:27 +0000575 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
576 parameter to :func:`wrap_socket`. In this mode no certificates will be
577 required from the other side of the socket connection; but if they
578 are provided, validation will be attempted and an :class:`SSLError`
579 will be raised on failure.
580
581 Use of this setting requires a valid set of CA certificates to
582 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
583 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000584
585.. data:: CERT_REQUIRED
586
Antoine Pitrou152efa22010-05-16 18:19:27 +0000587 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
588 parameter to :func:`wrap_socket`. In this mode, certificates are
589 required from the other side of the socket connection; an :class:`SSLError`
590 will be raised if no certificate is provided, or if its validation fails.
591
592 Use of this setting requires a valid set of CA certificates to
593 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
594 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000595
Christian Heimes3aeacad2016-09-10 00:19:35 +0200596.. class:: VerifyMode
597
598 :class:`enum.IntEnum` collection of CERT_* constants.
599
600 .. versionadded:: 3.6
601
Christian Heimes22587792013-11-21 23:56:13 +0100602.. data:: VERIFY_DEFAULT
603
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500604 Possible value for :attr:`SSLContext.verify_flags`. In this mode, certificate
605 revocation lists (CRLs) are not checked. By default OpenSSL does neither
606 require nor verify CRLs.
Christian Heimes22587792013-11-21 23:56:13 +0100607
608 .. versionadded:: 3.4
609
610.. data:: VERIFY_CRL_CHECK_LEAF
611
612 Possible value for :attr:`SSLContext.verify_flags`. In this mode, only the
613 peer cert is check but non of the intermediate CA certificates. The mode
614 requires a valid CRL that is signed by the peer cert's issuer (its direct
615 ancestor CA). If no proper has been loaded
616 :attr:`SSLContext.load_verify_locations`, validation will fail.
617
618 .. versionadded:: 3.4
619
620.. data:: VERIFY_CRL_CHECK_CHAIN
621
622 Possible value for :attr:`SSLContext.verify_flags`. In this mode, CRLs of
623 all certificates in the peer cert chain are checked.
624
625 .. versionadded:: 3.4
626
627.. data:: VERIFY_X509_STRICT
628
629 Possible value for :attr:`SSLContext.verify_flags` to disable workarounds
630 for broken X.509 certificates.
631
632 .. versionadded:: 3.4
633
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500634.. data:: VERIFY_X509_TRUSTED_FIRST
635
636 Possible value for :attr:`SSLContext.verify_flags`. It instructs OpenSSL to
637 prefer trusted certificates when building the trust chain to validate a
638 certificate. This flag is enabled by default.
639
Benjamin Petersonc8358272015-03-08 09:42:25 -0400640 .. versionadded:: 3.4.4
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500641
Christian Heimes3aeacad2016-09-10 00:19:35 +0200642.. class:: VerifyFlags
643
644 :class:`enum.IntFlag` collection of VERIFY_* constants.
645
646 .. versionadded:: 3.6
647
Christian Heimes598894f2016-09-05 23:19:05 +0200648.. data:: PROTOCOL_TLS
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200649
650 Selects the highest protocol version that both the client and server support.
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700651 Despite the name, this option can select both "SSL" and "TLS" protocols.
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200652
Christian Heimes01113fa2016-09-05 23:23:24 +0200653 .. versionadded:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200654
Christian Heimes5fe668c2016-09-12 00:01:11 +0200655.. data:: PROTOCOL_TLS_CLIENT
656
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700657 Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`,
Christian Heimes5fe668c2016-09-12 00:01:11 +0200658 but only support client-side :class:`SSLSocket` connections. The protocol
659 enables :data:`CERT_REQUIRED` and :attr:`~SSLContext.check_hostname` by
660 default.
661
662 .. versionadded:: 3.6
663
664.. data:: PROTOCOL_TLS_SERVER
665
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700666 Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`,
Christian Heimes5fe668c2016-09-12 00:01:11 +0200667 but only support server-side :class:`SSLSocket` connections.
668
669 .. versionadded:: 3.6
670
Christian Heimes598894f2016-09-05 23:19:05 +0200671.. data:: PROTOCOL_SSLv23
672
673 Alias for data:`PROTOCOL_TLS`.
674
Christian Heimes01113fa2016-09-05 23:23:24 +0200675 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200676
Berker Peksagd93c4de2017-02-06 13:37:19 +0300677 Use :data:`PROTOCOL_TLS` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200678
Thomas Woutersed03b412007-08-28 21:37:11 +0000679.. data:: PROTOCOL_SSLv2
680
681 Selects SSL version 2 as the channel encryption protocol.
682
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500683 This protocol is not available if OpenSSL is compiled with the
684 ``OPENSSL_NO_SSL2`` flag.
Victor Stinner3de49192011-05-09 00:42:58 +0200685
Antoine Pitrou8eac60d2010-05-16 14:19:41 +0000686 .. warning::
687
688 SSL version 2 is insecure. Its use is highly discouraged.
689
Christian Heimes01113fa2016-09-05 23:23:24 +0200690 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200691
692 OpenSSL has removed support for SSLv2.
693
Thomas Woutersed03b412007-08-28 21:37:11 +0000694.. data:: PROTOCOL_SSLv3
695
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200696 Selects SSL version 3 as the channel encryption protocol.
697
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500698 This protocol is not be available if OpenSSL is compiled with the
699 ``OPENSSL_NO_SSLv3`` flag.
700
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200701 .. warning::
702
703 SSL version 3 is insecure. Its use is highly discouraged.
Thomas Woutersed03b412007-08-28 21:37:11 +0000704
Christian Heimes01113fa2016-09-05 23:23:24 +0200705 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200706
707 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300708 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200709
Thomas Woutersed03b412007-08-28 21:37:11 +0000710.. data:: PROTOCOL_TLSv1
711
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100712 Selects TLS version 1.0 as the channel encryption protocol.
713
Christian Heimes01113fa2016-09-05 23:23:24 +0200714 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200715
716 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300717 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200718
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100719.. data:: PROTOCOL_TLSv1_1
720
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100721 Selects TLS version 1.1 as the channel encryption protocol.
722 Available only with openssl version 1.0.1+.
723
724 .. versionadded:: 3.4
725
Christian Heimes01113fa2016-09-05 23:23:24 +0200726 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200727
728 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300729 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200730
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100731.. data:: PROTOCOL_TLSv1_2
732
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200733 Selects TLS version 1.2 as the channel encryption protocol. This is the
734 most modern version, and probably the best choice for maximum protection,
735 if both sides can speak it. Available only with openssl version 1.0.1+.
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100736
737 .. versionadded:: 3.4
Thomas Woutersed03b412007-08-28 21:37:11 +0000738
Christian Heimes01113fa2016-09-05 23:23:24 +0200739 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200740
741 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300742 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200743
Antoine Pitroub5218772010-05-21 09:56:06 +0000744.. data:: OP_ALL
745
746 Enables workarounds for various bugs present in other SSL implementations.
Antoine Pitrou9f6b02e2012-01-27 10:02:55 +0100747 This option is set by default. It does not necessarily set the same
748 flags as OpenSSL's ``SSL_OP_ALL`` constant.
Antoine Pitroub5218772010-05-21 09:56:06 +0000749
750 .. versionadded:: 3.2
751
752.. data:: OP_NO_SSLv2
753
754 Prevents an SSLv2 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200755 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000756 choosing SSLv2 as the protocol version.
757
758 .. versionadded:: 3.2
759
Christian Heimes01113fa2016-09-05 23:23:24 +0200760 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200761
762 SSLv2 is deprecated
763
764
Antoine Pitroub5218772010-05-21 09:56:06 +0000765.. data:: OP_NO_SSLv3
766
767 Prevents an SSLv3 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200768 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000769 choosing SSLv3 as the protocol version.
770
771 .. versionadded:: 3.2
772
Christian Heimes01113fa2016-09-05 23:23:24 +0200773 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200774
775 SSLv3 is deprecated
776
Antoine Pitroub5218772010-05-21 09:56:06 +0000777.. data:: OP_NO_TLSv1
778
779 Prevents a TLSv1 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200780 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000781 choosing TLSv1 as the protocol version.
782
783 .. versionadded:: 3.2
784
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100785.. data:: OP_NO_TLSv1_1
786
787 Prevents a TLSv1.1 connection. This option is only applicable in conjunction
Christian Heimes598894f2016-09-05 23:19:05 +0200788 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.1 as
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100789 the protocol version. Available only with openssl version 1.0.1+.
790
791 .. versionadded:: 3.4
792
793.. data:: OP_NO_TLSv1_2
794
795 Prevents a TLSv1.2 connection. This option is only applicable in conjunction
Christian Heimes598894f2016-09-05 23:19:05 +0200796 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.2 as
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100797 the protocol version. Available only with openssl version 1.0.1+.
798
799 .. versionadded:: 3.4
800
Christian Heimescb5b68a2017-09-07 18:07:00 -0700801.. data:: OP_NO_TLSv1_3
802
803 Prevents a TLSv1.3 connection. This option is only applicable in conjunction
804 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.3 as
805 the protocol version. TLS 1.3 is available with OpenSSL 1.1.1 or later.
806 When Python has been compiled against an older version of OpenSSL, the
807 flag defaults to *0*.
808
809 .. versionadded:: 3.7
810
Antoine Pitrou6db49442011-12-19 13:27:11 +0100811.. data:: OP_CIPHER_SERVER_PREFERENCE
812
813 Use the server's cipher ordering preference, rather than the client's.
814 This option has no effect on client sockets and SSLv2 server sockets.
815
816 .. versionadded:: 3.3
817
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100818.. data:: OP_SINGLE_DH_USE
819
820 Prevents re-use of the same DH key for distinct SSL sessions. This
821 improves forward secrecy but requires more computational resources.
822 This option only applies to server sockets.
823
824 .. versionadded:: 3.3
825
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100826.. data:: OP_SINGLE_ECDH_USE
827
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100828 Prevents re-use of the same ECDH key for distinct SSL sessions. This
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100829 improves forward secrecy but requires more computational resources.
830 This option only applies to server sockets.
831
832 .. versionadded:: 3.3
833
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100834.. data:: OP_NO_COMPRESSION
835
836 Disable compression on the SSL channel. This is useful if the application
837 protocol supports its own compression scheme.
838
839 This option is only available with OpenSSL 1.0.0 and later.
840
841 .. versionadded:: 3.3
842
Christian Heimes3aeacad2016-09-10 00:19:35 +0200843.. class:: Options
844
845 :class:`enum.IntFlag` collection of OP_* constants.
846
Christian Heimes99a65702016-09-10 23:44:53 +0200847.. data:: OP_NO_TICKET
848
849 Prevent client side from requesting a session ticket.
850
Christian Heimes3aeacad2016-09-10 00:19:35 +0200851 .. versionadded:: 3.6
852
Benjamin Petersoncca27322015-01-23 16:35:37 -0500853.. data:: HAS_ALPN
854
855 Whether the OpenSSL library has built-in support for the *Application-Layer
856 Protocol Negotiation* TLS extension as described in :rfc:`7301`.
857
858 .. versionadded:: 3.5
859
Christian Heimes61d478c2018-01-27 15:51:38 +0100860.. data:: HAS_NEVER_CHECK_COMMON_NAME
861
862 Whether the OpenSSL library has built-in support not checking subject
863 common name and :attr:`SSLContext.hostname_checks_common_name` is
864 writeable.
865
866 .. versionadded:: 3.7
867
Antoine Pitrou501da612011-12-21 09:27:41 +0100868.. data:: HAS_ECDH
869
870 Whether the OpenSSL library has built-in support for Elliptic Curve-based
871 Diffie-Hellman key exchange. This should be true unless the feature was
872 explicitly disabled by the distributor.
873
874 .. versionadded:: 3.3
875
Antoine Pitroud5323212010-10-22 18:19:07 +0000876.. data:: HAS_SNI
877
878 Whether the OpenSSL library has built-in support for the *Server Name
Chandan Kumar63c2c8a2017-06-09 15:13:58 +0530879 Indication* extension (as defined in :rfc:`6066`).
Antoine Pitroud5323212010-10-22 18:19:07 +0000880
881 .. versionadded:: 3.2
882
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100883.. data:: HAS_NPN
884
885 Whether the OpenSSL library has built-in support for *Next Protocol
Sanyam Khurana338cd832018-01-20 05:55:37 +0530886 Negotiation* as described in the `Application Layer Protocol
887 Negotiation <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_.
888 When true, you can use the :meth:`SSLContext.set_npn_protocols` method to advertise
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100889 which protocols you want to support.
890
891 .. versionadded:: 3.3
892
Christian Heimescb5b68a2017-09-07 18:07:00 -0700893.. data:: HAS_TLSv1_3
894
895 Whether the OpenSSL library has built-in support for the TLS 1.3 protocol.
896
897 .. versionadded:: 3.7
898
Antoine Pitroud6494802011-07-21 01:11:30 +0200899.. data:: CHANNEL_BINDING_TYPES
900
901 List of supported TLS channel binding types. Strings in this list
902 can be used as arguments to :meth:`SSLSocket.get_channel_binding`.
903
904 .. versionadded:: 3.3
905
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000906.. data:: OPENSSL_VERSION
907
908 The version string of the OpenSSL library loaded by the interpreter::
909
910 >>> ssl.OPENSSL_VERSION
Alex Gaynor275104e2017-03-02 05:23:19 -0500911 'OpenSSL 1.0.2k 26 Jan 2017'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000912
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000913 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000914
915.. data:: OPENSSL_VERSION_INFO
916
917 A tuple of five integers representing version information about the
918 OpenSSL library::
919
920 >>> ssl.OPENSSL_VERSION_INFO
Alex Gaynor275104e2017-03-02 05:23:19 -0500921 (1, 0, 2, 11, 15)
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000922
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000923 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000924
925.. data:: OPENSSL_VERSION_NUMBER
926
927 The raw version number of the OpenSSL library, as a single integer::
928
929 >>> ssl.OPENSSL_VERSION_NUMBER
Alex Gaynor275104e2017-03-02 05:23:19 -0500930 268443839
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000931 >>> hex(ssl.OPENSSL_VERSION_NUMBER)
Alex Gaynor275104e2017-03-02 05:23:19 -0500932 '0x100020bf'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000933
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000934 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000935
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100936.. data:: ALERT_DESCRIPTION_HANDSHAKE_FAILURE
937 ALERT_DESCRIPTION_INTERNAL_ERROR
938 ALERT_DESCRIPTION_*
939
940 Alert Descriptions from :rfc:`5246` and others. The `IANA TLS Alert Registry
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300941 <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100942 contains this list and references to the RFCs where their meaning is defined.
943
944 Used as the return value of the callback function in
945 :meth:`SSLContext.set_servername_callback`.
946
947 .. versionadded:: 3.4
948
Christian Heimes3aeacad2016-09-10 00:19:35 +0200949.. class:: AlertDescription
950
951 :class:`enum.IntEnum` collection of ALERT_DESCRIPTION_* constants.
952
953 .. versionadded:: 3.6
954
Christian Heimes72d28502013-11-23 13:56:58 +0100955.. data:: Purpose.SERVER_AUTH
956
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100957 Option for :func:`create_default_context` and
958 :meth:`SSLContext.load_default_certs`. This value indicates that the
959 context may be used to authenticate Web servers (therefore, it will
960 be used to create client-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100961
962 .. versionadded:: 3.4
963
Christian Heimes6b2ff982013-11-23 14:42:01 +0100964.. data:: Purpose.CLIENT_AUTH
Christian Heimes72d28502013-11-23 13:56:58 +0100965
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100966 Option for :func:`create_default_context` and
967 :meth:`SSLContext.load_default_certs`. This value indicates that the
968 context may be used to authenticate Web clients (therefore, it will
969 be used to create server-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100970
971 .. versionadded:: 3.4
972
Christian Heimes3aeacad2016-09-10 00:19:35 +0200973.. class:: SSLErrorNumber
974
975 :class:`enum.IntEnum` collection of SSL_ERROR_* constants.
976
977 .. versionadded:: 3.6
978
Thomas Woutersed03b412007-08-28 21:37:11 +0000979
Antoine Pitrou152efa22010-05-16 18:19:27 +0000980SSL Sockets
981-----------
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000982
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200983.. class:: SSLSocket(socket.socket)
Antoine Pitrou792ff3e2010-09-19 13:19:21 +0000984
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200985 SSL sockets provide the following methods of :ref:`socket-objects`:
Zachary Wareba9fb0d2014-06-11 15:02:25 -0500986
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200987 - :meth:`~socket.socket.accept()`
988 - :meth:`~socket.socket.bind()`
989 - :meth:`~socket.socket.close()`
990 - :meth:`~socket.socket.connect()`
991 - :meth:`~socket.socket.detach()`
992 - :meth:`~socket.socket.fileno()`
993 - :meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`
994 - :meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`
995 - :meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`,
996 :meth:`~socket.socket.setblocking()`
997 - :meth:`~socket.socket.listen()`
998 - :meth:`~socket.socket.makefile()`
999 - :meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()`
1000 (but passing a non-zero ``flags`` argument is not allowed)
1001 - :meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with
1002 the same limitation)
Victor Stinner92127a52014-10-10 12:43:17 +02001003 - :meth:`~socket.socket.sendfile()` (but :mod:`os.sendfile` will be used
1004 for plain-text sockets only, else :meth:`~socket.socket.send()` will be used)
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001005 - :meth:`~socket.socket.shutdown()`
Zachary Wareba9fb0d2014-06-11 15:02:25 -05001006
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001007 However, since the SSL (and TLS) protocol has its own framing atop
1008 of TCP, the SSL sockets abstraction can, in certain respects, diverge from
1009 the specification of normal, OS-level sockets. See especially the
1010 :ref:`notes on non-blocking sockets <ssl-nonblocking>`.
Antoine Pitroue1f2f302010-09-19 13:56:11 +00001011
Victor Stinnerd28fe8c2014-10-10 12:07:19 +02001012 Usually, :class:`SSLSocket` are not created directly, but using the
Alex Gaynor1cf2a802017-02-28 22:26:56 -05001013 :meth:`SSLContext.wrap_socket` method.
Victor Stinnerd28fe8c2014-10-10 12:07:19 +02001014
Victor Stinner92127a52014-10-10 12:43:17 +02001015 .. versionchanged:: 3.5
1016 The :meth:`sendfile` method was added.
1017
Victor Stinner14690702015-04-06 22:46:13 +02001018 .. versionchanged:: 3.5
1019 The :meth:`shutdown` does not reset the socket timeout each time bytes
1020 are received or sent. The socket timeout is now to maximum total duration
1021 of the shutdown.
1022
Christian Heimesd0486372016-09-10 23:23:33 +02001023 .. deprecated:: 3.6
1024 It is deprecated to create a :class:`SSLSocket` instance directly, use
1025 :meth:`SSLContext.wrap_socket` to wrap a socket.
1026
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001027
1028SSL sockets also have the following additional methods and attributes:
Antoine Pitrou792ff3e2010-09-19 13:19:21 +00001029
Martin Panterf6b1d662016-03-28 00:22:09 +00001030.. method:: SSLSocket.read(len=1024, buffer=None)
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001031
1032 Read up to *len* bytes of data from the SSL socket and return the result as
1033 a ``bytes`` instance. If *buffer* is specified, then read into the buffer
1034 instead, and return the number of bytes read.
1035
Victor Stinner41f92c22014-10-10 12:05:56 +02001036 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001037 :ref:`non-blocking <ssl-nonblocking>` and the read would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001038
1039 As at any time a re-negotiation is possible, a call to :meth:`read` can also
1040 cause write operations.
1041
Victor Stinner14690702015-04-06 22:46:13 +02001042 .. versionchanged:: 3.5
1043 The socket timeout is no more reset each time bytes are received or sent.
1044 The socket timeout is now to maximum total duration to read up to *len*
1045 bytes.
1046
Christian Heimesd0486372016-09-10 23:23:33 +02001047 .. deprecated:: 3.6
1048 Use :meth:`~SSLSocket.recv` instead of :meth:`~SSLSocket.read`.
1049
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001050.. method:: SSLSocket.write(buf)
1051
1052 Write *buf* to the SSL socket and return the number of bytes written. The
1053 *buf* argument must be an object supporting the buffer interface.
1054
Victor Stinner41f92c22014-10-10 12:05:56 +02001055 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001056 :ref:`non-blocking <ssl-nonblocking>` and the write would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001057
1058 As at any time a re-negotiation is possible, a call to :meth:`write` can
1059 also cause read operations.
1060
Victor Stinner14690702015-04-06 22:46:13 +02001061 .. versionchanged:: 3.5
1062 The socket timeout is no more reset each time bytes are received or sent.
1063 The socket timeout is now to maximum total duration to write *buf*.
1064
Christian Heimesd0486372016-09-10 23:23:33 +02001065 .. deprecated:: 3.6
1066 Use :meth:`~SSLSocket.send` instead of :meth:`~SSLSocket.write`.
1067
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001068.. note::
1069
1070 The :meth:`~SSLSocket.read` and :meth:`~SSLSocket.write` methods are the
1071 low-level methods that read and write unencrypted, application-level data
Martin Panter1f1177d2015-10-31 11:48:53 +00001072 and decrypt/encrypt it to encrypted, wire-level data. These methods
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001073 require an active SSL connection, i.e. the handshake was completed and
1074 :meth:`SSLSocket.unwrap` was not called.
1075
1076 Normally you should use the socket API methods like
1077 :meth:`~socket.socket.recv` and :meth:`~socket.socket.send` instead of these
1078 methods.
1079
Bill Janssen48dc27c2007-12-05 03:38:10 +00001080.. method:: SSLSocket.do_handshake()
1081
Antoine Pitroub3593ca2011-07-11 01:39:19 +02001082 Perform the SSL setup handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +00001083
Christian Heimes1aa9a752013-12-02 02:41:19 +01001084 .. versionchanged:: 3.4
Zachary Ware88a19772014-07-25 13:30:50 -05001085 The handshake method also performs :func:`match_hostname` when the
Christian Heimes1aa9a752013-12-02 02:41:19 +01001086 :attr:`~SSLContext.check_hostname` attribute of the socket's
1087 :attr:`~SSLSocket.context` is true.
1088
Victor Stinner14690702015-04-06 22:46:13 +02001089 .. versionchanged:: 3.5
1090 The socket timeout is no more reset each time bytes are received or sent.
1091 The socket timeout is now to maximum total duration of the handshake.
1092
Christian Heimes61d478c2018-01-27 15:51:38 +01001093 .. versionchanged:: 3.7
1094 Hostname or IP address is matched by OpenSSL during handshake. The
1095 function :func:`match_hostname` is no longer used. In case OpenSSL
1096 refuses a hostname or IP address, the handshake is aborted early and
1097 a TLS alert message is send to the peer.
1098
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001099.. method:: SSLSocket.getpeercert(binary_form=False)
1100
Georg Brandl7f01a132009-09-16 15:58:14 +00001101 If there is no certificate for the peer on the other end of the connection,
Antoine Pitrou20b85552013-09-29 19:50:53 +02001102 return ``None``. If the SSL handshake hasn't been done yet, raise
1103 :exc:`ValueError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001104
Antoine Pitroud34941a2013-04-16 20:27:17 +02001105 If the ``binary_form`` parameter is :const:`False`, and a certificate was
Georg Brandl7f01a132009-09-16 15:58:14 +00001106 received from the peer, this method returns a :class:`dict` instance. If the
1107 certificate was not validated, the dict is empty. If the certificate was
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001108 validated, it returns a dict with several keys, amongst them ``subject``
1109 (the principal for which the certificate was issued) and ``issuer``
1110 (the principal issuing the certificate). If a certificate contains an
1111 instance of the *Subject Alternative Name* extension (see :rfc:`3280`),
1112 there will also be a ``subjectAltName`` key in the dictionary.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001113
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001114 The ``subject`` and ``issuer`` fields are tuples containing the sequence
1115 of relative distinguished names (RDNs) given in the certificate's data
1116 structure for the respective fields, and each RDN is a sequence of
1117 name-value pairs. Here is a real-world example::
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001118
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001119 {'issuer': ((('countryName', 'IL'),),
1120 (('organizationName', 'StartCom Ltd.'),),
1121 (('organizationalUnitName',
1122 'Secure Digital Certificate Signing'),),
1123 (('commonName',
1124 'StartCom Class 2 Primary Intermediate Server CA'),)),
1125 'notAfter': 'Nov 22 08:15:19 2013 GMT',
1126 'notBefore': 'Nov 21 03:09:52 2011 GMT',
1127 'serialNumber': '95F0',
1128 'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),),
1129 (('countryName', 'US'),),
1130 (('stateOrProvinceName', 'California'),),
1131 (('localityName', 'San Francisco'),),
1132 (('organizationName', 'Electronic Frontier Foundation, Inc.'),),
1133 (('commonName', '*.eff.org'),),
1134 (('emailAddress', 'hostmaster@eff.org'),)),
1135 'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')),
1136 'version': 3}
1137
1138 .. note::
Larry Hastings3732ed22014-03-15 21:13:56 -07001139
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001140 To validate a certificate for a particular service, you can use the
1141 :func:`match_hostname` function.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001142
Georg Brandl7f01a132009-09-16 15:58:14 +00001143 If the ``binary_form`` parameter is :const:`True`, and a certificate was
1144 provided, this method returns the DER-encoded form of the entire certificate
1145 as a sequence of bytes, or :const:`None` if the peer did not provide a
Antoine Pitroud34941a2013-04-16 20:27:17 +02001146 certificate. Whether the peer provides a certificate depends on the SSL
1147 socket's role:
1148
1149 * for a client SSL socket, the server will always provide a certificate,
1150 regardless of whether validation was required;
1151
1152 * for a server SSL socket, the client will only provide a certificate
1153 when requested by the server; therefore :meth:`getpeercert` will return
1154 :const:`None` if you used :const:`CERT_NONE` (rather than
1155 :const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`).
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001156
Antoine Pitroufb046912010-11-09 20:21:19 +00001157 .. versionchanged:: 3.2
1158 The returned dictionary includes additional items such as ``issuer``
1159 and ``notBefore``.
1160
Antoine Pitrou20b85552013-09-29 19:50:53 +02001161 .. versionchanged:: 3.4
1162 :exc:`ValueError` is raised when the handshake isn't done.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001163 The returned dictionary includes additional X509v3 extension items
Larry Hastings3732ed22014-03-15 21:13:56 -07001164 such as ``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001165
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001166.. method:: SSLSocket.cipher()
1167
Georg Brandl7f01a132009-09-16 15:58:14 +00001168 Returns a three-value tuple containing the name of the cipher being used, the
1169 version of the SSL protocol that defines its use, and the number of secret
1170 bits being used. If no connection has been established, returns ``None``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001171
Benjamin Peterson4cb17812015-01-07 11:14:26 -06001172.. method:: SSLSocket.shared_ciphers()
1173
1174 Return the list of ciphers shared by the client during the handshake. Each
1175 entry of the returned list is a three-value tuple containing the name of the
1176 cipher, the version of the SSL protocol that defines its use, and the number
1177 of secret bits the cipher uses. :meth:`~SSLSocket.shared_ciphers` returns
1178 ``None`` if no connection has been established or the socket is a client
1179 socket.
1180
1181 .. versionadded:: 3.5
1182
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +01001183.. method:: SSLSocket.compression()
1184
1185 Return the compression algorithm being used as a string, or ``None``
1186 if the connection isn't compressed.
1187
1188 If the higher-level protocol supports its own compression mechanism,
1189 you can use :data:`OP_NO_COMPRESSION` to disable SSL-level compression.
1190
1191 .. versionadded:: 3.3
1192
Antoine Pitroud6494802011-07-21 01:11:30 +02001193.. method:: SSLSocket.get_channel_binding(cb_type="tls-unique")
1194
1195 Get channel binding data for current connection, as a bytes object. Returns
1196 ``None`` if not connected or the handshake has not been completed.
1197
1198 The *cb_type* parameter allow selection of the desired channel binding
1199 type. Valid channel binding types are listed in the
1200 :data:`CHANNEL_BINDING_TYPES` list. Currently only the 'tls-unique' channel
1201 binding, defined by :rfc:`5929`, is supported. :exc:`ValueError` will be
1202 raised if an unsupported channel binding type is requested.
1203
1204 .. versionadded:: 3.3
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001205
Benjamin Petersoncca27322015-01-23 16:35:37 -05001206.. method:: SSLSocket.selected_alpn_protocol()
1207
1208 Return the protocol that was selected during the TLS handshake. If
1209 :meth:`SSLContext.set_alpn_protocols` was not called, if the other party does
Benjamin Peterson88615022015-01-23 17:30:26 -05001210 not support ALPN, if this socket does not support any of the client's
1211 proposed protocols, or if the handshake has not happened yet, ``None`` is
Benjamin Petersoncca27322015-01-23 16:35:37 -05001212 returned.
1213
1214 .. versionadded:: 3.5
1215
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001216.. method:: SSLSocket.selected_npn_protocol()
1217
Benjamin Petersoncca27322015-01-23 16:35:37 -05001218 Return the higher-level protocol that was selected during the TLS/SSL
Antoine Pitrou47e40422014-09-04 21:00:10 +02001219 handshake. If :meth:`SSLContext.set_npn_protocols` was not called, or
1220 if the other party does not support NPN, or if the handshake has not yet
1221 happened, this will return ``None``.
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001222
1223 .. versionadded:: 3.3
1224
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001225.. method:: SSLSocket.unwrap()
1226
Georg Brandl7f01a132009-09-16 15:58:14 +00001227 Performs the SSL shutdown handshake, which removes the TLS layer from the
1228 underlying socket, and returns the underlying socket object. This can be
1229 used to go from encrypted operation over a connection to unencrypted. The
1230 returned socket should always be used for further communication with the
1231 other side of the connection, rather than the original socket.
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001232
Antoine Pitrou47e40422014-09-04 21:00:10 +02001233.. method:: SSLSocket.version()
1234
1235 Return the actual SSL protocol version negotiated by the connection
1236 as a string, or ``None`` is no secure connection is established.
1237 As of this writing, possible return values include ``"SSLv2"``,
1238 ``"SSLv3"``, ``"TLSv1"``, ``"TLSv1.1"`` and ``"TLSv1.2"``.
1239 Recent OpenSSL versions may define more return values.
1240
1241 .. versionadded:: 3.5
1242
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001243.. method:: SSLSocket.pending()
1244
1245 Returns the number of already decrypted bytes available for read, pending on
1246 the connection.
1247
Antoine Pitrouec883db2010-05-24 21:20:20 +00001248.. attribute:: SSLSocket.context
1249
1250 The :class:`SSLContext` object this SSL socket is tied to. If the SSL
1251 socket was created using the top-level :func:`wrap_socket` function
1252 (rather than :meth:`SSLContext.wrap_socket`), this is a custom context
1253 object created for this SSL socket.
1254
1255 .. versionadded:: 3.2
1256
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001257.. attribute:: SSLSocket.server_side
1258
1259 A boolean which is ``True`` for server-side sockets and ``False`` for
1260 client-side sockets.
1261
Victor Stinner41f92c22014-10-10 12:05:56 +02001262 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001263
1264.. attribute:: SSLSocket.server_hostname
1265
Victor Stinner41f92c22014-10-10 12:05:56 +02001266 Hostname of the server: :class:`str` type, or ``None`` for server-side
1267 socket or if the hostname was not specified in the constructor.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001268
Victor Stinner41f92c22014-10-10 12:05:56 +02001269 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001270
Christian Heimes99a65702016-09-10 23:44:53 +02001271.. attribute:: SSLSocket.session
1272
1273 The :class:`SSLSession` for this SSL connection. The session is available
1274 for client and server side sockets after the TLS handshake has been
1275 performed. For client sockets the session can be set before
1276 :meth:`~SSLSocket.do_handshake` has been called to reuse a session.
1277
1278 .. versionadded:: 3.6
1279
1280.. attribute:: SSLSocket.session_reused
1281
1282 .. versionadded:: 3.6
1283
Antoine Pitrouec883db2010-05-24 21:20:20 +00001284
Antoine Pitrou152efa22010-05-16 18:19:27 +00001285SSL Contexts
1286------------
1287
Antoine Pitroucafaad42010-05-24 15:58:43 +00001288.. versionadded:: 3.2
1289
Antoine Pitroub0182c82010-10-12 20:09:02 +00001290An SSL context holds various data longer-lived than single SSL connections,
1291such as SSL configuration options, certificate(s) and private key(s).
1292It also manages a cache of SSL sessions for server-side sockets, in order
1293to speed up repeated connections from the same clients.
1294
Christian Heimes598894f2016-09-05 23:19:05 +02001295.. class:: SSLContext(protocol=PROTOCOL_TLS)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001296
Christian Heimes598894f2016-09-05 23:19:05 +02001297 Create a new SSL context. You may pass *protocol* which must be one
Antoine Pitroub0182c82010-10-12 20:09:02 +00001298 of the ``PROTOCOL_*`` constants defined in this module.
Christian Heimes598894f2016-09-05 23:19:05 +02001299 :data:`PROTOCOL_TLS` is currently recommended for maximum
1300 interoperability and default value.
Antoine Pitrou5bef4102013-11-23 16:16:29 +01001301
1302 .. seealso::
1303 :func:`create_default_context` lets the :mod:`ssl` module choose
1304 security settings for a given purpose.
Antoine Pitroub0182c82010-10-12 20:09:02 +00001305
Christian Heimes01113fa2016-09-05 23:23:24 +02001306 .. versionchanged:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +02001307
Christian Heimes358cfd42016-09-10 22:43:48 +02001308 The context is created with secure default values. The options
1309 :data:`OP_NO_COMPRESSION`, :data:`OP_CIPHER_SERVER_PREFERENCE`,
1310 :data:`OP_SINGLE_DH_USE`, :data:`OP_SINGLE_ECDH_USE`,
1311 :data:`OP_NO_SSLv2` (except for :data:`PROTOCOL_SSLv2`),
1312 and :data:`OP_NO_SSLv3` (except for :data:`PROTOCOL_SSLv3`) are
1313 set by default. The initial cipher suite list contains only ``HIGH``
1314 ciphers, no ``NULL`` ciphers and no ``MD5`` ciphers (except for
1315 :data:`PROTOCOL_SSLv2`).
Christian Heimes598894f2016-09-05 23:19:05 +02001316
Antoine Pitrou152efa22010-05-16 18:19:27 +00001317
1318:class:`SSLContext` objects have the following methods and attributes:
1319
Christian Heimes9a5395a2013-06-17 15:44:12 +02001320.. method:: SSLContext.cert_store_stats()
1321
1322 Get statistics about quantities of loaded X.509 certificates, count of
1323 X.509 certificates flagged as CA certificates and certificate revocation
1324 lists as dictionary.
1325
1326 Example for a context with one CA cert and one other cert::
1327
1328 >>> context.cert_store_stats()
1329 {'crl': 0, 'x509_ca': 1, 'x509': 2}
1330
1331 .. versionadded:: 3.4
1332
Christian Heimesefff7062013-11-21 03:35:02 +01001333
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001334.. method:: SSLContext.load_cert_chain(certfile, keyfile=None, password=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001335
1336 Load a private key and the corresponding certificate. The *certfile*
1337 string must be the path to a single file in PEM format containing the
1338 certificate as well as any number of CA certificates needed to establish
1339 the certificate's authenticity. The *keyfile* string, if present, must
1340 point to a file containing the private key in. Otherwise the private
1341 key will be taken from *certfile* as well. See the discussion of
1342 :ref:`ssl-certificates` for more information on how the certificate
1343 is stored in the *certfile*.
1344
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001345 The *password* argument may be a function to call to get the password for
1346 decrypting the private key. It will only be called if the private key is
1347 encrypted and a password is necessary. It will be called with no arguments,
1348 and it should return a string, bytes, or bytearray. If the return value is
1349 a string it will be encoded as UTF-8 before using it to decrypt the key.
1350 Alternatively a string, bytes, or bytearray value may be supplied directly
1351 as the *password* argument. It will be ignored if the private key is not
1352 encrypted and no password is needed.
1353
1354 If the *password* argument is not specified and a password is required,
1355 OpenSSL's built-in password prompting mechanism will be used to
1356 interactively prompt the user for a password.
1357
Antoine Pitrou152efa22010-05-16 18:19:27 +00001358 An :class:`SSLError` is raised if the private key doesn't
1359 match with the certificate.
1360
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001361 .. versionchanged:: 3.3
1362 New optional argument *password*.
1363
Christian Heimes72d28502013-11-23 13:56:58 +01001364.. method:: SSLContext.load_default_certs(purpose=Purpose.SERVER_AUTH)
1365
1366 Load a set of default "certification authority" (CA) certificates from
1367 default locations. On Windows it loads CA certs from the ``CA`` and
1368 ``ROOT`` system stores. On other systems it calls
1369 :meth:`SSLContext.set_default_verify_paths`. In the future the method may
1370 load CA certificates from other locations, too.
1371
1372 The *purpose* flag specifies what kind of CA certificates are loaded. The
1373 default settings :data:`Purpose.SERVER_AUTH` loads certificates, that are
1374 flagged and trusted for TLS web server authentication (client side
Christian Heimes6b2ff982013-11-23 14:42:01 +01001375 sockets). :data:`Purpose.CLIENT_AUTH` loads CA certificates for client
Christian Heimes72d28502013-11-23 13:56:58 +01001376 certificate verification on the server side.
1377
1378 .. versionadded:: 3.4
1379
Christian Heimesefff7062013-11-21 03:35:02 +01001380.. method:: SSLContext.load_verify_locations(cafile=None, capath=None, cadata=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001381
1382 Load a set of "certification authority" (CA) certificates used to validate
1383 other peers' certificates when :data:`verify_mode` is other than
1384 :data:`CERT_NONE`. At least one of *cafile* or *capath* must be specified.
1385
Christian Heimes22587792013-11-21 23:56:13 +01001386 This method can also load certification revocation lists (CRLs) in PEM or
Donald Stufft8b852f12014-05-20 12:58:38 -04001387 DER format. In order to make use of CRLs, :attr:`SSLContext.verify_flags`
Christian Heimes22587792013-11-21 23:56:13 +01001388 must be configured properly.
1389
Christian Heimes3e738f92013-06-09 18:07:16 +02001390 The *cafile* string, if present, is the path to a file of concatenated
Antoine Pitrou152efa22010-05-16 18:19:27 +00001391 CA certificates in PEM format. See the discussion of
1392 :ref:`ssl-certificates` for more information about how to arrange the
1393 certificates in this file.
1394
1395 The *capath* string, if present, is
1396 the path to a directory containing several CA certificates in PEM format,
1397 following an `OpenSSL specific layout
Sanyam Khurana338cd832018-01-20 05:55:37 +05301398 <https://www.openssl.org/docs/manmaster/man3/SSL_CTX_load_verify_locations.html>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001399
Christian Heimesefff7062013-11-21 03:35:02 +01001400 The *cadata* object, if present, is either an ASCII string of one or more
Serhiy Storchakab757c832014-12-05 22:25:22 +02001401 PEM-encoded certificates or a :term:`bytes-like object` of DER-encoded
Christian Heimesefff7062013-11-21 03:35:02 +01001402 certificates. Like with *capath* extra lines around PEM-encoded
1403 certificates are ignored but at least one certificate must be present.
1404
1405 .. versionchanged:: 3.4
1406 New optional argument *cadata*
1407
Christian Heimes9a5395a2013-06-17 15:44:12 +02001408.. method:: SSLContext.get_ca_certs(binary_form=False)
1409
1410 Get a list of loaded "certification authority" (CA) certificates. If the
1411 ``binary_form`` parameter is :const:`False` each list
1412 entry is a dict like the output of :meth:`SSLSocket.getpeercert`. Otherwise
1413 the method returns a list of DER-encoded certificates. The returned list
1414 does not contain certificates from *capath* unless a certificate was
1415 requested and loaded by a SSL connection.
1416
Antoine Pitrou97aa9532015-04-13 21:06:15 +02001417 .. note::
1418 Certificates in a capath directory aren't loaded unless they have
1419 been used at least once.
1420
Larry Hastingsd36fc432013-08-03 02:49:53 -07001421 .. versionadded:: 3.4
Christian Heimes9a5395a2013-06-17 15:44:12 +02001422
Christian Heimes25bfcd52016-09-06 00:04:45 +02001423.. method:: SSLContext.get_ciphers()
1424
1425 Get a list of enabled ciphers. The list is in order of cipher priority.
1426 See :meth:`SSLContext.set_ciphers`.
1427
1428 Example::
1429
1430 >>> ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
1431 >>> ctx.set_ciphers('ECDHE+AESGCM:!ECDSA')
1432 >>> ctx.get_ciphers() # OpenSSL 1.0.x
1433 [{'alg_bits': 256,
1434 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA '
1435 'Enc=AESGCM(256) Mac=AEAD',
1436 'id': 50380848,
1437 'name': 'ECDHE-RSA-AES256-GCM-SHA384',
1438 'protocol': 'TLSv1/SSLv3',
1439 'strength_bits': 256},
1440 {'alg_bits': 128,
1441 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA '
1442 'Enc=AESGCM(128) Mac=AEAD',
1443 'id': 50380847,
1444 'name': 'ECDHE-RSA-AES128-GCM-SHA256',
1445 'protocol': 'TLSv1/SSLv3',
1446 'strength_bits': 128}]
1447
1448 On OpenSSL 1.1 and newer the cipher dict contains additional fields::
Marco Buttu7b2491a2017-04-13 16:17:59 +02001449
Christian Heimes25bfcd52016-09-06 00:04:45 +02001450 >>> ctx.get_ciphers() # OpenSSL 1.1+
1451 [{'aead': True,
1452 'alg_bits': 256,
1453 'auth': 'auth-rsa',
1454 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA '
1455 'Enc=AESGCM(256) Mac=AEAD',
1456 'digest': None,
1457 'id': 50380848,
1458 'kea': 'kx-ecdhe',
1459 'name': 'ECDHE-RSA-AES256-GCM-SHA384',
1460 'protocol': 'TLSv1.2',
1461 'strength_bits': 256,
1462 'symmetric': 'aes-256-gcm'},
1463 {'aead': True,
1464 'alg_bits': 128,
1465 'auth': 'auth-rsa',
1466 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA '
1467 'Enc=AESGCM(128) Mac=AEAD',
1468 'digest': None,
1469 'id': 50380847,
1470 'kea': 'kx-ecdhe',
1471 'name': 'ECDHE-RSA-AES128-GCM-SHA256',
1472 'protocol': 'TLSv1.2',
1473 'strength_bits': 128,
1474 'symmetric': 'aes-128-gcm'}]
1475
1476 Availability: OpenSSL 1.0.2+
1477
1478 .. versionadded:: 3.6
1479
Antoine Pitrou664c2d12010-11-17 20:29:42 +00001480.. method:: SSLContext.set_default_verify_paths()
1481
1482 Load a set of default "certification authority" (CA) certificates from
1483 a filesystem path defined when building the OpenSSL library. Unfortunately,
1484 there's no easy way to know whether this method succeeds: no error is
1485 returned if no certificates are to be found. When the OpenSSL library is
1486 provided as part of the operating system, though, it is likely to be
1487 configured properly.
1488
Antoine Pitrou152efa22010-05-16 18:19:27 +00001489.. method:: SSLContext.set_ciphers(ciphers)
1490
1491 Set the available ciphers for sockets created with this context.
1492 It should be a string in the `OpenSSL cipher list format
Felipe19e4d932017-09-20 20:20:18 +02001493 <https://wiki.openssl.org/index.php/Manual:Ciphers(1)#CIPHER_LIST_FORMAT>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001494 If no cipher can be selected (because compile-time options or other
1495 configuration forbids use of all the specified ciphers), an
1496 :class:`SSLError` will be raised.
1497
1498 .. note::
1499 when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will
1500 give the currently selected cipher.
1501
Benjamin Petersoncca27322015-01-23 16:35:37 -05001502.. method:: SSLContext.set_alpn_protocols(protocols)
1503
1504 Specify which protocols the socket should advertise during the SSL/TLS
1505 handshake. It should be a list of ASCII strings, like ``['http/1.1',
1506 'spdy/2']``, ordered by preference. The selection of a protocol will happen
1507 during the handshake, and will play out according to :rfc:`7301`. After a
1508 successful handshake, the :meth:`SSLSocket.selected_alpn_protocol` method will
1509 return the agreed-upon protocol.
1510
1511 This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is
1512 False.
1513
Christian Heimes7b40cb72017-08-15 10:33:43 +02001514 OpenSSL 1.1.0 to 1.1.0e will abort the handshake and raise :exc:`SSLError`
1515 when both sides support ALPN but cannot agree on a protocol. 1.1.0f+
1516 behaves like 1.0.2, :meth:`SSLSocket.selected_alpn_protocol` returns None.
Christian Heimes598894f2016-09-05 23:19:05 +02001517
Benjamin Petersoncca27322015-01-23 16:35:37 -05001518 .. versionadded:: 3.5
1519
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001520.. method:: SSLContext.set_npn_protocols(protocols)
1521
R David Murrayc7f75792013-06-26 15:11:12 -04001522 Specify which protocols the socket should advertise during the SSL/TLS
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001523 handshake. It should be a list of strings, like ``['http/1.1', 'spdy/2']``,
1524 ordered by preference. The selection of a protocol will happen during the
Sanyam Khurana338cd832018-01-20 05:55:37 +05301525 handshake, and will play out according to the `Application Layer Protocol Negotiation
1526 <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_. After a
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001527 successful handshake, the :meth:`SSLSocket.selected_npn_protocol` method will
1528 return the agreed-upon protocol.
1529
1530 This method will raise :exc:`NotImplementedError` if :data:`HAS_NPN` is
1531 False.
1532
1533 .. versionadded:: 3.3
1534
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001535.. method:: SSLContext.set_servername_callback(server_name_callback)
1536
1537 Register a callback function that will be called after the TLS Client Hello
1538 handshake message has been received by the SSL/TLS server when the TLS client
1539 specifies a server name indication. The server name indication mechanism
1540 is specified in :rfc:`6066` section 3 - Server Name Indication.
1541
1542 Only one callback can be set per ``SSLContext``. If *server_name_callback*
1543 is ``None`` then the callback is disabled. Calling this function a
1544 subsequent time will disable the previously registered callback.
1545
1546 The callback function, *server_name_callback*, will be called with three
1547 arguments; the first being the :class:`ssl.SSLSocket`, the second is a string
1548 that represents the server name that the client is intending to communicate
Antoine Pitrou50b24d02013-04-11 20:48:42 +02001549 (or :const:`None` if the TLS Client Hello does not contain a server name)
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001550 and the third argument is the original :class:`SSLContext`. The server name
1551 argument is the IDNA decoded server name.
1552
1553 A typical use of this callback is to change the :class:`ssl.SSLSocket`'s
1554 :attr:`SSLSocket.context` attribute to a new object of type
1555 :class:`SSLContext` representing a certificate chain that matches the server
1556 name.
1557
1558 Due to the early negotiation phase of the TLS connection, only limited
1559 methods and attributes are usable like
Benjamin Petersoncca27322015-01-23 16:35:37 -05001560 :meth:`SSLSocket.selected_alpn_protocol` and :attr:`SSLSocket.context`.
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001561 :meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.getpeercert`,
1562 :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compress` methods require that
1563 the TLS connection has progressed beyond the TLS Client Hello and therefore
1564 will not contain return meaningful values nor can they be called safely.
1565
1566 The *server_name_callback* function must return ``None`` to allow the
Terry Jan Reedy8e7586b2013-03-11 18:38:13 -04001567 TLS negotiation to continue. If a TLS failure is required, a constant
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001568 :const:`ALERT_DESCRIPTION_* <ALERT_DESCRIPTION_INTERNAL_ERROR>` can be
1569 returned. Other return values will result in a TLS fatal error with
1570 :const:`ALERT_DESCRIPTION_INTERNAL_ERROR`.
1571
Zachary Ware88a19772014-07-25 13:30:50 -05001572 If there is an IDNA decoding error on the server name, the TLS connection
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001573 will terminate with an :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` fatal TLS
1574 alert message to the client.
1575
1576 If an exception is raised from the *server_name_callback* function the TLS
1577 connection will terminate with a fatal TLS alert message
1578 :const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`.
1579
1580 This method will raise :exc:`NotImplementedError` if the OpenSSL library
1581 had OPENSSL_NO_TLSEXT defined when it was built.
1582
1583 .. versionadded:: 3.4
1584
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001585.. method:: SSLContext.load_dh_params(dhfile)
1586
1587 Load the key generation parameters for Diffie-Helman (DH) key exchange.
1588 Using DH key exchange improves forward secrecy at the expense of
1589 computational resources (both on the server and on the client).
1590 The *dhfile* parameter should be the path to a file containing DH
1591 parameters in PEM format.
1592
1593 This setting doesn't apply to client sockets. You can also use the
1594 :data:`OP_SINGLE_DH_USE` option to further improve security.
1595
1596 .. versionadded:: 3.3
1597
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001598.. method:: SSLContext.set_ecdh_curve(curve_name)
1599
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001600 Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH) key
1601 exchange. ECDH is significantly faster than regular DH while arguably
1602 as secure. The *curve_name* parameter should be a string describing
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001603 a well-known elliptic curve, for example ``prime256v1`` for a widely
1604 supported curve.
1605
1606 This setting doesn't apply to client sockets. You can also use the
1607 :data:`OP_SINGLE_ECDH_USE` option to further improve security.
1608
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +03001609 This method is not available if :data:`HAS_ECDH` is ``False``.
Antoine Pitrou501da612011-12-21 09:27:41 +01001610
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001611 .. versionadded:: 3.3
1612
1613 .. seealso::
Sanyam Khurana1b4587a2017-12-06 22:09:33 +05301614 `SSL/TLS & Perfect Forward Secrecy <https://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy>`_
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001615 Vincent Bernat.
1616
Antoine Pitroud5323212010-10-22 18:19:07 +00001617.. method:: SSLContext.wrap_socket(sock, server_side=False, \
1618 do_handshake_on_connect=True, suppress_ragged_eofs=True, \
Christian Heimes99a65702016-09-10 23:44:53 +02001619 server_hostname=None, session=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001620
Christian Heimes4df60f12017-09-15 20:26:05 +02001621 Wrap an existing Python socket *sock* and return an instance of
1622 :attr:`SSLContext.sslsocket_class` (default :class:`SSLSocket`).
1623 *sock* must be a :data:`~socket.SOCK_STREAM` socket; other socket
Antoine Pitrou3e86ba42013-12-28 17:26:33 +01001624 types are unsupported.
1625
1626 The returned SSL socket is tied to the context, its settings and
Antoine Pitrou152efa22010-05-16 18:19:27 +00001627 certificates. The parameters *server_side*, *do_handshake_on_connect*
1628 and *suppress_ragged_eofs* have the same meaning as in the top-level
1629 :func:`wrap_socket` function.
1630
Antoine Pitroud5323212010-10-22 18:19:07 +00001631 On client connections, the optional parameter *server_hostname* specifies
1632 the hostname of the service which we are connecting to. This allows a
1633 single server to host multiple SSL-based services with distinct certificates,
Benjamin Peterson7243b572014-11-23 17:04:34 -06001634 quite similarly to HTTP virtual hosts. Specifying *server_hostname* will
1635 raise a :exc:`ValueError` if *server_side* is true.
1636
Christian Heimes99a65702016-09-10 23:44:53 +02001637 *session*, see :attr:`~SSLSocket.session`.
1638
Benjamin Peterson7243b572014-11-23 17:04:34 -06001639 .. versionchanged:: 3.5
1640 Always allow a server_hostname to be passed, even if OpenSSL does not
1641 have SNI.
Antoine Pitroud5323212010-10-22 18:19:07 +00001642
Christian Heimes99a65702016-09-10 23:44:53 +02001643 .. versionchanged:: 3.6
1644 *session* argument was added.
1645
Christian Heimes4df60f12017-09-15 20:26:05 +02001646 .. versionchanged:: 3.7
1647 The method returns on instance of :attr:`SSLContext.sslsocket_class`
1648 instead of hard-coded :class:`SSLSocket`.
1649
1650.. attribute:: SSLContext.sslsocket_class
1651
1652 The return type of :meth:`SSLContext.wrap_sockets`, defaults to
1653 :class:`SSLSocket`. The attribute can be overridden on instance of class
1654 in order to return a custom subclass of :class:`SSLSocket`.
1655
1656 .. versionadded:: 3.7
1657
Victor Stinner805b2622014-10-10 12:49:08 +02001658.. method:: SSLContext.wrap_bio(incoming, outgoing, server_side=False, \
Christian Heimes99a65702016-09-10 23:44:53 +02001659 server_hostname=None, session=None)
Victor Stinner805b2622014-10-10 12:49:08 +02001660
Christian Heimes4df60f12017-09-15 20:26:05 +02001661 Wrap the BIO objects *incoming* and *outgoing* and return an instance of
1662 attr:`SSLContext.sslobject_class` (default :class:`SSLObject`). The SSL
1663 routines will read input data from the incoming BIO and write data to the
1664 outgoing BIO.
Victor Stinner805b2622014-10-10 12:49:08 +02001665
Christian Heimes99a65702016-09-10 23:44:53 +02001666 The *server_side*, *server_hostname* and *session* parameters have the
1667 same meaning as in :meth:`SSLContext.wrap_socket`.
1668
1669 .. versionchanged:: 3.6
1670 *session* argument was added.
Victor Stinner805b2622014-10-10 12:49:08 +02001671
Christian Heimes4df60f12017-09-15 20:26:05 +02001672 .. versionchanged:: 3.7
1673 The method returns on instance of :attr:`SSLContext.sslobject_class`
1674 instead of hard-coded :class:`SSLObject`.
1675
1676.. attribute:: SSLContext.sslobject_class
1677
1678 The return type of :meth:`SSLContext.wrap_bio`, defaults to
1679 :class:`SSLObject`. The attribute can be overridden on instance of class
1680 in order to return a custom subclass of :class:`SSLObject`.
1681
1682 .. versionadded:: 3.7
1683
Antoine Pitroub0182c82010-10-12 20:09:02 +00001684.. method:: SSLContext.session_stats()
1685
1686 Get statistics about the SSL sessions created or managed by this context.
Sanyam Khurana338cd832018-01-20 05:55:37 +05301687 A dictionary is returned which maps the names of each `piece of information <https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_sess_number.html>`_ to their
Antoine Pitroub0182c82010-10-12 20:09:02 +00001688 numeric values. For example, here is the total number of hits and misses
1689 in the session cache since the context was created::
1690
1691 >>> stats = context.session_stats()
1692 >>> stats['hits'], stats['misses']
1693 (0, 0)
1694
Christian Heimes1aa9a752013-12-02 02:41:19 +01001695.. attribute:: SSLContext.check_hostname
1696
Berker Peksag315e1042015-05-19 01:36:55 +03001697 Whether to match the peer cert's hostname with :func:`match_hostname` in
Christian Heimes1aa9a752013-12-02 02:41:19 +01001698 :meth:`SSLSocket.do_handshake`. The context's
1699 :attr:`~SSLContext.verify_mode` must be set to :data:`CERT_OPTIONAL` or
1700 :data:`CERT_REQUIRED`, and you must pass *server_hostname* to
Christian Heimese82c0342017-09-15 20:29:57 +02001701 :meth:`~SSLContext.wrap_socket` in order to match the hostname. Enabling
1702 hostname checking automatically sets :attr:`~SSLContext.verify_mode` from
1703 :data:`CERT_NONE` to :data:`CERT_REQUIRED`. It cannot be set back to
1704 :data:`CERT_NONE` as long as hostname checking is enabled.
Christian Heimes1aa9a752013-12-02 02:41:19 +01001705
1706 Example::
1707
1708 import socket, ssl
1709
1710 context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
1711 context.verify_mode = ssl.CERT_REQUIRED
1712 context.check_hostname = True
1713 context.load_default_certs()
1714
1715 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Berker Peksag38bf87c2014-07-17 05:00:36 +03001716 ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
1717 ssl_sock.connect(('www.verisign.com', 443))
Christian Heimes1aa9a752013-12-02 02:41:19 +01001718
1719 .. versionadded:: 3.4
1720
Christian Heimese82c0342017-09-15 20:29:57 +02001721 .. versionchanged:: 3.7
1722
1723 :attr:`~SSLContext.verify_mode` is now automatically changed
1724 to :data:`CERT_REQUIRED` when hostname checking is enabled and
1725 :attr:`~SSLContext.verify_mode` is :data:`CERT_NONE`. Previously
1726 the same operation would have failed with a :exc:`ValueError`.
1727
Christian Heimes1aa9a752013-12-02 02:41:19 +01001728 .. note::
1729
1730 This features requires OpenSSL 0.9.8f or newer.
1731
Antoine Pitroub5218772010-05-21 09:56:06 +00001732.. attribute:: SSLContext.options
1733
1734 An integer representing the set of SSL options enabled on this context.
1735 The default value is :data:`OP_ALL`, but you can specify other options
1736 such as :data:`OP_NO_SSLv2` by ORing them together.
1737
1738 .. note::
1739 With versions of OpenSSL older than 0.9.8m, it is only possible
1740 to set options, not to clear them. Attempting to clear an option
1741 (by resetting the corresponding bits) will raise a ``ValueError``.
1742
Christian Heimes3aeacad2016-09-10 00:19:35 +02001743 .. versionchanged:: 3.6
1744 :attr:`SSLContext.options` returns :class:`Options` flags:
1745
Marco Buttu7b2491a2017-04-13 16:17:59 +02001746 >>> ssl.create_default_context().options # doctest: +SKIP
Christian Heimes3aeacad2016-09-10 00:19:35 +02001747 <Options.OP_ALL|OP_NO_SSLv3|OP_NO_SSLv2|OP_NO_COMPRESSION: 2197947391>
1748
Antoine Pitrou152efa22010-05-16 18:19:27 +00001749.. attribute:: SSLContext.protocol
1750
1751 The protocol version chosen when constructing the context. This attribute
1752 is read-only.
1753
Christian Heimes61d478c2018-01-27 15:51:38 +01001754.. attribute:: SSLContext.hostname_checks_common_name
1755
1756 Whether :attr:`~SSLContext.check_hostname` falls back to verify the cert's
1757 subject common name in the absence of a subject alternative name
1758 extension (default: true).
1759
1760 .. versionadded:: 3.7
1761
1762 .. note::
1763 Only writeable with OpenSSL 1.1.0 or higher.
1764
Christian Heimes22587792013-11-21 23:56:13 +01001765.. attribute:: SSLContext.verify_flags
1766
1767 The flags for certificate verification operations. You can set flags like
1768 :data:`VERIFY_CRL_CHECK_LEAF` by ORing them together. By default OpenSSL
1769 does neither require nor verify certificate revocation lists (CRLs).
Christian Heimes2427b502013-11-23 11:24:32 +01001770 Available only with openssl version 0.9.8+.
Christian Heimes22587792013-11-21 23:56:13 +01001771
1772 .. versionadded:: 3.4
1773
Christian Heimes3aeacad2016-09-10 00:19:35 +02001774 .. versionchanged:: 3.6
1775 :attr:`SSLContext.verify_flags` returns :class:`VerifyFlags` flags:
1776
Marco Buttu7b2491a2017-04-13 16:17:59 +02001777 >>> ssl.create_default_context().verify_flags # doctest: +SKIP
Christian Heimes3aeacad2016-09-10 00:19:35 +02001778 <VerifyFlags.VERIFY_X509_TRUSTED_FIRST: 32768>
1779
Antoine Pitrou152efa22010-05-16 18:19:27 +00001780.. attribute:: SSLContext.verify_mode
1781
1782 Whether to try to verify other peers' certificates and how to behave
1783 if verification fails. This attribute must be one of
1784 :data:`CERT_NONE`, :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`.
1785
Christian Heimes3aeacad2016-09-10 00:19:35 +02001786 .. versionchanged:: 3.6
1787 :attr:`SSLContext.verify_mode` returns :class:`VerifyMode` enum:
1788
1789 >>> ssl.create_default_context().verify_mode
1790 <VerifyMode.CERT_REQUIRED: 2>
Antoine Pitrou152efa22010-05-16 18:19:27 +00001791
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001792.. index:: single: certificates
1793
1794.. index:: single: X509 certificate
1795
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001796.. _ssl-certificates:
1797
Thomas Woutersed03b412007-08-28 21:37:11 +00001798Certificates
1799------------
1800
Georg Brandl7f01a132009-09-16 15:58:14 +00001801Certificates in general are part of a public-key / private-key system. In this
1802system, each *principal*, (which may be a machine, or a person, or an
1803organization) is assigned a unique two-part encryption key. One part of the key
1804is public, and is called the *public key*; the other part is kept secret, and is
1805called the *private key*. The two parts are related, in that if you encrypt a
1806message with one of the parts, you can decrypt it with the other part, and
1807**only** with the other part.
Thomas Woutersed03b412007-08-28 21:37:11 +00001808
Georg Brandl7f01a132009-09-16 15:58:14 +00001809A certificate contains information about two principals. It contains the name
1810of a *subject*, and the subject's public key. It also contains a statement by a
1811second principal, the *issuer*, that the subject is who he claims to be, and
1812that this is indeed the subject's public key. The issuer's statement is signed
1813with the issuer's private key, which only the issuer knows. However, anyone can
1814verify the issuer's statement by finding the issuer's public key, decrypting the
1815statement with it, and comparing it to the other information in the certificate.
1816The certificate also contains information about the time period over which it is
1817valid. This is expressed as two fields, called "notBefore" and "notAfter".
Thomas Woutersed03b412007-08-28 21:37:11 +00001818
Georg Brandl7f01a132009-09-16 15:58:14 +00001819In the Python use of certificates, a client or server can use a certificate to
1820prove who they are. The other side of a network connection can also be required
1821to produce a certificate, and that certificate can be validated to the
1822satisfaction of the client or server that requires such validation. The
1823connection attempt can be set to raise an exception if the validation fails.
1824Validation is done automatically, by the underlying OpenSSL framework; the
1825application need not concern itself with its mechanics. But the application
1826does usually need to provide sets of certificates to allow this process to take
1827place.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001828
Georg Brandl7f01a132009-09-16 15:58:14 +00001829Python uses files to contain certificates. They should be formatted as "PEM"
1830(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
1831and a footer line::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001832
1833 -----BEGIN CERTIFICATE-----
1834 ... (certificate in base64 PEM encoding) ...
1835 -----END CERTIFICATE-----
1836
Antoine Pitrou152efa22010-05-16 18:19:27 +00001837Certificate chains
1838^^^^^^^^^^^^^^^^^^
1839
Georg Brandl7f01a132009-09-16 15:58:14 +00001840The Python files which contain certificates can contain a sequence of
1841certificates, sometimes called a *certificate chain*. This chain should start
1842with the specific certificate for the principal who "is" the client or server,
1843and then the certificate for the issuer of that certificate, and then the
1844certificate for the issuer of *that* certificate, and so on up the chain till
1845you get to a certificate which is *self-signed*, that is, a certificate which
1846has the same subject and issuer, sometimes called a *root certificate*. The
1847certificates should just be concatenated together in the certificate file. For
1848example, suppose we had a three certificate chain, from our server certificate
1849to the certificate of the certification authority that signed our server
1850certificate, to the root certificate of the agency which issued the
1851certification authority's certificate::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001852
1853 -----BEGIN CERTIFICATE-----
1854 ... (certificate for your server)...
1855 -----END CERTIFICATE-----
1856 -----BEGIN CERTIFICATE-----
1857 ... (the certificate for the CA)...
1858 -----END CERTIFICATE-----
1859 -----BEGIN CERTIFICATE-----
1860 ... (the root certificate for the CA's issuer)...
1861 -----END CERTIFICATE-----
1862
Antoine Pitrou152efa22010-05-16 18:19:27 +00001863CA certificates
1864^^^^^^^^^^^^^^^
1865
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001866If you are going to require validation of the other side of the connection's
1867certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandl7f01a132009-09-16 15:58:14 +00001868chains for each issuer you are willing to trust. Again, this file just contains
1869these chains concatenated together. For validation, Python will use the first
Donald Stufft41374652014-03-24 19:26:03 -04001870chain it finds in the file which matches. The platform's certificates file can
1871be used by calling :meth:`SSLContext.load_default_certs`, this is done
1872automatically with :func:`.create_default_context`.
Thomas Woutersed03b412007-08-28 21:37:11 +00001873
Antoine Pitrou152efa22010-05-16 18:19:27 +00001874Combined key and certificate
1875^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1876
1877Often the private key is stored in the same file as the certificate; in this
1878case, only the ``certfile`` parameter to :meth:`SSLContext.load_cert_chain`
1879and :func:`wrap_socket` needs to be passed. If the private key is stored
1880with the certificate, it should come before the first certificate in
1881the certificate chain::
1882
1883 -----BEGIN RSA PRIVATE KEY-----
1884 ... (private key in base64 encoding) ...
1885 -----END RSA PRIVATE KEY-----
1886 -----BEGIN CERTIFICATE-----
1887 ... (certificate in base64 PEM encoding) ...
1888 -----END CERTIFICATE-----
1889
1890Self-signed certificates
1891^^^^^^^^^^^^^^^^^^^^^^^^
1892
Georg Brandl7f01a132009-09-16 15:58:14 +00001893If you are going to create a server that provides SSL-encrypted connection
1894services, you will need to acquire a certificate for that service. There are
1895many ways of acquiring appropriate certificates, such as buying one from a
1896certification authority. Another common practice is to generate a self-signed
1897certificate. The simplest way to do this is with the OpenSSL package, using
1898something like the following::
Thomas Woutersed03b412007-08-28 21:37:11 +00001899
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001900 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
1901 Generating a 1024 bit RSA private key
1902 .......++++++
1903 .............................++++++
1904 writing new private key to 'cert.pem'
1905 -----
1906 You are about to be asked to enter information that will be incorporated
1907 into your certificate request.
1908 What you are about to enter is what is called a Distinguished Name or a DN.
1909 There are quite a few fields but you can leave some blank
1910 For some fields there will be a default value,
1911 If you enter '.', the field will be left blank.
1912 -----
1913 Country Name (2 letter code) [AU]:US
1914 State or Province Name (full name) [Some-State]:MyState
1915 Locality Name (eg, city) []:Some City
1916 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
1917 Organizational Unit Name (eg, section) []:My Group
1918 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
1919 Email Address []:ops@myserver.mygroup.myorganization.com
1920 %
Thomas Woutersed03b412007-08-28 21:37:11 +00001921
Georg Brandl7f01a132009-09-16 15:58:14 +00001922The disadvantage of a self-signed certificate is that it is its own root
1923certificate, and no one else will have it in their cache of known (and trusted)
1924root certificates.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001925
1926
Thomas Woutersed03b412007-08-28 21:37:11 +00001927Examples
1928--------
1929
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001930Testing for SSL support
1931^^^^^^^^^^^^^^^^^^^^^^^
1932
Georg Brandl7f01a132009-09-16 15:58:14 +00001933To test for the presence of SSL support in a Python installation, user code
1934should use the following idiom::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001935
1936 try:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001937 import ssl
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001938 except ImportError:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001939 pass
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001940 else:
Serhiy Storchakadba90392016-05-10 12:01:23 +03001941 ... # do something that requires SSL support
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001942
1943Client-side operation
1944^^^^^^^^^^^^^^^^^^^^^
1945
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001946This example creates a SSL context with the recommended security settings
1947for client sockets, including automatic certificate verification::
Thomas Woutersed03b412007-08-28 21:37:11 +00001948
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001949 >>> context = ssl.create_default_context()
Thomas Woutersed03b412007-08-28 21:37:11 +00001950
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001951If you prefer to tune security settings yourself, you might create
1952a context from scratch (but beware that you might not get the settings
1953right)::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001954
Christian Heimes598894f2016-09-05 23:19:05 +02001955 >>> context = ssl.SSLContext(ssl.PROTOCOL_TLS)
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001956 >>> context.verify_mode = ssl.CERT_REQUIRED
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001957 >>> context.check_hostname = True
Antoine Pitrou152efa22010-05-16 18:19:27 +00001958 >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
1959
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001960(this snippet assumes your operating system places a bundle of all CA
1961certificates in ``/etc/ssl/certs/ca-bundle.crt``; if not, you'll get an
1962error and have to adjust the location)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001963
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001964When you use the context to connect to a server, :const:`CERT_REQUIRED`
Antoine Pitrou152efa22010-05-16 18:19:27 +00001965validates the server certificate: it ensures that the server certificate
1966was signed with one of the CA certificates, and checks the signature for
1967correctness::
1968
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001969 >>> conn = context.wrap_socket(socket.socket(socket.AF_INET),
1970 ... server_hostname="www.python.org")
1971 >>> conn.connect(("www.python.org", 443))
Antoine Pitrou152efa22010-05-16 18:19:27 +00001972
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001973You may then fetch the certificate::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001974
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001975 >>> cert = conn.getpeercert()
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001976
1977Visual inspection shows that the certificate does identify the desired service
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001978(that is, the HTTPS host ``www.python.org``)::
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001979
1980 >>> pprint.pprint(cert)
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001981 {'OCSP': ('http://ocsp.digicert.com',),
1982 'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',),
1983 'crlDistributionPoints': ('http://crl3.digicert.com/sha2-ev-server-g1.crl',
1984 'http://crl4.digicert.com/sha2-ev-server-g1.crl'),
1985 'issuer': ((('countryName', 'US'),),
1986 (('organizationName', 'DigiCert Inc'),),
1987 (('organizationalUnitName', 'www.digicert.com'),),
1988 (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),)),
1989 'notAfter': 'Sep 9 12:00:00 2016 GMT',
1990 'notBefore': 'Sep 5 00:00:00 2014 GMT',
1991 'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26',
1992 'subject': ((('businessCategory', 'Private Organization'),),
1993 (('1.3.6.1.4.1.311.60.2.1.3', 'US'),),
1994 (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),),
1995 (('serialNumber', '3359300'),),
1996 (('streetAddress', '16 Allen Rd'),),
1997 (('postalCode', '03894-4801'),),
1998 (('countryName', 'US'),),
1999 (('stateOrProvinceName', 'NH'),),
2000 (('localityName', 'Wolfeboro,'),),
2001 (('organizationName', 'Python Software Foundation'),),
2002 (('commonName', 'www.python.org'),)),
2003 'subjectAltName': (('DNS', 'www.python.org'),
2004 ('DNS', 'python.org'),
2005 ('DNS', 'pypi.python.org'),
2006 ('DNS', 'docs.python.org'),
2007 ('DNS', 'testpypi.python.org'),
2008 ('DNS', 'bugs.python.org'),
2009 ('DNS', 'wiki.python.org'),
2010 ('DNS', 'hg.python.org'),
2011 ('DNS', 'mail.python.org'),
2012 ('DNS', 'packaging.python.org'),
2013 ('DNS', 'pythonhosted.org'),
2014 ('DNS', 'www.pythonhosted.org'),
2015 ('DNS', 'test.pythonhosted.org'),
2016 ('DNS', 'us.pycon.org'),
2017 ('DNS', 'id.python.org')),
Antoine Pitrou441ae042012-01-06 20:06:15 +01002018 'version': 3}
Antoine Pitrou152efa22010-05-16 18:19:27 +00002019
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002020Now the SSL channel is established and the certificate verified, you can
2021proceed to talk with the server::
Antoine Pitrou152efa22010-05-16 18:19:27 +00002022
Antoine Pitroudab64262010-09-19 13:31:06 +00002023 >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n")
2024 >>> pprint.pprint(conn.recv(1024).split(b"\r\n"))
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002025 [b'HTTP/1.1 200 OK',
2026 b'Date: Sat, 18 Oct 2014 18:27:20 GMT',
2027 b'Server: nginx',
2028 b'Content-Type: text/html; charset=utf-8',
2029 b'X-Frame-Options: SAMEORIGIN',
2030 b'Content-Length: 45679',
2031 b'Accept-Ranges: bytes',
2032 b'Via: 1.1 varnish',
2033 b'Age: 2188',
2034 b'X-Served-By: cache-lcy1134-LCY',
2035 b'X-Cache: HIT',
2036 b'X-Cache-Hits: 11',
2037 b'Vary: Cookie',
2038 b'Strict-Transport-Security: max-age=63072000; includeSubDomains',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002039 b'Connection: close',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002040 b'',
2041 b'']
2042
Antoine Pitrou152efa22010-05-16 18:19:27 +00002043See the discussion of :ref:`ssl-security` below.
2044
2045
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002046Server-side operation
2047^^^^^^^^^^^^^^^^^^^^^
2048
Antoine Pitrou152efa22010-05-16 18:19:27 +00002049For server operation, typically you'll need to have a server certificate, and
2050private key, each in a file. You'll first create a context holding the key
2051and the certificate, so that clients can check your authenticity. Then
2052you'll open a socket, bind it to a port, call :meth:`listen` on it, and start
2053waiting for clients to connect::
Thomas Woutersed03b412007-08-28 21:37:11 +00002054
2055 import socket, ssl
2056
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002057 context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
Antoine Pitrou152efa22010-05-16 18:19:27 +00002058 context.load_cert_chain(certfile="mycertfile", keyfile="mykeyfile")
2059
Thomas Woutersed03b412007-08-28 21:37:11 +00002060 bindsocket = socket.socket()
2061 bindsocket.bind(('myaddr.mydomain.com', 10023))
2062 bindsocket.listen(5)
2063
Antoine Pitrou152efa22010-05-16 18:19:27 +00002064When a client connects, you'll call :meth:`accept` on the socket to get the
2065new socket from the other end, and use the context's :meth:`SSLContext.wrap_socket`
2066method to create a server-side SSL socket for the connection::
Thomas Woutersed03b412007-08-28 21:37:11 +00002067
2068 while True:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002069 newsocket, fromaddr = bindsocket.accept()
2070 connstream = context.wrap_socket(newsocket, server_side=True)
2071 try:
2072 deal_with_client(connstream)
2073 finally:
Antoine Pitroub205d582011-01-02 22:09:27 +00002074 connstream.shutdown(socket.SHUT_RDWR)
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002075 connstream.close()
Thomas Woutersed03b412007-08-28 21:37:11 +00002076
Antoine Pitrou152efa22010-05-16 18:19:27 +00002077Then you'll read data from the ``connstream`` and do something with it till you
Georg Brandl7f01a132009-09-16 15:58:14 +00002078are finished with the client (or the client is finished with you)::
Thomas Woutersed03b412007-08-28 21:37:11 +00002079
2080 def deal_with_client(connstream):
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002081 data = connstream.recv(1024)
2082 # empty data means the client is finished with us
2083 while data:
2084 if not do_something(connstream, data):
2085 # we'll assume do_something returns False
2086 # when we're finished with client
2087 break
2088 data = connstream.recv(1024)
2089 # finished with client
Thomas Woutersed03b412007-08-28 21:37:11 +00002090
Antoine Pitrou152efa22010-05-16 18:19:27 +00002091And go back to listening for new client connections (of course, a real server
2092would probably handle each client connection in a separate thread, or put
Victor Stinner29611452014-10-10 12:52:43 +02002093the sockets in :ref:`non-blocking mode <ssl-nonblocking>` and use an event loop).
Antoine Pitrou152efa22010-05-16 18:19:27 +00002094
2095
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002096.. _ssl-nonblocking:
2097
2098Notes on non-blocking sockets
2099-----------------------------
2100
Antoine Pitroub4bebda2014-04-29 10:03:28 +02002101SSL sockets behave slightly different than regular sockets in
2102non-blocking mode. When working with non-blocking sockets, there are
2103thus several things you need to be aware of:
2104
2105- Most :class:`SSLSocket` methods will raise either
2106 :exc:`SSLWantWriteError` or :exc:`SSLWantReadError` instead of
2107 :exc:`BlockingIOError` if an I/O operation would
2108 block. :exc:`SSLWantReadError` will be raised if a read operation on
2109 the underlying socket is necessary, and :exc:`SSLWantWriteError` for
2110 a write operation on the underlying socket. Note that attempts to
2111 *write* to an SSL socket may require *reading* from the underlying
2112 socket first, and attempts to *read* from the SSL socket may require
2113 a prior *write* to the underlying socket.
2114
2115 .. versionchanged:: 3.5
2116
2117 In earlier Python versions, the :meth:`!SSLSocket.send` method
2118 returned zero instead of raising :exc:`SSLWantWriteError` or
2119 :exc:`SSLWantReadError`.
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002120
2121- Calling :func:`~select.select` tells you that the OS-level socket can be
2122 read from (or written to), but it does not imply that there is sufficient
2123 data at the upper SSL layer. For example, only part of an SSL frame might
2124 have arrived. Therefore, you must be ready to handle :meth:`SSLSocket.recv`
2125 and :meth:`SSLSocket.send` failures, and retry after another call to
2126 :func:`~select.select`.
2127
Antoine Pitrou75e03382014-05-18 00:55:13 +02002128- Conversely, since the SSL layer has its own framing, a SSL socket may
2129 still have data available for reading without :func:`~select.select`
2130 being aware of it. Therefore, you should first call
2131 :meth:`SSLSocket.recv` to drain any potentially available data, and then
2132 only block on a :func:`~select.select` call if still necessary.
2133
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002134 (of course, similar provisions apply when using other primitives such as
Antoine Pitrou75e03382014-05-18 00:55:13 +02002135 :func:`~select.poll`, or those in the :mod:`selectors` module)
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002136
2137- The SSL handshake itself will be non-blocking: the
2138 :meth:`SSLSocket.do_handshake` method has to be retried until it returns
2139 successfully. Here is a synopsis using :func:`~select.select` to wait for
2140 the socket's readiness::
2141
2142 while True:
2143 try:
2144 sock.do_handshake()
2145 break
Antoine Pitrou873bf262011-10-27 23:59:03 +02002146 except ssl.SSLWantReadError:
2147 select.select([sock], [], [])
2148 except ssl.SSLWantWriteError:
2149 select.select([], [sock], [])
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002150
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002151.. seealso::
2152
Victor Stinner29611452014-10-10 12:52:43 +02002153 The :mod:`asyncio` module supports :ref:`non-blocking SSL sockets
2154 <ssl-nonblocking>` and provides a
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002155 higher level API. It polls for events using the :mod:`selectors` module and
2156 handles :exc:`SSLWantWriteError`, :exc:`SSLWantReadError` and
2157 :exc:`BlockingIOError` exceptions. It runs the SSL handshake asynchronously
2158 as well.
2159
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002160
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002161Memory BIO Support
2162------------------
2163
2164.. versionadded:: 3.5
2165
2166Ever since the SSL module was introduced in Python 2.6, the :class:`SSLSocket`
2167class has provided two related but distinct areas of functionality:
2168
2169- SSL protocol handling
2170- Network IO
2171
2172The network IO API is identical to that provided by :class:`socket.socket`,
2173from which :class:`SSLSocket` also inherits. This allows an SSL socket to be
2174used as a drop-in replacement for a regular socket, making it very easy to add
2175SSL support to an existing application.
2176
2177Combining SSL protocol handling and network IO usually works well, but there
2178are some cases where it doesn't. An example is async IO frameworks that want to
2179use a different IO multiplexing model than the "select/poll on a file
2180descriptor" (readiness based) model that is assumed by :class:`socket.socket`
2181and by the internal OpenSSL socket IO routines. This is mostly relevant for
2182platforms like Windows where this model is not efficient. For this purpose, a
2183reduced scope variant of :class:`SSLSocket` called :class:`SSLObject` is
2184provided.
2185
2186.. class:: SSLObject
2187
2188 A reduced-scope variant of :class:`SSLSocket` representing an SSL protocol
Victor Stinner2debf152014-10-10 13:04:08 +02002189 instance that does not contain any network IO methods. This class is
2190 typically used by framework authors that want to implement asynchronous IO
2191 for SSL through memory buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002192
Victor Stinner2debf152014-10-10 13:04:08 +02002193 This class implements an interface on top of a low-level SSL object as
2194 implemented by OpenSSL. This object captures the state of an SSL connection
2195 but does not provide any network IO itself. IO needs to be performed through
2196 separate "BIO" objects which are OpenSSL's IO abstraction layer.
2197
2198 An :class:`SSLObject` instance can be created using the
2199 :meth:`~SSLContext.wrap_bio` method. This method will create the
2200 :class:`SSLObject` instance and bind it to a pair of BIOs. The *incoming*
2201 BIO is used to pass data from Python to the SSL protocol instance, while the
2202 *outgoing* BIO is used to pass data the other way around.
2203
2204 The following methods are available:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002205
Victor Stinner805b2622014-10-10 12:49:08 +02002206 - :attr:`~SSLSocket.context`
2207 - :attr:`~SSLSocket.server_side`
2208 - :attr:`~SSLSocket.server_hostname`
Christian Heimes99a65702016-09-10 23:44:53 +02002209 - :attr:`~SSLSocket.session`
2210 - :attr:`~SSLSocket.session_reused`
Victor Stinner805b2622014-10-10 12:49:08 +02002211 - :meth:`~SSLSocket.read`
2212 - :meth:`~SSLSocket.write`
2213 - :meth:`~SSLSocket.getpeercert`
2214 - :meth:`~SSLSocket.selected_npn_protocol`
2215 - :meth:`~SSLSocket.cipher`
Benjamin Peterson4cb17812015-01-07 11:14:26 -06002216 - :meth:`~SSLSocket.shared_ciphers`
Victor Stinner805b2622014-10-10 12:49:08 +02002217 - :meth:`~SSLSocket.compression`
2218 - :meth:`~SSLSocket.pending`
2219 - :meth:`~SSLSocket.do_handshake`
2220 - :meth:`~SSLSocket.unwrap`
2221 - :meth:`~SSLSocket.get_channel_binding`
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002222
Victor Stinner2debf152014-10-10 13:04:08 +02002223 When compared to :class:`SSLSocket`, this object lacks the following
2224 features:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002225
Benjamin Petersonfdfca5f2017-06-11 00:24:38 -07002226 - Any form of network IO; ``recv()`` and ``send()`` read and write only to
2227 the underlying :class:`MemoryBIO` buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002228
Victor Stinner2debf152014-10-10 13:04:08 +02002229 - There is no *do_handshake_on_connect* machinery. You must always manually
2230 call :meth:`~SSLSocket.do_handshake` to start the handshake.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002231
Victor Stinner2debf152014-10-10 13:04:08 +02002232 - There is no handling of *suppress_ragged_eofs*. All end-of-file conditions
2233 that are in violation of the protocol are reported via the
2234 :exc:`SSLEOFError` exception.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002235
Victor Stinner2debf152014-10-10 13:04:08 +02002236 - The method :meth:`~SSLSocket.unwrap` call does not return anything,
2237 unlike for an SSL socket where it returns the underlying socket.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002238
Victor Stinner2debf152014-10-10 13:04:08 +02002239 - The *server_name_callback* callback passed to
2240 :meth:`SSLContext.set_servername_callback` will get an :class:`SSLObject`
2241 instance instead of a :class:`SSLSocket` instance as its first parameter.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002242
Victor Stinner2debf152014-10-10 13:04:08 +02002243 Some notes related to the use of :class:`SSLObject`:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002244
Victor Stinner2debf152014-10-10 13:04:08 +02002245 - All IO on an :class:`SSLObject` is :ref:`non-blocking <ssl-nonblocking>`.
2246 This means that for example :meth:`~SSLSocket.read` will raise an
2247 :exc:`SSLWantReadError` if it needs more data than the incoming BIO has
2248 available.
2249
2250 - There is no module-level ``wrap_bio()`` call like there is for
2251 :meth:`~SSLContext.wrap_socket`. An :class:`SSLObject` is always created
2252 via an :class:`SSLContext`.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002253
Victor Stinner805b2622014-10-10 12:49:08 +02002254An SSLObject communicates with the outside world using memory buffers. The
2255class :class:`MemoryBIO` provides a memory buffer that can be used for this
2256purpose. It wraps an OpenSSL memory BIO (Basic IO) object:
2257
2258.. class:: MemoryBIO
2259
2260 A memory buffer that can be used to pass data between Python and an SSL
2261 protocol instance.
2262
2263 .. attribute:: MemoryBIO.pending
2264
2265 Return the number of bytes currently in the memory buffer.
2266
2267 .. attribute:: MemoryBIO.eof
2268
2269 A boolean indicating whether the memory BIO is current at the end-of-file
2270 position.
2271
2272 .. method:: MemoryBIO.read(n=-1)
2273
2274 Read up to *n* bytes from the memory buffer. If *n* is not specified or
2275 negative, all bytes are returned.
2276
2277 .. method:: MemoryBIO.write(buf)
2278
2279 Write the bytes from *buf* to the memory BIO. The *buf* argument must be an
2280 object supporting the buffer protocol.
2281
2282 The return value is the number of bytes written, which is always equal to
2283 the length of *buf*.
2284
2285 .. method:: MemoryBIO.write_eof()
2286
2287 Write an EOF marker to the memory BIO. After this method has been called, it
2288 is illegal to call :meth:`~MemoryBIO.write`. The attribute :attr:`eof` will
2289 become true after all data currently in the buffer has been read.
2290
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002291
Christian Heimes99a65702016-09-10 23:44:53 +02002292SSL session
2293-----------
2294
2295.. versionadded:: 3.6
2296
2297.. class:: SSLSession
2298
2299 Session object used by :attr:`~SSLSocket.session`.
2300
2301 .. attribute:: id
2302 .. attribute:: time
2303 .. attribute:: timeout
2304 .. attribute:: ticket_lifetime_hint
2305 .. attribute:: has_ticket
2306
2307
Antoine Pitrou152efa22010-05-16 18:19:27 +00002308.. _ssl-security:
2309
2310Security considerations
2311-----------------------
2312
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002313Best defaults
2314^^^^^^^^^^^^^
Antoine Pitrou152efa22010-05-16 18:19:27 +00002315
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002316For **client use**, if you don't have any special requirements for your
2317security policy, it is highly recommended that you use the
2318:func:`create_default_context` function to create your SSL context.
2319It will load the system's trusted CA certificates, enable certificate
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002320validation and hostname checking, and try to choose reasonably secure
2321protocol and cipher settings.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002322
2323For example, here is how you would use the :class:`smtplib.SMTP` class to
2324create a trusted, secure connection to a SMTP server::
2325
2326 >>> import ssl, smtplib
2327 >>> smtp = smtplib.SMTP("mail.python.org", port=587)
2328 >>> context = ssl.create_default_context()
2329 >>> smtp.starttls(context=context)
2330 (220, b'2.0.0 Ready to start TLS')
2331
2332If a client certificate is needed for the connection, it can be added with
2333:meth:`SSLContext.load_cert_chain`.
2334
2335By contrast, if you create the SSL context by calling the :class:`SSLContext`
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002336constructor yourself, it will not have certificate validation nor hostname
2337checking enabled by default. If you do so, please read the paragraphs below
2338to achieve a good security level.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002339
2340Manual settings
2341^^^^^^^^^^^^^^^
2342
2343Verifying certificates
2344''''''''''''''''''''''
2345
Donald Stufft8b852f12014-05-20 12:58:38 -04002346When calling the :class:`SSLContext` constructor directly,
Antoine Pitrou152efa22010-05-16 18:19:27 +00002347:const:`CERT_NONE` is the default. Since it does not authenticate the other
2348peer, it can be insecure, especially in client mode where most of time you
2349would like to ensure the authenticity of the server you're talking to.
2350Therefore, when in client mode, it is highly recommended to use
2351:const:`CERT_REQUIRED`. However, it is in itself not sufficient; you also
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002352have to check that the server certificate, which can be obtained by calling
2353:meth:`SSLSocket.getpeercert`, matches the desired service. For many
2354protocols and applications, the service can be identified by the hostname;
Christian Heimes1aa9a752013-12-02 02:41:19 +01002355in this case, the :func:`match_hostname` function can be used. This common
2356check is automatically performed when :attr:`SSLContext.check_hostname` is
2357enabled.
Antoine Pitrou152efa22010-05-16 18:19:27 +00002358
Christian Heimes61d478c2018-01-27 15:51:38 +01002359.. versionchanged:: 3.7
2360 Hostname matchings is now performed by OpenSSL. Python no longer uses
2361 :func:`match_hostname`.
2362
Antoine Pitrou152efa22010-05-16 18:19:27 +00002363In server mode, if you want to authenticate your clients using the SSL layer
2364(rather than using a higher-level authentication mechanism), you'll also have
2365to specify :const:`CERT_REQUIRED` and similarly check the client certificate.
2366
2367 .. note::
2368
2369 In client mode, :const:`CERT_OPTIONAL` and :const:`CERT_REQUIRED` are
2370 equivalent unless anonymous ciphers are enabled (they are disabled
2371 by default).
Thomas Woutersed03b412007-08-28 21:37:11 +00002372
Antoine Pitroub5218772010-05-21 09:56:06 +00002373Protocol versions
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002374'''''''''''''''''
Antoine Pitroub5218772010-05-21 09:56:06 +00002375
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002376SSL versions 2 and 3 are considered insecure and are therefore dangerous to
2377use. If you want maximum compatibility between clients and servers, it is
Christian Heimes5fe668c2016-09-12 00:01:11 +02002378recommended to use :const:`PROTOCOL_TLS_CLIENT` or
2379:const:`PROTOCOL_TLS_SERVER` as the protocol version. SSLv2 and SSLv3 are
2380disabled by default.
Antoine Pitroub5218772010-05-21 09:56:06 +00002381
Marco Buttu7b2491a2017-04-13 16:17:59 +02002382::
2383
Christian Heimesc4d2e502016-09-12 01:14:35 +02002384 >>> client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
2385 >>> client_context.options |= ssl.OP_NO_TLSv1
2386 >>> client_context.options |= ssl.OP_NO_TLSv1_1
Christian Heimes5fe668c2016-09-12 00:01:11 +02002387
Antoine Pitroub5218772010-05-21 09:56:06 +00002388
Christian Heimes598894f2016-09-05 23:19:05 +02002389The SSL context created above will only allow TLSv1.2 and later (if
Christian Heimes5fe668c2016-09-12 00:01:11 +02002390supported by your system) connections to a server. :const:`PROTOCOL_TLS_CLIENT`
2391implies certificate validation and hostname checks by default. You have to
2392load certificates into the context.
2393
Antoine Pitroub5218772010-05-21 09:56:06 +00002394
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002395Cipher selection
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002396''''''''''''''''
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002397
2398If you have advanced security requirements, fine-tuning of the ciphers
2399enabled when negotiating a SSL session is possible through the
2400:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
2401ssl module disables certain weak ciphers by default, but you may want
Donald Stufft79ccaa22014-03-21 21:33:34 -04002402to further restrict the cipher choice. Be sure to read OpenSSL's documentation
Sanyam Khurana338cd832018-01-20 05:55:37 +05302403about the `cipher list format <https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-LIST-FORMAT>`_.
Christian Heimes5fe668c2016-09-12 00:01:11 +02002404If you want to check which ciphers are enabled by a given cipher list, use
2405:meth:`SSLContext.get_ciphers` or the ``openssl ciphers`` command on your
2406system.
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002407
Antoine Pitrou9eefe912013-11-17 15:35:33 +01002408Multi-processing
2409^^^^^^^^^^^^^^^^
2410
2411If using this module as part of a multi-processed application (using,
2412for example the :mod:`multiprocessing` or :mod:`concurrent.futures` modules),
2413be aware that OpenSSL's internal random number generator does not properly
2414handle forked processes. Applications must change the PRNG state of the
2415parent process if they use any SSL feature with :func:`os.fork`. Any
2416successful call of :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or
2417:func:`~ssl.RAND_pseudo_bytes` is sufficient.
2418
Georg Brandl48310cd2009-01-03 21:18:54 +00002419
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002420.. seealso::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002421
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002422 Class :class:`socket.socket`
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002423 Documentation of underlying :mod:`socket` class
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002424
Georg Brandl5d941342016-02-26 19:37:12 +01002425 `SSL/TLS Strong Encryption: An Introduction <https://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002426 Intro from the Apache webserver documentation
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002427
Georg Brandl5d941342016-02-26 19:37:12 +01002428 `RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management <https://www.ietf.org/rfc/rfc1422>`_
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002429 Steve Kent
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002430
Sanyam Khurana338cd832018-01-20 05:55:37 +05302431 `RFC 4086: Randomness Requirements for Security <https://datatracker.ietf.org/doc/rfc4086/>`_
Chandan Kumar63c2c8a2017-06-09 15:13:58 +05302432 Donald E., Jeffrey I. Schiller
Thomas Wouters89d996e2007-09-08 17:39:28 +00002433
Sanyam Khurana338cd832018-01-20 05:55:37 +05302434 `RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile <https://datatracker.ietf.org/doc/rfc5280/>`_
Chandan Kumar63c2c8a2017-06-09 15:13:58 +05302435 D. Cooper
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002436
Georg Brandl5d941342016-02-26 19:37:12 +01002437 `RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 <https://tools.ietf.org/html/rfc5246>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002438 T. Dierks et. al.
2439
Georg Brandl5d941342016-02-26 19:37:12 +01002440 `RFC 6066: Transport Layer Security (TLS) Extensions <https://tools.ietf.org/html/rfc6066>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002441 D. Eastlake
2442
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002443 `IANA TLS: Transport Layer Security (TLS) Parameters <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002444 IANA
Christian Heimesad0ffa02017-09-06 16:19:56 -07002445
2446 `RFC 7525: Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) <https://tools.ietf.org/html/rfc7525>`_
2447 IETF
2448
2449 `Mozilla's Server Side TLS recommendations <https://wiki.mozilla.org/Security/Server_Side_TLS>`_
2450 Mozilla