blob: 5d5232eda30c5e79e51285affa57a1a662ad614d [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
Miss Islington (bot)2614ed42018-02-27 00:17:49 -0800834.. data:: OP_ENABLE_MIDDLEBOX_COMPAT
835
836 Send dummy Change Cipher Spec (CCS) messages in TLS 1.3 handshake to make
837 a TLS 1.3 connection look more like a TLS 1.2 connection.
838
839 This option is only available with OpenSSL 1.1.1 and later.
840
841 .. versionadded:: 3.8
842
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100843.. data:: OP_NO_COMPRESSION
844
845 Disable compression on the SSL channel. This is useful if the application
846 protocol supports its own compression scheme.
847
848 This option is only available with OpenSSL 1.0.0 and later.
849
850 .. versionadded:: 3.3
851
Christian Heimes3aeacad2016-09-10 00:19:35 +0200852.. class:: Options
853
854 :class:`enum.IntFlag` collection of OP_* constants.
855
Christian Heimes99a65702016-09-10 23:44:53 +0200856.. data:: OP_NO_TICKET
857
858 Prevent client side from requesting a session ticket.
859
Christian Heimes3aeacad2016-09-10 00:19:35 +0200860 .. versionadded:: 3.6
861
Benjamin Petersoncca27322015-01-23 16:35:37 -0500862.. data:: HAS_ALPN
863
864 Whether the OpenSSL library has built-in support for the *Application-Layer
865 Protocol Negotiation* TLS extension as described in :rfc:`7301`.
866
867 .. versionadded:: 3.5
868
Christian Heimes61d478c2018-01-27 15:51:38 +0100869.. data:: HAS_NEVER_CHECK_COMMON_NAME
870
871 Whether the OpenSSL library has built-in support not checking subject
872 common name and :attr:`SSLContext.hostname_checks_common_name` is
873 writeable.
874
875 .. versionadded:: 3.7
876
Antoine Pitrou501da612011-12-21 09:27:41 +0100877.. data:: HAS_ECDH
878
879 Whether the OpenSSL library has built-in support for Elliptic Curve-based
880 Diffie-Hellman key exchange. This should be true unless the feature was
881 explicitly disabled by the distributor.
882
883 .. versionadded:: 3.3
884
Antoine Pitroud5323212010-10-22 18:19:07 +0000885.. data:: HAS_SNI
886
887 Whether the OpenSSL library has built-in support for the *Server Name
Chandan Kumar63c2c8a2017-06-09 15:13:58 +0530888 Indication* extension (as defined in :rfc:`6066`).
Antoine Pitroud5323212010-10-22 18:19:07 +0000889
890 .. versionadded:: 3.2
891
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100892.. data:: HAS_NPN
893
894 Whether the OpenSSL library has built-in support for *Next Protocol
Sanyam Khurana338cd832018-01-20 05:55:37 +0530895 Negotiation* as described in the `Application Layer Protocol
896 Negotiation <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_.
897 When true, you can use the :meth:`SSLContext.set_npn_protocols` method to advertise
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100898 which protocols you want to support.
899
900 .. versionadded:: 3.3
901
Christian Heimescb5b68a2017-09-07 18:07:00 -0700902.. data:: HAS_TLSv1_3
903
904 Whether the OpenSSL library has built-in support for the TLS 1.3 protocol.
905
906 .. versionadded:: 3.7
907
Antoine Pitroud6494802011-07-21 01:11:30 +0200908.. data:: CHANNEL_BINDING_TYPES
909
910 List of supported TLS channel binding types. Strings in this list
911 can be used as arguments to :meth:`SSLSocket.get_channel_binding`.
912
913 .. versionadded:: 3.3
914
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000915.. data:: OPENSSL_VERSION
916
917 The version string of the OpenSSL library loaded by the interpreter::
918
919 >>> ssl.OPENSSL_VERSION
Alex Gaynor275104e2017-03-02 05:23:19 -0500920 'OpenSSL 1.0.2k 26 Jan 2017'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000921
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000922 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000923
924.. data:: OPENSSL_VERSION_INFO
925
926 A tuple of five integers representing version information about the
927 OpenSSL library::
928
929 >>> ssl.OPENSSL_VERSION_INFO
Alex Gaynor275104e2017-03-02 05:23:19 -0500930 (1, 0, 2, 11, 15)
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000931
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000932 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000933
934.. data:: OPENSSL_VERSION_NUMBER
935
936 The raw version number of the OpenSSL library, as a single integer::
937
938 >>> ssl.OPENSSL_VERSION_NUMBER
Alex Gaynor275104e2017-03-02 05:23:19 -0500939 268443839
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000940 >>> hex(ssl.OPENSSL_VERSION_NUMBER)
Alex Gaynor275104e2017-03-02 05:23:19 -0500941 '0x100020bf'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000942
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000943 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000944
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100945.. data:: ALERT_DESCRIPTION_HANDSHAKE_FAILURE
946 ALERT_DESCRIPTION_INTERNAL_ERROR
947 ALERT_DESCRIPTION_*
948
949 Alert Descriptions from :rfc:`5246` and others. The `IANA TLS Alert Registry
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300950 <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100951 contains this list and references to the RFCs where their meaning is defined.
952
953 Used as the return value of the callback function in
954 :meth:`SSLContext.set_servername_callback`.
955
956 .. versionadded:: 3.4
957
Christian Heimes3aeacad2016-09-10 00:19:35 +0200958.. class:: AlertDescription
959
960 :class:`enum.IntEnum` collection of ALERT_DESCRIPTION_* constants.
961
962 .. versionadded:: 3.6
963
Christian Heimes72d28502013-11-23 13:56:58 +0100964.. data:: Purpose.SERVER_AUTH
965
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 servers (therefore, it will
969 be used to create client-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100970
971 .. versionadded:: 3.4
972
Christian Heimes6b2ff982013-11-23 14:42:01 +0100973.. data:: Purpose.CLIENT_AUTH
Christian Heimes72d28502013-11-23 13:56:58 +0100974
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100975 Option for :func:`create_default_context` and
976 :meth:`SSLContext.load_default_certs`. This value indicates that the
977 context may be used to authenticate Web clients (therefore, it will
978 be used to create server-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100979
980 .. versionadded:: 3.4
981
Christian Heimes3aeacad2016-09-10 00:19:35 +0200982.. class:: SSLErrorNumber
983
984 :class:`enum.IntEnum` collection of SSL_ERROR_* constants.
985
986 .. versionadded:: 3.6
987
Thomas Woutersed03b412007-08-28 21:37:11 +0000988
Antoine Pitrou152efa22010-05-16 18:19:27 +0000989SSL Sockets
990-----------
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000991
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200992.. class:: SSLSocket(socket.socket)
Antoine Pitrou792ff3e2010-09-19 13:19:21 +0000993
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200994 SSL sockets provide the following methods of :ref:`socket-objects`:
Zachary Wareba9fb0d2014-06-11 15:02:25 -0500995
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200996 - :meth:`~socket.socket.accept()`
997 - :meth:`~socket.socket.bind()`
998 - :meth:`~socket.socket.close()`
999 - :meth:`~socket.socket.connect()`
1000 - :meth:`~socket.socket.detach()`
1001 - :meth:`~socket.socket.fileno()`
1002 - :meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`
1003 - :meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`
1004 - :meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`,
1005 :meth:`~socket.socket.setblocking()`
1006 - :meth:`~socket.socket.listen()`
1007 - :meth:`~socket.socket.makefile()`
1008 - :meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()`
1009 (but passing a non-zero ``flags`` argument is not allowed)
1010 - :meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with
1011 the same limitation)
Victor Stinner92127a52014-10-10 12:43:17 +02001012 - :meth:`~socket.socket.sendfile()` (but :mod:`os.sendfile` will be used
1013 for plain-text sockets only, else :meth:`~socket.socket.send()` will be used)
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001014 - :meth:`~socket.socket.shutdown()`
Zachary Wareba9fb0d2014-06-11 15:02:25 -05001015
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001016 However, since the SSL (and TLS) protocol has its own framing atop
1017 of TCP, the SSL sockets abstraction can, in certain respects, diverge from
1018 the specification of normal, OS-level sockets. See especially the
1019 :ref:`notes on non-blocking sockets <ssl-nonblocking>`.
Antoine Pitroue1f2f302010-09-19 13:56:11 +00001020
Victor Stinnerd28fe8c2014-10-10 12:07:19 +02001021 Usually, :class:`SSLSocket` are not created directly, but using the
Alex Gaynor1cf2a802017-02-28 22:26:56 -05001022 :meth:`SSLContext.wrap_socket` method.
Victor Stinnerd28fe8c2014-10-10 12:07:19 +02001023
Victor Stinner92127a52014-10-10 12:43:17 +02001024 .. versionchanged:: 3.5
1025 The :meth:`sendfile` method was added.
1026
Victor Stinner14690702015-04-06 22:46:13 +02001027 .. versionchanged:: 3.5
1028 The :meth:`shutdown` does not reset the socket timeout each time bytes
1029 are received or sent. The socket timeout is now to maximum total duration
1030 of the shutdown.
1031
Christian Heimesd0486372016-09-10 23:23:33 +02001032 .. deprecated:: 3.6
1033 It is deprecated to create a :class:`SSLSocket` instance directly, use
1034 :meth:`SSLContext.wrap_socket` to wrap a socket.
1035
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001036
1037SSL sockets also have the following additional methods and attributes:
Antoine Pitrou792ff3e2010-09-19 13:19:21 +00001038
Martin Panterf6b1d662016-03-28 00:22:09 +00001039.. method:: SSLSocket.read(len=1024, buffer=None)
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001040
1041 Read up to *len* bytes of data from the SSL socket and return the result as
1042 a ``bytes`` instance. If *buffer* is specified, then read into the buffer
1043 instead, and return the number of bytes read.
1044
Victor Stinner41f92c22014-10-10 12:05:56 +02001045 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001046 :ref:`non-blocking <ssl-nonblocking>` and the read would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001047
1048 As at any time a re-negotiation is possible, a call to :meth:`read` can also
1049 cause write operations.
1050
Victor Stinner14690702015-04-06 22:46:13 +02001051 .. versionchanged:: 3.5
1052 The socket timeout is no more reset each time bytes are received or sent.
1053 The socket timeout is now to maximum total duration to read up to *len*
1054 bytes.
1055
Christian Heimesd0486372016-09-10 23:23:33 +02001056 .. deprecated:: 3.6
1057 Use :meth:`~SSLSocket.recv` instead of :meth:`~SSLSocket.read`.
1058
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001059.. method:: SSLSocket.write(buf)
1060
1061 Write *buf* to the SSL socket and return the number of bytes written. The
1062 *buf* argument must be an object supporting the buffer interface.
1063
Victor Stinner41f92c22014-10-10 12:05:56 +02001064 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001065 :ref:`non-blocking <ssl-nonblocking>` and the write would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001066
1067 As at any time a re-negotiation is possible, a call to :meth:`write` can
1068 also cause read operations.
1069
Victor Stinner14690702015-04-06 22:46:13 +02001070 .. versionchanged:: 3.5
1071 The socket timeout is no more reset each time bytes are received or sent.
1072 The socket timeout is now to maximum total duration to write *buf*.
1073
Christian Heimesd0486372016-09-10 23:23:33 +02001074 .. deprecated:: 3.6
1075 Use :meth:`~SSLSocket.send` instead of :meth:`~SSLSocket.write`.
1076
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001077.. note::
1078
1079 The :meth:`~SSLSocket.read` and :meth:`~SSLSocket.write` methods are the
1080 low-level methods that read and write unencrypted, application-level data
Martin Panter1f1177d2015-10-31 11:48:53 +00001081 and decrypt/encrypt it to encrypted, wire-level data. These methods
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001082 require an active SSL connection, i.e. the handshake was completed and
1083 :meth:`SSLSocket.unwrap` was not called.
1084
1085 Normally you should use the socket API methods like
1086 :meth:`~socket.socket.recv` and :meth:`~socket.socket.send` instead of these
1087 methods.
1088
Bill Janssen48dc27c2007-12-05 03:38:10 +00001089.. method:: SSLSocket.do_handshake()
1090
Antoine Pitroub3593ca2011-07-11 01:39:19 +02001091 Perform the SSL setup handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +00001092
Christian Heimes1aa9a752013-12-02 02:41:19 +01001093 .. versionchanged:: 3.4
Zachary Ware88a19772014-07-25 13:30:50 -05001094 The handshake method also performs :func:`match_hostname` when the
Christian Heimes1aa9a752013-12-02 02:41:19 +01001095 :attr:`~SSLContext.check_hostname` attribute of the socket's
1096 :attr:`~SSLSocket.context` is true.
1097
Victor Stinner14690702015-04-06 22:46:13 +02001098 .. versionchanged:: 3.5
1099 The socket timeout is no more reset each time bytes are received or sent.
1100 The socket timeout is now to maximum total duration of the handshake.
1101
Christian Heimes61d478c2018-01-27 15:51:38 +01001102 .. versionchanged:: 3.7
1103 Hostname or IP address is matched by OpenSSL during handshake. The
1104 function :func:`match_hostname` is no longer used. In case OpenSSL
1105 refuses a hostname or IP address, the handshake is aborted early and
1106 a TLS alert message is send to the peer.
1107
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001108.. method:: SSLSocket.getpeercert(binary_form=False)
1109
Georg Brandl7f01a132009-09-16 15:58:14 +00001110 If there is no certificate for the peer on the other end of the connection,
Antoine Pitrou20b85552013-09-29 19:50:53 +02001111 return ``None``. If the SSL handshake hasn't been done yet, raise
1112 :exc:`ValueError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001113
Antoine Pitroud34941a2013-04-16 20:27:17 +02001114 If the ``binary_form`` parameter is :const:`False`, and a certificate was
Georg Brandl7f01a132009-09-16 15:58:14 +00001115 received from the peer, this method returns a :class:`dict` instance. If the
1116 certificate was not validated, the dict is empty. If the certificate was
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001117 validated, it returns a dict with several keys, amongst them ``subject``
1118 (the principal for which the certificate was issued) and ``issuer``
1119 (the principal issuing the certificate). If a certificate contains an
1120 instance of the *Subject Alternative Name* extension (see :rfc:`3280`),
1121 there will also be a ``subjectAltName`` key in the dictionary.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001122
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001123 The ``subject`` and ``issuer`` fields are tuples containing the sequence
1124 of relative distinguished names (RDNs) given in the certificate's data
1125 structure for the respective fields, and each RDN is a sequence of
1126 name-value pairs. Here is a real-world example::
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001127
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001128 {'issuer': ((('countryName', 'IL'),),
1129 (('organizationName', 'StartCom Ltd.'),),
1130 (('organizationalUnitName',
1131 'Secure Digital Certificate Signing'),),
1132 (('commonName',
1133 'StartCom Class 2 Primary Intermediate Server CA'),)),
1134 'notAfter': 'Nov 22 08:15:19 2013 GMT',
1135 'notBefore': 'Nov 21 03:09:52 2011 GMT',
1136 'serialNumber': '95F0',
1137 'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),),
1138 (('countryName', 'US'),),
1139 (('stateOrProvinceName', 'California'),),
1140 (('localityName', 'San Francisco'),),
1141 (('organizationName', 'Electronic Frontier Foundation, Inc.'),),
1142 (('commonName', '*.eff.org'),),
1143 (('emailAddress', 'hostmaster@eff.org'),)),
1144 'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')),
1145 'version': 3}
1146
1147 .. note::
Larry Hastings3732ed22014-03-15 21:13:56 -07001148
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001149 To validate a certificate for a particular service, you can use the
1150 :func:`match_hostname` function.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001151
Georg Brandl7f01a132009-09-16 15:58:14 +00001152 If the ``binary_form`` parameter is :const:`True`, and a certificate was
1153 provided, this method returns the DER-encoded form of the entire certificate
1154 as a sequence of bytes, or :const:`None` if the peer did not provide a
Antoine Pitroud34941a2013-04-16 20:27:17 +02001155 certificate. Whether the peer provides a certificate depends on the SSL
1156 socket's role:
1157
1158 * for a client SSL socket, the server will always provide a certificate,
1159 regardless of whether validation was required;
1160
1161 * for a server SSL socket, the client will only provide a certificate
1162 when requested by the server; therefore :meth:`getpeercert` will return
1163 :const:`None` if you used :const:`CERT_NONE` (rather than
1164 :const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`).
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001165
Antoine Pitroufb046912010-11-09 20:21:19 +00001166 .. versionchanged:: 3.2
1167 The returned dictionary includes additional items such as ``issuer``
1168 and ``notBefore``.
1169
Antoine Pitrou20b85552013-09-29 19:50:53 +02001170 .. versionchanged:: 3.4
1171 :exc:`ValueError` is raised when the handshake isn't done.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001172 The returned dictionary includes additional X509v3 extension items
Larry Hastings3732ed22014-03-15 21:13:56 -07001173 such as ``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001174
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001175.. method:: SSLSocket.cipher()
1176
Georg Brandl7f01a132009-09-16 15:58:14 +00001177 Returns a three-value tuple containing the name of the cipher being used, the
1178 version of the SSL protocol that defines its use, and the number of secret
1179 bits being used. If no connection has been established, returns ``None``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001180
Benjamin Peterson4cb17812015-01-07 11:14:26 -06001181.. method:: SSLSocket.shared_ciphers()
1182
1183 Return the list of ciphers shared by the client during the handshake. Each
1184 entry of the returned list is a three-value tuple containing the name of the
1185 cipher, the version of the SSL protocol that defines its use, and the number
1186 of secret bits the cipher uses. :meth:`~SSLSocket.shared_ciphers` returns
1187 ``None`` if no connection has been established or the socket is a client
1188 socket.
1189
1190 .. versionadded:: 3.5
1191
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +01001192.. method:: SSLSocket.compression()
1193
1194 Return the compression algorithm being used as a string, or ``None``
1195 if the connection isn't compressed.
1196
1197 If the higher-level protocol supports its own compression mechanism,
1198 you can use :data:`OP_NO_COMPRESSION` to disable SSL-level compression.
1199
1200 .. versionadded:: 3.3
1201
Antoine Pitroud6494802011-07-21 01:11:30 +02001202.. method:: SSLSocket.get_channel_binding(cb_type="tls-unique")
1203
1204 Get channel binding data for current connection, as a bytes object. Returns
1205 ``None`` if not connected or the handshake has not been completed.
1206
1207 The *cb_type* parameter allow selection of the desired channel binding
1208 type. Valid channel binding types are listed in the
1209 :data:`CHANNEL_BINDING_TYPES` list. Currently only the 'tls-unique' channel
1210 binding, defined by :rfc:`5929`, is supported. :exc:`ValueError` will be
1211 raised if an unsupported channel binding type is requested.
1212
1213 .. versionadded:: 3.3
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001214
Benjamin Petersoncca27322015-01-23 16:35:37 -05001215.. method:: SSLSocket.selected_alpn_protocol()
1216
1217 Return the protocol that was selected during the TLS handshake. If
1218 :meth:`SSLContext.set_alpn_protocols` was not called, if the other party does
Benjamin Peterson88615022015-01-23 17:30:26 -05001219 not support ALPN, if this socket does not support any of the client's
1220 proposed protocols, or if the handshake has not happened yet, ``None`` is
Benjamin Petersoncca27322015-01-23 16:35:37 -05001221 returned.
1222
1223 .. versionadded:: 3.5
1224
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001225.. method:: SSLSocket.selected_npn_protocol()
1226
Benjamin Petersoncca27322015-01-23 16:35:37 -05001227 Return the higher-level protocol that was selected during the TLS/SSL
Antoine Pitrou47e40422014-09-04 21:00:10 +02001228 handshake. If :meth:`SSLContext.set_npn_protocols` was not called, or
1229 if the other party does not support NPN, or if the handshake has not yet
1230 happened, this will return ``None``.
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001231
1232 .. versionadded:: 3.3
1233
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001234.. method:: SSLSocket.unwrap()
1235
Georg Brandl7f01a132009-09-16 15:58:14 +00001236 Performs the SSL shutdown handshake, which removes the TLS layer from the
1237 underlying socket, and returns the underlying socket object. This can be
1238 used to go from encrypted operation over a connection to unencrypted. The
1239 returned socket should always be used for further communication with the
1240 other side of the connection, rather than the original socket.
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001241
Antoine Pitrou47e40422014-09-04 21:00:10 +02001242.. method:: SSLSocket.version()
1243
1244 Return the actual SSL protocol version negotiated by the connection
1245 as a string, or ``None`` is no secure connection is established.
1246 As of this writing, possible return values include ``"SSLv2"``,
1247 ``"SSLv3"``, ``"TLSv1"``, ``"TLSv1.1"`` and ``"TLSv1.2"``.
1248 Recent OpenSSL versions may define more return values.
1249
1250 .. versionadded:: 3.5
1251
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001252.. method:: SSLSocket.pending()
1253
1254 Returns the number of already decrypted bytes available for read, pending on
1255 the connection.
1256
Antoine Pitrouec883db2010-05-24 21:20:20 +00001257.. attribute:: SSLSocket.context
1258
1259 The :class:`SSLContext` object this SSL socket is tied to. If the SSL
1260 socket was created using the top-level :func:`wrap_socket` function
1261 (rather than :meth:`SSLContext.wrap_socket`), this is a custom context
1262 object created for this SSL socket.
1263
1264 .. versionadded:: 3.2
1265
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001266.. attribute:: SSLSocket.server_side
1267
1268 A boolean which is ``True`` for server-side sockets and ``False`` for
1269 client-side sockets.
1270
Victor Stinner41f92c22014-10-10 12:05:56 +02001271 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001272
1273.. attribute:: SSLSocket.server_hostname
1274
Victor Stinner41f92c22014-10-10 12:05:56 +02001275 Hostname of the server: :class:`str` type, or ``None`` for server-side
1276 socket or if the hostname was not specified in the constructor.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001277
Victor Stinner41f92c22014-10-10 12:05:56 +02001278 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001279
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001280 .. versionchanged:: 3.7
1281 The attribute is now always ASCII text. When ``server_hostname`` is
1282 an internationalized domain name (IDN), this attribute now stores the
1283 A-label form (``"xn--pythn-mua.org"``), rather than the U-label form
1284 (``"pythön.org"``).
1285
Christian Heimes99a65702016-09-10 23:44:53 +02001286.. attribute:: SSLSocket.session
1287
1288 The :class:`SSLSession` for this SSL connection. The session is available
1289 for client and server side sockets after the TLS handshake has been
1290 performed. For client sockets the session can be set before
1291 :meth:`~SSLSocket.do_handshake` has been called to reuse a session.
1292
1293 .. versionadded:: 3.6
1294
1295.. attribute:: SSLSocket.session_reused
1296
1297 .. versionadded:: 3.6
1298
Antoine Pitrouec883db2010-05-24 21:20:20 +00001299
Antoine Pitrou152efa22010-05-16 18:19:27 +00001300SSL Contexts
1301------------
1302
Antoine Pitroucafaad42010-05-24 15:58:43 +00001303.. versionadded:: 3.2
1304
Antoine Pitroub0182c82010-10-12 20:09:02 +00001305An SSL context holds various data longer-lived than single SSL connections,
1306such as SSL configuration options, certificate(s) and private key(s).
1307It also manages a cache of SSL sessions for server-side sockets, in order
1308to speed up repeated connections from the same clients.
1309
Christian Heimes598894f2016-09-05 23:19:05 +02001310.. class:: SSLContext(protocol=PROTOCOL_TLS)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001311
Christian Heimes598894f2016-09-05 23:19:05 +02001312 Create a new SSL context. You may pass *protocol* which must be one
Antoine Pitroub0182c82010-10-12 20:09:02 +00001313 of the ``PROTOCOL_*`` constants defined in this module.
Christian Heimes598894f2016-09-05 23:19:05 +02001314 :data:`PROTOCOL_TLS` is currently recommended for maximum
1315 interoperability and default value.
Antoine Pitrou5bef4102013-11-23 16:16:29 +01001316
1317 .. seealso::
1318 :func:`create_default_context` lets the :mod:`ssl` module choose
1319 security settings for a given purpose.
Antoine Pitroub0182c82010-10-12 20:09:02 +00001320
Christian Heimes01113fa2016-09-05 23:23:24 +02001321 .. versionchanged:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +02001322
Christian Heimes358cfd42016-09-10 22:43:48 +02001323 The context is created with secure default values. The options
1324 :data:`OP_NO_COMPRESSION`, :data:`OP_CIPHER_SERVER_PREFERENCE`,
1325 :data:`OP_SINGLE_DH_USE`, :data:`OP_SINGLE_ECDH_USE`,
1326 :data:`OP_NO_SSLv2` (except for :data:`PROTOCOL_SSLv2`),
1327 and :data:`OP_NO_SSLv3` (except for :data:`PROTOCOL_SSLv3`) are
1328 set by default. The initial cipher suite list contains only ``HIGH``
1329 ciphers, no ``NULL`` ciphers and no ``MD5`` ciphers (except for
1330 :data:`PROTOCOL_SSLv2`).
Christian Heimes598894f2016-09-05 23:19:05 +02001331
Antoine Pitrou152efa22010-05-16 18:19:27 +00001332
1333:class:`SSLContext` objects have the following methods and attributes:
1334
Christian Heimes9a5395a2013-06-17 15:44:12 +02001335.. method:: SSLContext.cert_store_stats()
1336
1337 Get statistics about quantities of loaded X.509 certificates, count of
1338 X.509 certificates flagged as CA certificates and certificate revocation
1339 lists as dictionary.
1340
1341 Example for a context with one CA cert and one other cert::
1342
1343 >>> context.cert_store_stats()
1344 {'crl': 0, 'x509_ca': 1, 'x509': 2}
1345
1346 .. versionadded:: 3.4
1347
Christian Heimesefff7062013-11-21 03:35:02 +01001348
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001349.. method:: SSLContext.load_cert_chain(certfile, keyfile=None, password=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001350
1351 Load a private key and the corresponding certificate. The *certfile*
1352 string must be the path to a single file in PEM format containing the
1353 certificate as well as any number of CA certificates needed to establish
1354 the certificate's authenticity. The *keyfile* string, if present, must
1355 point to a file containing the private key in. Otherwise the private
1356 key will be taken from *certfile* as well. See the discussion of
1357 :ref:`ssl-certificates` for more information on how the certificate
1358 is stored in the *certfile*.
1359
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001360 The *password* argument may be a function to call to get the password for
1361 decrypting the private key. It will only be called if the private key is
1362 encrypted and a password is necessary. It will be called with no arguments,
1363 and it should return a string, bytes, or bytearray. If the return value is
1364 a string it will be encoded as UTF-8 before using it to decrypt the key.
1365 Alternatively a string, bytes, or bytearray value may be supplied directly
1366 as the *password* argument. It will be ignored if the private key is not
1367 encrypted and no password is needed.
1368
1369 If the *password* argument is not specified and a password is required,
1370 OpenSSL's built-in password prompting mechanism will be used to
1371 interactively prompt the user for a password.
1372
Antoine Pitrou152efa22010-05-16 18:19:27 +00001373 An :class:`SSLError` is raised if the private key doesn't
1374 match with the certificate.
1375
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001376 .. versionchanged:: 3.3
1377 New optional argument *password*.
1378
Christian Heimes72d28502013-11-23 13:56:58 +01001379.. method:: SSLContext.load_default_certs(purpose=Purpose.SERVER_AUTH)
1380
1381 Load a set of default "certification authority" (CA) certificates from
1382 default locations. On Windows it loads CA certs from the ``CA`` and
1383 ``ROOT`` system stores. On other systems it calls
1384 :meth:`SSLContext.set_default_verify_paths`. In the future the method may
1385 load CA certificates from other locations, too.
1386
1387 The *purpose* flag specifies what kind of CA certificates are loaded. The
1388 default settings :data:`Purpose.SERVER_AUTH` loads certificates, that are
1389 flagged and trusted for TLS web server authentication (client side
Christian Heimes6b2ff982013-11-23 14:42:01 +01001390 sockets). :data:`Purpose.CLIENT_AUTH` loads CA certificates for client
Christian Heimes72d28502013-11-23 13:56:58 +01001391 certificate verification on the server side.
1392
1393 .. versionadded:: 3.4
1394
Christian Heimesefff7062013-11-21 03:35:02 +01001395.. method:: SSLContext.load_verify_locations(cafile=None, capath=None, cadata=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001396
1397 Load a set of "certification authority" (CA) certificates used to validate
1398 other peers' certificates when :data:`verify_mode` is other than
1399 :data:`CERT_NONE`. At least one of *cafile* or *capath* must be specified.
1400
Christian Heimes22587792013-11-21 23:56:13 +01001401 This method can also load certification revocation lists (CRLs) in PEM or
Donald Stufft8b852f12014-05-20 12:58:38 -04001402 DER format. In order to make use of CRLs, :attr:`SSLContext.verify_flags`
Christian Heimes22587792013-11-21 23:56:13 +01001403 must be configured properly.
1404
Christian Heimes3e738f92013-06-09 18:07:16 +02001405 The *cafile* string, if present, is the path to a file of concatenated
Antoine Pitrou152efa22010-05-16 18:19:27 +00001406 CA certificates in PEM format. See the discussion of
1407 :ref:`ssl-certificates` for more information about how to arrange the
1408 certificates in this file.
1409
1410 The *capath* string, if present, is
1411 the path to a directory containing several CA certificates in PEM format,
1412 following an `OpenSSL specific layout
Sanyam Khurana338cd832018-01-20 05:55:37 +05301413 <https://www.openssl.org/docs/manmaster/man3/SSL_CTX_load_verify_locations.html>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001414
Christian Heimesefff7062013-11-21 03:35:02 +01001415 The *cadata* object, if present, is either an ASCII string of one or more
Serhiy Storchakab757c832014-12-05 22:25:22 +02001416 PEM-encoded certificates or a :term:`bytes-like object` of DER-encoded
Christian Heimesefff7062013-11-21 03:35:02 +01001417 certificates. Like with *capath* extra lines around PEM-encoded
1418 certificates are ignored but at least one certificate must be present.
1419
1420 .. versionchanged:: 3.4
1421 New optional argument *cadata*
1422
Christian Heimes9a5395a2013-06-17 15:44:12 +02001423.. method:: SSLContext.get_ca_certs(binary_form=False)
1424
1425 Get a list of loaded "certification authority" (CA) certificates. If the
1426 ``binary_form`` parameter is :const:`False` each list
1427 entry is a dict like the output of :meth:`SSLSocket.getpeercert`. Otherwise
1428 the method returns a list of DER-encoded certificates. The returned list
1429 does not contain certificates from *capath* unless a certificate was
1430 requested and loaded by a SSL connection.
1431
Antoine Pitrou97aa9532015-04-13 21:06:15 +02001432 .. note::
1433 Certificates in a capath directory aren't loaded unless they have
1434 been used at least once.
1435
Larry Hastingsd36fc432013-08-03 02:49:53 -07001436 .. versionadded:: 3.4
Christian Heimes9a5395a2013-06-17 15:44:12 +02001437
Christian Heimes25bfcd52016-09-06 00:04:45 +02001438.. method:: SSLContext.get_ciphers()
1439
1440 Get a list of enabled ciphers. The list is in order of cipher priority.
1441 See :meth:`SSLContext.set_ciphers`.
1442
1443 Example::
1444
1445 >>> ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
1446 >>> ctx.set_ciphers('ECDHE+AESGCM:!ECDSA')
1447 >>> ctx.get_ciphers() # OpenSSL 1.0.x
1448 [{'alg_bits': 256,
1449 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA '
1450 'Enc=AESGCM(256) Mac=AEAD',
1451 'id': 50380848,
1452 'name': 'ECDHE-RSA-AES256-GCM-SHA384',
1453 'protocol': 'TLSv1/SSLv3',
1454 'strength_bits': 256},
1455 {'alg_bits': 128,
1456 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA '
1457 'Enc=AESGCM(128) Mac=AEAD',
1458 'id': 50380847,
1459 'name': 'ECDHE-RSA-AES128-GCM-SHA256',
1460 'protocol': 'TLSv1/SSLv3',
1461 'strength_bits': 128}]
1462
1463 On OpenSSL 1.1 and newer the cipher dict contains additional fields::
Marco Buttu7b2491a2017-04-13 16:17:59 +02001464
Christian Heimes25bfcd52016-09-06 00:04:45 +02001465 >>> ctx.get_ciphers() # OpenSSL 1.1+
1466 [{'aead': True,
1467 'alg_bits': 256,
1468 'auth': 'auth-rsa',
1469 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA '
1470 'Enc=AESGCM(256) Mac=AEAD',
1471 'digest': None,
1472 'id': 50380848,
1473 'kea': 'kx-ecdhe',
1474 'name': 'ECDHE-RSA-AES256-GCM-SHA384',
1475 'protocol': 'TLSv1.2',
1476 'strength_bits': 256,
1477 'symmetric': 'aes-256-gcm'},
1478 {'aead': True,
1479 'alg_bits': 128,
1480 'auth': 'auth-rsa',
1481 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA '
1482 'Enc=AESGCM(128) Mac=AEAD',
1483 'digest': None,
1484 'id': 50380847,
1485 'kea': 'kx-ecdhe',
1486 'name': 'ECDHE-RSA-AES128-GCM-SHA256',
1487 'protocol': 'TLSv1.2',
1488 'strength_bits': 128,
1489 'symmetric': 'aes-128-gcm'}]
1490
1491 Availability: OpenSSL 1.0.2+
1492
1493 .. versionadded:: 3.6
1494
Antoine Pitrou664c2d12010-11-17 20:29:42 +00001495.. method:: SSLContext.set_default_verify_paths()
1496
1497 Load a set of default "certification authority" (CA) certificates from
1498 a filesystem path defined when building the OpenSSL library. Unfortunately,
1499 there's no easy way to know whether this method succeeds: no error is
1500 returned if no certificates are to be found. When the OpenSSL library is
1501 provided as part of the operating system, though, it is likely to be
1502 configured properly.
1503
Antoine Pitrou152efa22010-05-16 18:19:27 +00001504.. method:: SSLContext.set_ciphers(ciphers)
1505
1506 Set the available ciphers for sockets created with this context.
1507 It should be a string in the `OpenSSL cipher list format
Felipe19e4d932017-09-20 20:20:18 +02001508 <https://wiki.openssl.org/index.php/Manual:Ciphers(1)#CIPHER_LIST_FORMAT>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001509 If no cipher can be selected (because compile-time options or other
1510 configuration forbids use of all the specified ciphers), an
1511 :class:`SSLError` will be raised.
1512
1513 .. note::
1514 when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will
1515 give the currently selected cipher.
1516
Benjamin Petersoncca27322015-01-23 16:35:37 -05001517.. method:: SSLContext.set_alpn_protocols(protocols)
1518
1519 Specify which protocols the socket should advertise during the SSL/TLS
1520 handshake. It should be a list of ASCII strings, like ``['http/1.1',
1521 'spdy/2']``, ordered by preference. The selection of a protocol will happen
1522 during the handshake, and will play out according to :rfc:`7301`. After a
1523 successful handshake, the :meth:`SSLSocket.selected_alpn_protocol` method will
1524 return the agreed-upon protocol.
1525
1526 This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is
1527 False.
1528
Christian Heimes7b40cb72017-08-15 10:33:43 +02001529 OpenSSL 1.1.0 to 1.1.0e will abort the handshake and raise :exc:`SSLError`
1530 when both sides support ALPN but cannot agree on a protocol. 1.1.0f+
1531 behaves like 1.0.2, :meth:`SSLSocket.selected_alpn_protocol` returns None.
Christian Heimes598894f2016-09-05 23:19:05 +02001532
Benjamin Petersoncca27322015-01-23 16:35:37 -05001533 .. versionadded:: 3.5
1534
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001535.. method:: SSLContext.set_npn_protocols(protocols)
1536
R David Murrayc7f75792013-06-26 15:11:12 -04001537 Specify which protocols the socket should advertise during the SSL/TLS
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001538 handshake. It should be a list of strings, like ``['http/1.1', 'spdy/2']``,
1539 ordered by preference. The selection of a protocol will happen during the
Sanyam Khurana338cd832018-01-20 05:55:37 +05301540 handshake, and will play out according to the `Application Layer Protocol Negotiation
1541 <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_. After a
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001542 successful handshake, the :meth:`SSLSocket.selected_npn_protocol` method will
1543 return the agreed-upon protocol.
1544
1545 This method will raise :exc:`NotImplementedError` if :data:`HAS_NPN` is
1546 False.
1547
1548 .. versionadded:: 3.3
1549
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001550.. attribute:: SSLContext.sni_callback
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001551
1552 Register a callback function that will be called after the TLS Client Hello
1553 handshake message has been received by the SSL/TLS server when the TLS client
1554 specifies a server name indication. The server name indication mechanism
1555 is specified in :rfc:`6066` section 3 - Server Name Indication.
1556
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001557 Only one callback can be set per ``SSLContext``. If *sni_callback*
1558 is set to ``None`` then the callback is disabled. Calling this function a
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001559 subsequent time will disable the previously registered callback.
1560
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001561 The callback function will be called with three
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001562 arguments; the first being the :class:`ssl.SSLSocket`, the second is a string
1563 that represents the server name that the client is intending to communicate
Antoine Pitrou50b24d02013-04-11 20:48:42 +02001564 (or :const:`None` if the TLS Client Hello does not contain a server name)
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001565 and the third argument is the original :class:`SSLContext`. The server name
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001566 argument is text. For internationalized domain name, the server
1567 name is an IDN A-label (``"xn--pythn-mua.org"``).
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001568
1569 A typical use of this callback is to change the :class:`ssl.SSLSocket`'s
1570 :attr:`SSLSocket.context` attribute to a new object of type
1571 :class:`SSLContext` representing a certificate chain that matches the server
1572 name.
1573
1574 Due to the early negotiation phase of the TLS connection, only limited
1575 methods and attributes are usable like
Benjamin Petersoncca27322015-01-23 16:35:37 -05001576 :meth:`SSLSocket.selected_alpn_protocol` and :attr:`SSLSocket.context`.
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001577 :meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.getpeercert`,
1578 :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compress` methods require that
1579 the TLS connection has progressed beyond the TLS Client Hello and therefore
1580 will not contain return meaningful values nor can they be called safely.
1581
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001582 The *sni_callback* function must return ``None`` to allow the
Terry Jan Reedy8e7586b2013-03-11 18:38:13 -04001583 TLS negotiation to continue. If a TLS failure is required, a constant
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001584 :const:`ALERT_DESCRIPTION_* <ALERT_DESCRIPTION_INTERNAL_ERROR>` can be
1585 returned. Other return values will result in a TLS fatal error with
1586 :const:`ALERT_DESCRIPTION_INTERNAL_ERROR`.
1587
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001588 If an exception is raised from the *sni_callback* function the TLS
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001589 connection will terminate with a fatal TLS alert message
1590 :const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`.
1591
1592 This method will raise :exc:`NotImplementedError` if the OpenSSL library
1593 had OPENSSL_NO_TLSEXT defined when it was built.
1594
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001595 .. versionadded:: 3.7
1596
1597.. attribute:: SSLContext.set_servername_callback(server_name_callback)
1598
1599 This is a legacy API retained for backwards compatibility. When possible,
1600 you should use :attr:`sni_callback` instead. The given *server_name_callback*
1601 is similar to *sni_callback*, except that when the server hostname is an
1602 IDN-encoded internationalized domain name, the *server_name_callback*
1603 receives a decoded U-label (``"pythön.org"``).
1604
1605 If there is an decoding error on the server name, the TLS connection will
1606 terminate with an :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` fatal TLS
1607 alert message to the client.
1608
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001609 .. versionadded:: 3.4
1610
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001611.. method:: SSLContext.load_dh_params(dhfile)
1612
1613 Load the key generation parameters for Diffie-Helman (DH) key exchange.
1614 Using DH key exchange improves forward secrecy at the expense of
1615 computational resources (both on the server and on the client).
1616 The *dhfile* parameter should be the path to a file containing DH
1617 parameters in PEM format.
1618
1619 This setting doesn't apply to client sockets. You can also use the
1620 :data:`OP_SINGLE_DH_USE` option to further improve security.
1621
1622 .. versionadded:: 3.3
1623
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001624.. method:: SSLContext.set_ecdh_curve(curve_name)
1625
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001626 Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH) key
1627 exchange. ECDH is significantly faster than regular DH while arguably
1628 as secure. The *curve_name* parameter should be a string describing
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001629 a well-known elliptic curve, for example ``prime256v1`` for a widely
1630 supported curve.
1631
1632 This setting doesn't apply to client sockets. You can also use the
1633 :data:`OP_SINGLE_ECDH_USE` option to further improve security.
1634
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +03001635 This method is not available if :data:`HAS_ECDH` is ``False``.
Antoine Pitrou501da612011-12-21 09:27:41 +01001636
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001637 .. versionadded:: 3.3
1638
1639 .. seealso::
Sanyam Khurana1b4587a2017-12-06 22:09:33 +05301640 `SSL/TLS & Perfect Forward Secrecy <https://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy>`_
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001641 Vincent Bernat.
1642
Antoine Pitroud5323212010-10-22 18:19:07 +00001643.. method:: SSLContext.wrap_socket(sock, server_side=False, \
1644 do_handshake_on_connect=True, suppress_ragged_eofs=True, \
Christian Heimes99a65702016-09-10 23:44:53 +02001645 server_hostname=None, session=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001646
Christian Heimes4df60f12017-09-15 20:26:05 +02001647 Wrap an existing Python socket *sock* and return an instance of
1648 :attr:`SSLContext.sslsocket_class` (default :class:`SSLSocket`).
1649 *sock* must be a :data:`~socket.SOCK_STREAM` socket; other socket
Antoine Pitrou3e86ba42013-12-28 17:26:33 +01001650 types are unsupported.
1651
1652 The returned SSL socket is tied to the context, its settings and
Antoine Pitrou152efa22010-05-16 18:19:27 +00001653 certificates. The parameters *server_side*, *do_handshake_on_connect*
1654 and *suppress_ragged_eofs* have the same meaning as in the top-level
1655 :func:`wrap_socket` function.
1656
Antoine Pitroud5323212010-10-22 18:19:07 +00001657 On client connections, the optional parameter *server_hostname* specifies
1658 the hostname of the service which we are connecting to. This allows a
1659 single server to host multiple SSL-based services with distinct certificates,
Benjamin Peterson7243b572014-11-23 17:04:34 -06001660 quite similarly to HTTP virtual hosts. Specifying *server_hostname* will
1661 raise a :exc:`ValueError` if *server_side* is true.
1662
Christian Heimes99a65702016-09-10 23:44:53 +02001663 *session*, see :attr:`~SSLSocket.session`.
1664
Benjamin Peterson7243b572014-11-23 17:04:34 -06001665 .. versionchanged:: 3.5
1666 Always allow a server_hostname to be passed, even if OpenSSL does not
1667 have SNI.
Antoine Pitroud5323212010-10-22 18:19:07 +00001668
Christian Heimes99a65702016-09-10 23:44:53 +02001669 .. versionchanged:: 3.6
1670 *session* argument was added.
1671
Christian Heimes4df60f12017-09-15 20:26:05 +02001672 .. versionchanged:: 3.7
1673 The method returns on instance of :attr:`SSLContext.sslsocket_class`
1674 instead of hard-coded :class:`SSLSocket`.
1675
1676.. attribute:: SSLContext.sslsocket_class
1677
1678 The return type of :meth:`SSLContext.wrap_sockets`, defaults to
1679 :class:`SSLSocket`. The attribute can be overridden on instance of class
1680 in order to return a custom subclass of :class:`SSLSocket`.
1681
1682 .. versionadded:: 3.7
1683
Victor Stinner805b2622014-10-10 12:49:08 +02001684.. method:: SSLContext.wrap_bio(incoming, outgoing, server_side=False, \
Christian Heimes99a65702016-09-10 23:44:53 +02001685 server_hostname=None, session=None)
Victor Stinner805b2622014-10-10 12:49:08 +02001686
Christian Heimes4df60f12017-09-15 20:26:05 +02001687 Wrap the BIO objects *incoming* and *outgoing* and return an instance of
1688 attr:`SSLContext.sslobject_class` (default :class:`SSLObject`). The SSL
1689 routines will read input data from the incoming BIO and write data to the
1690 outgoing BIO.
Victor Stinner805b2622014-10-10 12:49:08 +02001691
Christian Heimes99a65702016-09-10 23:44:53 +02001692 The *server_side*, *server_hostname* and *session* parameters have the
1693 same meaning as in :meth:`SSLContext.wrap_socket`.
1694
1695 .. versionchanged:: 3.6
1696 *session* argument was added.
Victor Stinner805b2622014-10-10 12:49:08 +02001697
Christian Heimes4df60f12017-09-15 20:26:05 +02001698 .. versionchanged:: 3.7
1699 The method returns on instance of :attr:`SSLContext.sslobject_class`
1700 instead of hard-coded :class:`SSLObject`.
1701
1702.. attribute:: SSLContext.sslobject_class
1703
1704 The return type of :meth:`SSLContext.wrap_bio`, defaults to
1705 :class:`SSLObject`. The attribute can be overridden on instance of class
1706 in order to return a custom subclass of :class:`SSLObject`.
1707
1708 .. versionadded:: 3.7
1709
Antoine Pitroub0182c82010-10-12 20:09:02 +00001710.. method:: SSLContext.session_stats()
1711
1712 Get statistics about the SSL sessions created or managed by this context.
Sanyam Khurana338cd832018-01-20 05:55:37 +05301713 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 +00001714 numeric values. For example, here is the total number of hits and misses
1715 in the session cache since the context was created::
1716
1717 >>> stats = context.session_stats()
1718 >>> stats['hits'], stats['misses']
1719 (0, 0)
1720
Christian Heimes1aa9a752013-12-02 02:41:19 +01001721.. attribute:: SSLContext.check_hostname
1722
Berker Peksag315e1042015-05-19 01:36:55 +03001723 Whether to match the peer cert's hostname with :func:`match_hostname` in
Christian Heimes1aa9a752013-12-02 02:41:19 +01001724 :meth:`SSLSocket.do_handshake`. The context's
1725 :attr:`~SSLContext.verify_mode` must be set to :data:`CERT_OPTIONAL` or
1726 :data:`CERT_REQUIRED`, and you must pass *server_hostname* to
Christian Heimese82c0342017-09-15 20:29:57 +02001727 :meth:`~SSLContext.wrap_socket` in order to match the hostname. Enabling
1728 hostname checking automatically sets :attr:`~SSLContext.verify_mode` from
1729 :data:`CERT_NONE` to :data:`CERT_REQUIRED`. It cannot be set back to
1730 :data:`CERT_NONE` as long as hostname checking is enabled.
Christian Heimes1aa9a752013-12-02 02:41:19 +01001731
1732 Example::
1733
1734 import socket, ssl
1735
Miss Islington (bot)e5d38de2018-02-20 22:02:18 -08001736 context = ssl.SSLContext()
Christian Heimes1aa9a752013-12-02 02:41:19 +01001737 context.verify_mode = ssl.CERT_REQUIRED
1738 context.check_hostname = True
1739 context.load_default_certs()
1740
1741 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Berker Peksag38bf87c2014-07-17 05:00:36 +03001742 ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
1743 ssl_sock.connect(('www.verisign.com', 443))
Christian Heimes1aa9a752013-12-02 02:41:19 +01001744
1745 .. versionadded:: 3.4
1746
Christian Heimese82c0342017-09-15 20:29:57 +02001747 .. versionchanged:: 3.7
1748
1749 :attr:`~SSLContext.verify_mode` is now automatically changed
1750 to :data:`CERT_REQUIRED` when hostname checking is enabled and
1751 :attr:`~SSLContext.verify_mode` is :data:`CERT_NONE`. Previously
1752 the same operation would have failed with a :exc:`ValueError`.
1753
Christian Heimes1aa9a752013-12-02 02:41:19 +01001754 .. note::
1755
1756 This features requires OpenSSL 0.9.8f or newer.
1757
Antoine Pitroub5218772010-05-21 09:56:06 +00001758.. attribute:: SSLContext.options
1759
1760 An integer representing the set of SSL options enabled on this context.
1761 The default value is :data:`OP_ALL`, but you can specify other options
1762 such as :data:`OP_NO_SSLv2` by ORing them together.
1763
1764 .. note::
1765 With versions of OpenSSL older than 0.9.8m, it is only possible
1766 to set options, not to clear them. Attempting to clear an option
1767 (by resetting the corresponding bits) will raise a ``ValueError``.
1768
Christian Heimes3aeacad2016-09-10 00:19:35 +02001769 .. versionchanged:: 3.6
1770 :attr:`SSLContext.options` returns :class:`Options` flags:
1771
Marco Buttu7b2491a2017-04-13 16:17:59 +02001772 >>> ssl.create_default_context().options # doctest: +SKIP
Christian Heimes3aeacad2016-09-10 00:19:35 +02001773 <Options.OP_ALL|OP_NO_SSLv3|OP_NO_SSLv2|OP_NO_COMPRESSION: 2197947391>
1774
Antoine Pitrou152efa22010-05-16 18:19:27 +00001775.. attribute:: SSLContext.protocol
1776
1777 The protocol version chosen when constructing the context. This attribute
1778 is read-only.
1779
Christian Heimes61d478c2018-01-27 15:51:38 +01001780.. attribute:: SSLContext.hostname_checks_common_name
1781
1782 Whether :attr:`~SSLContext.check_hostname` falls back to verify the cert's
1783 subject common name in the absence of a subject alternative name
1784 extension (default: true).
1785
1786 .. versionadded:: 3.7
1787
1788 .. note::
1789 Only writeable with OpenSSL 1.1.0 or higher.
1790
Christian Heimes22587792013-11-21 23:56:13 +01001791.. attribute:: SSLContext.verify_flags
1792
1793 The flags for certificate verification operations. You can set flags like
1794 :data:`VERIFY_CRL_CHECK_LEAF` by ORing them together. By default OpenSSL
1795 does neither require nor verify certificate revocation lists (CRLs).
Christian Heimes2427b502013-11-23 11:24:32 +01001796 Available only with openssl version 0.9.8+.
Christian Heimes22587792013-11-21 23:56:13 +01001797
1798 .. versionadded:: 3.4
1799
Christian Heimes3aeacad2016-09-10 00:19:35 +02001800 .. versionchanged:: 3.6
1801 :attr:`SSLContext.verify_flags` returns :class:`VerifyFlags` flags:
1802
Marco Buttu7b2491a2017-04-13 16:17:59 +02001803 >>> ssl.create_default_context().verify_flags # doctest: +SKIP
Christian Heimes3aeacad2016-09-10 00:19:35 +02001804 <VerifyFlags.VERIFY_X509_TRUSTED_FIRST: 32768>
1805
Antoine Pitrou152efa22010-05-16 18:19:27 +00001806.. attribute:: SSLContext.verify_mode
1807
1808 Whether to try to verify other peers' certificates and how to behave
1809 if verification fails. This attribute must be one of
1810 :data:`CERT_NONE`, :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`.
1811
Christian Heimes3aeacad2016-09-10 00:19:35 +02001812 .. versionchanged:: 3.6
1813 :attr:`SSLContext.verify_mode` returns :class:`VerifyMode` enum:
1814
1815 >>> ssl.create_default_context().verify_mode
1816 <VerifyMode.CERT_REQUIRED: 2>
Antoine Pitrou152efa22010-05-16 18:19:27 +00001817
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001818.. index:: single: certificates
1819
1820.. index:: single: X509 certificate
1821
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001822.. _ssl-certificates:
1823
Thomas Woutersed03b412007-08-28 21:37:11 +00001824Certificates
1825------------
1826
Georg Brandl7f01a132009-09-16 15:58:14 +00001827Certificates in general are part of a public-key / private-key system. In this
1828system, each *principal*, (which may be a machine, or a person, or an
1829organization) is assigned a unique two-part encryption key. One part of the key
1830is public, and is called the *public key*; the other part is kept secret, and is
1831called the *private key*. The two parts are related, in that if you encrypt a
1832message with one of the parts, you can decrypt it with the other part, and
1833**only** with the other part.
Thomas Woutersed03b412007-08-28 21:37:11 +00001834
Georg Brandl7f01a132009-09-16 15:58:14 +00001835A certificate contains information about two principals. It contains the name
1836of a *subject*, and the subject's public key. It also contains a statement by a
1837second principal, the *issuer*, that the subject is who he claims to be, and
1838that this is indeed the subject's public key. The issuer's statement is signed
1839with the issuer's private key, which only the issuer knows. However, anyone can
1840verify the issuer's statement by finding the issuer's public key, decrypting the
1841statement with it, and comparing it to the other information in the certificate.
1842The certificate also contains information about the time period over which it is
1843valid. This is expressed as two fields, called "notBefore" and "notAfter".
Thomas Woutersed03b412007-08-28 21:37:11 +00001844
Georg Brandl7f01a132009-09-16 15:58:14 +00001845In the Python use of certificates, a client or server can use a certificate to
1846prove who they are. The other side of a network connection can also be required
1847to produce a certificate, and that certificate can be validated to the
1848satisfaction of the client or server that requires such validation. The
1849connection attempt can be set to raise an exception if the validation fails.
1850Validation is done automatically, by the underlying OpenSSL framework; the
1851application need not concern itself with its mechanics. But the application
1852does usually need to provide sets of certificates to allow this process to take
1853place.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001854
Georg Brandl7f01a132009-09-16 15:58:14 +00001855Python uses files to contain certificates. They should be formatted as "PEM"
1856(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
1857and a footer line::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001858
1859 -----BEGIN CERTIFICATE-----
1860 ... (certificate in base64 PEM encoding) ...
1861 -----END CERTIFICATE-----
1862
Antoine Pitrou152efa22010-05-16 18:19:27 +00001863Certificate chains
1864^^^^^^^^^^^^^^^^^^
1865
Georg Brandl7f01a132009-09-16 15:58:14 +00001866The Python files which contain certificates can contain a sequence of
1867certificates, sometimes called a *certificate chain*. This chain should start
1868with the specific certificate for the principal who "is" the client or server,
1869and then the certificate for the issuer of that certificate, and then the
1870certificate for the issuer of *that* certificate, and so on up the chain till
1871you get to a certificate which is *self-signed*, that is, a certificate which
1872has the same subject and issuer, sometimes called a *root certificate*. The
1873certificates should just be concatenated together in the certificate file. For
1874example, suppose we had a three certificate chain, from our server certificate
1875to the certificate of the certification authority that signed our server
1876certificate, to the root certificate of the agency which issued the
1877certification authority's certificate::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001878
1879 -----BEGIN CERTIFICATE-----
1880 ... (certificate for your server)...
1881 -----END CERTIFICATE-----
1882 -----BEGIN CERTIFICATE-----
1883 ... (the certificate for the CA)...
1884 -----END CERTIFICATE-----
1885 -----BEGIN CERTIFICATE-----
1886 ... (the root certificate for the CA's issuer)...
1887 -----END CERTIFICATE-----
1888
Antoine Pitrou152efa22010-05-16 18:19:27 +00001889CA certificates
1890^^^^^^^^^^^^^^^
1891
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001892If you are going to require validation of the other side of the connection's
1893certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandl7f01a132009-09-16 15:58:14 +00001894chains for each issuer you are willing to trust. Again, this file just contains
1895these chains concatenated together. For validation, Python will use the first
Donald Stufft41374652014-03-24 19:26:03 -04001896chain it finds in the file which matches. The platform's certificates file can
1897be used by calling :meth:`SSLContext.load_default_certs`, this is done
1898automatically with :func:`.create_default_context`.
Thomas Woutersed03b412007-08-28 21:37:11 +00001899
Antoine Pitrou152efa22010-05-16 18:19:27 +00001900Combined key and certificate
1901^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1902
1903Often the private key is stored in the same file as the certificate; in this
1904case, only the ``certfile`` parameter to :meth:`SSLContext.load_cert_chain`
1905and :func:`wrap_socket` needs to be passed. If the private key is stored
1906with the certificate, it should come before the first certificate in
1907the certificate chain::
1908
1909 -----BEGIN RSA PRIVATE KEY-----
1910 ... (private key in base64 encoding) ...
1911 -----END RSA PRIVATE KEY-----
1912 -----BEGIN CERTIFICATE-----
1913 ... (certificate in base64 PEM encoding) ...
1914 -----END CERTIFICATE-----
1915
1916Self-signed certificates
1917^^^^^^^^^^^^^^^^^^^^^^^^
1918
Georg Brandl7f01a132009-09-16 15:58:14 +00001919If you are going to create a server that provides SSL-encrypted connection
1920services, you will need to acquire a certificate for that service. There are
1921many ways of acquiring appropriate certificates, such as buying one from a
1922certification authority. Another common practice is to generate a self-signed
1923certificate. The simplest way to do this is with the OpenSSL package, using
1924something like the following::
Thomas Woutersed03b412007-08-28 21:37:11 +00001925
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001926 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
1927 Generating a 1024 bit RSA private key
1928 .......++++++
1929 .............................++++++
1930 writing new private key to 'cert.pem'
1931 -----
1932 You are about to be asked to enter information that will be incorporated
1933 into your certificate request.
1934 What you are about to enter is what is called a Distinguished Name or a DN.
1935 There are quite a few fields but you can leave some blank
1936 For some fields there will be a default value,
1937 If you enter '.', the field will be left blank.
1938 -----
1939 Country Name (2 letter code) [AU]:US
1940 State or Province Name (full name) [Some-State]:MyState
1941 Locality Name (eg, city) []:Some City
1942 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
1943 Organizational Unit Name (eg, section) []:My Group
1944 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
1945 Email Address []:ops@myserver.mygroup.myorganization.com
1946 %
Thomas Woutersed03b412007-08-28 21:37:11 +00001947
Georg Brandl7f01a132009-09-16 15:58:14 +00001948The disadvantage of a self-signed certificate is that it is its own root
1949certificate, and no one else will have it in their cache of known (and trusted)
1950root certificates.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001951
1952
Thomas Woutersed03b412007-08-28 21:37:11 +00001953Examples
1954--------
1955
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001956Testing for SSL support
1957^^^^^^^^^^^^^^^^^^^^^^^
1958
Georg Brandl7f01a132009-09-16 15:58:14 +00001959To test for the presence of SSL support in a Python installation, user code
1960should use the following idiom::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001961
1962 try:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001963 import ssl
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001964 except ImportError:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001965 pass
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001966 else:
Serhiy Storchakadba90392016-05-10 12:01:23 +03001967 ... # do something that requires SSL support
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001968
1969Client-side operation
1970^^^^^^^^^^^^^^^^^^^^^
1971
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001972This example creates a SSL context with the recommended security settings
1973for client sockets, including automatic certificate verification::
Thomas Woutersed03b412007-08-28 21:37:11 +00001974
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001975 >>> context = ssl.create_default_context()
Thomas Woutersed03b412007-08-28 21:37:11 +00001976
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001977If you prefer to tune security settings yourself, you might create
1978a context from scratch (but beware that you might not get the settings
1979right)::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001980
Miss Islington (bot)e5d38de2018-02-20 22:02:18 -08001981 >>> context = ssl.SSLContext()
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001982 >>> context.verify_mode = ssl.CERT_REQUIRED
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001983 >>> context.check_hostname = True
Antoine Pitrou152efa22010-05-16 18:19:27 +00001984 >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
1985
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001986(this snippet assumes your operating system places a bundle of all CA
1987certificates in ``/etc/ssl/certs/ca-bundle.crt``; if not, you'll get an
1988error and have to adjust the location)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001989
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001990When you use the context to connect to a server, :const:`CERT_REQUIRED`
Antoine Pitrou152efa22010-05-16 18:19:27 +00001991validates the server certificate: it ensures that the server certificate
1992was signed with one of the CA certificates, and checks the signature for
1993correctness::
1994
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001995 >>> conn = context.wrap_socket(socket.socket(socket.AF_INET),
1996 ... server_hostname="www.python.org")
1997 >>> conn.connect(("www.python.org", 443))
Antoine Pitrou152efa22010-05-16 18:19:27 +00001998
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001999You may then fetch the certificate::
Antoine Pitrou152efa22010-05-16 18:19:27 +00002000
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002001 >>> cert = conn.getpeercert()
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002002
2003Visual inspection shows that the certificate does identify the desired service
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002004(that is, the HTTPS host ``www.python.org``)::
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002005
2006 >>> pprint.pprint(cert)
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002007 {'OCSP': ('http://ocsp.digicert.com',),
2008 'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',),
2009 'crlDistributionPoints': ('http://crl3.digicert.com/sha2-ev-server-g1.crl',
2010 'http://crl4.digicert.com/sha2-ev-server-g1.crl'),
2011 'issuer': ((('countryName', 'US'),),
2012 (('organizationName', 'DigiCert Inc'),),
2013 (('organizationalUnitName', 'www.digicert.com'),),
2014 (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),)),
2015 'notAfter': 'Sep 9 12:00:00 2016 GMT',
2016 'notBefore': 'Sep 5 00:00:00 2014 GMT',
2017 'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26',
2018 'subject': ((('businessCategory', 'Private Organization'),),
2019 (('1.3.6.1.4.1.311.60.2.1.3', 'US'),),
2020 (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),),
2021 (('serialNumber', '3359300'),),
2022 (('streetAddress', '16 Allen Rd'),),
2023 (('postalCode', '03894-4801'),),
2024 (('countryName', 'US'),),
2025 (('stateOrProvinceName', 'NH'),),
2026 (('localityName', 'Wolfeboro,'),),
2027 (('organizationName', 'Python Software Foundation'),),
2028 (('commonName', 'www.python.org'),)),
2029 'subjectAltName': (('DNS', 'www.python.org'),
2030 ('DNS', 'python.org'),
2031 ('DNS', 'pypi.python.org'),
2032 ('DNS', 'docs.python.org'),
2033 ('DNS', 'testpypi.python.org'),
2034 ('DNS', 'bugs.python.org'),
2035 ('DNS', 'wiki.python.org'),
2036 ('DNS', 'hg.python.org'),
2037 ('DNS', 'mail.python.org'),
2038 ('DNS', 'packaging.python.org'),
2039 ('DNS', 'pythonhosted.org'),
2040 ('DNS', 'www.pythonhosted.org'),
2041 ('DNS', 'test.pythonhosted.org'),
2042 ('DNS', 'us.pycon.org'),
2043 ('DNS', 'id.python.org')),
Antoine Pitrou441ae042012-01-06 20:06:15 +01002044 'version': 3}
Antoine Pitrou152efa22010-05-16 18:19:27 +00002045
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002046Now the SSL channel is established and the certificate verified, you can
2047proceed to talk with the server::
Antoine Pitrou152efa22010-05-16 18:19:27 +00002048
Antoine Pitroudab64262010-09-19 13:31:06 +00002049 >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n")
2050 >>> pprint.pprint(conn.recv(1024).split(b"\r\n"))
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002051 [b'HTTP/1.1 200 OK',
2052 b'Date: Sat, 18 Oct 2014 18:27:20 GMT',
2053 b'Server: nginx',
2054 b'Content-Type: text/html; charset=utf-8',
2055 b'X-Frame-Options: SAMEORIGIN',
2056 b'Content-Length: 45679',
2057 b'Accept-Ranges: bytes',
2058 b'Via: 1.1 varnish',
2059 b'Age: 2188',
2060 b'X-Served-By: cache-lcy1134-LCY',
2061 b'X-Cache: HIT',
2062 b'X-Cache-Hits: 11',
2063 b'Vary: Cookie',
2064 b'Strict-Transport-Security: max-age=63072000; includeSubDomains',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002065 b'Connection: close',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002066 b'',
2067 b'']
2068
Antoine Pitrou152efa22010-05-16 18:19:27 +00002069See the discussion of :ref:`ssl-security` below.
2070
2071
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002072Server-side operation
2073^^^^^^^^^^^^^^^^^^^^^
2074
Antoine Pitrou152efa22010-05-16 18:19:27 +00002075For server operation, typically you'll need to have a server certificate, and
2076private key, each in a file. You'll first create a context holding the key
2077and the certificate, so that clients can check your authenticity. Then
2078you'll open a socket, bind it to a port, call :meth:`listen` on it, and start
2079waiting for clients to connect::
Thomas Woutersed03b412007-08-28 21:37:11 +00002080
2081 import socket, ssl
2082
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002083 context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
Antoine Pitrou152efa22010-05-16 18:19:27 +00002084 context.load_cert_chain(certfile="mycertfile", keyfile="mykeyfile")
2085
Thomas Woutersed03b412007-08-28 21:37:11 +00002086 bindsocket = socket.socket()
2087 bindsocket.bind(('myaddr.mydomain.com', 10023))
2088 bindsocket.listen(5)
2089
Antoine Pitrou152efa22010-05-16 18:19:27 +00002090When a client connects, you'll call :meth:`accept` on the socket to get the
2091new socket from the other end, and use the context's :meth:`SSLContext.wrap_socket`
2092method to create a server-side SSL socket for the connection::
Thomas Woutersed03b412007-08-28 21:37:11 +00002093
2094 while True:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002095 newsocket, fromaddr = bindsocket.accept()
2096 connstream = context.wrap_socket(newsocket, server_side=True)
2097 try:
2098 deal_with_client(connstream)
2099 finally:
Antoine Pitroub205d582011-01-02 22:09:27 +00002100 connstream.shutdown(socket.SHUT_RDWR)
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002101 connstream.close()
Thomas Woutersed03b412007-08-28 21:37:11 +00002102
Antoine Pitrou152efa22010-05-16 18:19:27 +00002103Then you'll read data from the ``connstream`` and do something with it till you
Georg Brandl7f01a132009-09-16 15:58:14 +00002104are finished with the client (or the client is finished with you)::
Thomas Woutersed03b412007-08-28 21:37:11 +00002105
2106 def deal_with_client(connstream):
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002107 data = connstream.recv(1024)
2108 # empty data means the client is finished with us
2109 while data:
2110 if not do_something(connstream, data):
2111 # we'll assume do_something returns False
2112 # when we're finished with client
2113 break
2114 data = connstream.recv(1024)
2115 # finished with client
Thomas Woutersed03b412007-08-28 21:37:11 +00002116
Antoine Pitrou152efa22010-05-16 18:19:27 +00002117And go back to listening for new client connections (of course, a real server
2118would probably handle each client connection in a separate thread, or put
Victor Stinner29611452014-10-10 12:52:43 +02002119the sockets in :ref:`non-blocking mode <ssl-nonblocking>` and use an event loop).
Antoine Pitrou152efa22010-05-16 18:19:27 +00002120
2121
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002122.. _ssl-nonblocking:
2123
2124Notes on non-blocking sockets
2125-----------------------------
2126
Antoine Pitroub4bebda2014-04-29 10:03:28 +02002127SSL sockets behave slightly different than regular sockets in
2128non-blocking mode. When working with non-blocking sockets, there are
2129thus several things you need to be aware of:
2130
2131- Most :class:`SSLSocket` methods will raise either
2132 :exc:`SSLWantWriteError` or :exc:`SSLWantReadError` instead of
2133 :exc:`BlockingIOError` if an I/O operation would
2134 block. :exc:`SSLWantReadError` will be raised if a read operation on
2135 the underlying socket is necessary, and :exc:`SSLWantWriteError` for
2136 a write operation on the underlying socket. Note that attempts to
2137 *write* to an SSL socket may require *reading* from the underlying
2138 socket first, and attempts to *read* from the SSL socket may require
2139 a prior *write* to the underlying socket.
2140
2141 .. versionchanged:: 3.5
2142
2143 In earlier Python versions, the :meth:`!SSLSocket.send` method
2144 returned zero instead of raising :exc:`SSLWantWriteError` or
2145 :exc:`SSLWantReadError`.
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002146
2147- Calling :func:`~select.select` tells you that the OS-level socket can be
2148 read from (or written to), but it does not imply that there is sufficient
2149 data at the upper SSL layer. For example, only part of an SSL frame might
2150 have arrived. Therefore, you must be ready to handle :meth:`SSLSocket.recv`
2151 and :meth:`SSLSocket.send` failures, and retry after another call to
2152 :func:`~select.select`.
2153
Antoine Pitrou75e03382014-05-18 00:55:13 +02002154- Conversely, since the SSL layer has its own framing, a SSL socket may
2155 still have data available for reading without :func:`~select.select`
2156 being aware of it. Therefore, you should first call
2157 :meth:`SSLSocket.recv` to drain any potentially available data, and then
2158 only block on a :func:`~select.select` call if still necessary.
2159
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002160 (of course, similar provisions apply when using other primitives such as
Antoine Pitrou75e03382014-05-18 00:55:13 +02002161 :func:`~select.poll`, or those in the :mod:`selectors` module)
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002162
2163- The SSL handshake itself will be non-blocking: the
2164 :meth:`SSLSocket.do_handshake` method has to be retried until it returns
2165 successfully. Here is a synopsis using :func:`~select.select` to wait for
2166 the socket's readiness::
2167
2168 while True:
2169 try:
2170 sock.do_handshake()
2171 break
Antoine Pitrou873bf262011-10-27 23:59:03 +02002172 except ssl.SSLWantReadError:
2173 select.select([sock], [], [])
2174 except ssl.SSLWantWriteError:
2175 select.select([], [sock], [])
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002176
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002177.. seealso::
2178
Victor Stinner29611452014-10-10 12:52:43 +02002179 The :mod:`asyncio` module supports :ref:`non-blocking SSL sockets
2180 <ssl-nonblocking>` and provides a
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002181 higher level API. It polls for events using the :mod:`selectors` module and
2182 handles :exc:`SSLWantWriteError`, :exc:`SSLWantReadError` and
2183 :exc:`BlockingIOError` exceptions. It runs the SSL handshake asynchronously
2184 as well.
2185
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002186
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002187Memory BIO Support
2188------------------
2189
2190.. versionadded:: 3.5
2191
2192Ever since the SSL module was introduced in Python 2.6, the :class:`SSLSocket`
2193class has provided two related but distinct areas of functionality:
2194
2195- SSL protocol handling
2196- Network IO
2197
2198The network IO API is identical to that provided by :class:`socket.socket`,
2199from which :class:`SSLSocket` also inherits. This allows an SSL socket to be
2200used as a drop-in replacement for a regular socket, making it very easy to add
2201SSL support to an existing application.
2202
2203Combining SSL protocol handling and network IO usually works well, but there
2204are some cases where it doesn't. An example is async IO frameworks that want to
2205use a different IO multiplexing model than the "select/poll on a file
2206descriptor" (readiness based) model that is assumed by :class:`socket.socket`
2207and by the internal OpenSSL socket IO routines. This is mostly relevant for
2208platforms like Windows where this model is not efficient. For this purpose, a
2209reduced scope variant of :class:`SSLSocket` called :class:`SSLObject` is
2210provided.
2211
2212.. class:: SSLObject
2213
2214 A reduced-scope variant of :class:`SSLSocket` representing an SSL protocol
Victor Stinner2debf152014-10-10 13:04:08 +02002215 instance that does not contain any network IO methods. This class is
2216 typically used by framework authors that want to implement asynchronous IO
2217 for SSL through memory buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002218
Victor Stinner2debf152014-10-10 13:04:08 +02002219 This class implements an interface on top of a low-level SSL object as
2220 implemented by OpenSSL. This object captures the state of an SSL connection
2221 but does not provide any network IO itself. IO needs to be performed through
2222 separate "BIO" objects which are OpenSSL's IO abstraction layer.
2223
2224 An :class:`SSLObject` instance can be created using the
2225 :meth:`~SSLContext.wrap_bio` method. This method will create the
2226 :class:`SSLObject` instance and bind it to a pair of BIOs. The *incoming*
2227 BIO is used to pass data from Python to the SSL protocol instance, while the
2228 *outgoing* BIO is used to pass data the other way around.
2229
2230 The following methods are available:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002231
Victor Stinner805b2622014-10-10 12:49:08 +02002232 - :attr:`~SSLSocket.context`
2233 - :attr:`~SSLSocket.server_side`
2234 - :attr:`~SSLSocket.server_hostname`
Christian Heimes99a65702016-09-10 23:44:53 +02002235 - :attr:`~SSLSocket.session`
2236 - :attr:`~SSLSocket.session_reused`
Victor Stinner805b2622014-10-10 12:49:08 +02002237 - :meth:`~SSLSocket.read`
2238 - :meth:`~SSLSocket.write`
2239 - :meth:`~SSLSocket.getpeercert`
2240 - :meth:`~SSLSocket.selected_npn_protocol`
2241 - :meth:`~SSLSocket.cipher`
Benjamin Peterson4cb17812015-01-07 11:14:26 -06002242 - :meth:`~SSLSocket.shared_ciphers`
Victor Stinner805b2622014-10-10 12:49:08 +02002243 - :meth:`~SSLSocket.compression`
2244 - :meth:`~SSLSocket.pending`
2245 - :meth:`~SSLSocket.do_handshake`
2246 - :meth:`~SSLSocket.unwrap`
2247 - :meth:`~SSLSocket.get_channel_binding`
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002248
Victor Stinner2debf152014-10-10 13:04:08 +02002249 When compared to :class:`SSLSocket`, this object lacks the following
2250 features:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002251
Benjamin Petersonfdfca5f2017-06-11 00:24:38 -07002252 - Any form of network IO; ``recv()`` and ``send()`` read and write only to
2253 the underlying :class:`MemoryBIO` buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002254
Victor Stinner2debf152014-10-10 13:04:08 +02002255 - There is no *do_handshake_on_connect* machinery. You must always manually
2256 call :meth:`~SSLSocket.do_handshake` to start the handshake.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002257
Victor Stinner2debf152014-10-10 13:04:08 +02002258 - There is no handling of *suppress_ragged_eofs*. All end-of-file conditions
2259 that are in violation of the protocol are reported via the
2260 :exc:`SSLEOFError` exception.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002261
Victor Stinner2debf152014-10-10 13:04:08 +02002262 - The method :meth:`~SSLSocket.unwrap` call does not return anything,
2263 unlike for an SSL socket where it returns the underlying socket.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002264
Victor Stinner2debf152014-10-10 13:04:08 +02002265 - The *server_name_callback* callback passed to
2266 :meth:`SSLContext.set_servername_callback` will get an :class:`SSLObject`
2267 instance instead of a :class:`SSLSocket` instance as its first parameter.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002268
Victor Stinner2debf152014-10-10 13:04:08 +02002269 Some notes related to the use of :class:`SSLObject`:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002270
Victor Stinner2debf152014-10-10 13:04:08 +02002271 - All IO on an :class:`SSLObject` is :ref:`non-blocking <ssl-nonblocking>`.
2272 This means that for example :meth:`~SSLSocket.read` will raise an
2273 :exc:`SSLWantReadError` if it needs more data than the incoming BIO has
2274 available.
2275
2276 - There is no module-level ``wrap_bio()`` call like there is for
2277 :meth:`~SSLContext.wrap_socket`. An :class:`SSLObject` is always created
2278 via an :class:`SSLContext`.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002279
Victor Stinner805b2622014-10-10 12:49:08 +02002280An SSLObject communicates with the outside world using memory buffers. The
2281class :class:`MemoryBIO` provides a memory buffer that can be used for this
2282purpose. It wraps an OpenSSL memory BIO (Basic IO) object:
2283
2284.. class:: MemoryBIO
2285
2286 A memory buffer that can be used to pass data between Python and an SSL
2287 protocol instance.
2288
2289 .. attribute:: MemoryBIO.pending
2290
2291 Return the number of bytes currently in the memory buffer.
2292
2293 .. attribute:: MemoryBIO.eof
2294
2295 A boolean indicating whether the memory BIO is current at the end-of-file
2296 position.
2297
2298 .. method:: MemoryBIO.read(n=-1)
2299
2300 Read up to *n* bytes from the memory buffer. If *n* is not specified or
2301 negative, all bytes are returned.
2302
2303 .. method:: MemoryBIO.write(buf)
2304
2305 Write the bytes from *buf* to the memory BIO. The *buf* argument must be an
2306 object supporting the buffer protocol.
2307
2308 The return value is the number of bytes written, which is always equal to
2309 the length of *buf*.
2310
2311 .. method:: MemoryBIO.write_eof()
2312
2313 Write an EOF marker to the memory BIO. After this method has been called, it
2314 is illegal to call :meth:`~MemoryBIO.write`. The attribute :attr:`eof` will
2315 become true after all data currently in the buffer has been read.
2316
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002317
Christian Heimes99a65702016-09-10 23:44:53 +02002318SSL session
2319-----------
2320
2321.. versionadded:: 3.6
2322
2323.. class:: SSLSession
2324
2325 Session object used by :attr:`~SSLSocket.session`.
2326
2327 .. attribute:: id
2328 .. attribute:: time
2329 .. attribute:: timeout
2330 .. attribute:: ticket_lifetime_hint
2331 .. attribute:: has_ticket
2332
2333
Antoine Pitrou152efa22010-05-16 18:19:27 +00002334.. _ssl-security:
2335
2336Security considerations
2337-----------------------
2338
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002339Best defaults
2340^^^^^^^^^^^^^
Antoine Pitrou152efa22010-05-16 18:19:27 +00002341
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002342For **client use**, if you don't have any special requirements for your
2343security policy, it is highly recommended that you use the
2344:func:`create_default_context` function to create your SSL context.
2345It will load the system's trusted CA certificates, enable certificate
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002346validation and hostname checking, and try to choose reasonably secure
2347protocol and cipher settings.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002348
2349For example, here is how you would use the :class:`smtplib.SMTP` class to
2350create a trusted, secure connection to a SMTP server::
2351
2352 >>> import ssl, smtplib
2353 >>> smtp = smtplib.SMTP("mail.python.org", port=587)
2354 >>> context = ssl.create_default_context()
2355 >>> smtp.starttls(context=context)
2356 (220, b'2.0.0 Ready to start TLS')
2357
2358If a client certificate is needed for the connection, it can be added with
2359:meth:`SSLContext.load_cert_chain`.
2360
2361By contrast, if you create the SSL context by calling the :class:`SSLContext`
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002362constructor yourself, it will not have certificate validation nor hostname
2363checking enabled by default. If you do so, please read the paragraphs below
2364to achieve a good security level.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002365
2366Manual settings
2367^^^^^^^^^^^^^^^
2368
2369Verifying certificates
2370''''''''''''''''''''''
2371
Donald Stufft8b852f12014-05-20 12:58:38 -04002372When calling the :class:`SSLContext` constructor directly,
Antoine Pitrou152efa22010-05-16 18:19:27 +00002373:const:`CERT_NONE` is the default. Since it does not authenticate the other
2374peer, it can be insecure, especially in client mode where most of time you
2375would like to ensure the authenticity of the server you're talking to.
2376Therefore, when in client mode, it is highly recommended to use
2377:const:`CERT_REQUIRED`. However, it is in itself not sufficient; you also
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002378have to check that the server certificate, which can be obtained by calling
2379:meth:`SSLSocket.getpeercert`, matches the desired service. For many
2380protocols and applications, the service can be identified by the hostname;
Christian Heimes1aa9a752013-12-02 02:41:19 +01002381in this case, the :func:`match_hostname` function can be used. This common
2382check is automatically performed when :attr:`SSLContext.check_hostname` is
2383enabled.
Antoine Pitrou152efa22010-05-16 18:19:27 +00002384
Christian Heimes61d478c2018-01-27 15:51:38 +01002385.. versionchanged:: 3.7
2386 Hostname matchings is now performed by OpenSSL. Python no longer uses
2387 :func:`match_hostname`.
2388
Antoine Pitrou152efa22010-05-16 18:19:27 +00002389In server mode, if you want to authenticate your clients using the SSL layer
2390(rather than using a higher-level authentication mechanism), you'll also have
2391to specify :const:`CERT_REQUIRED` and similarly check the client certificate.
2392
2393 .. note::
2394
2395 In client mode, :const:`CERT_OPTIONAL` and :const:`CERT_REQUIRED` are
2396 equivalent unless anonymous ciphers are enabled (they are disabled
2397 by default).
Thomas Woutersed03b412007-08-28 21:37:11 +00002398
Antoine Pitroub5218772010-05-21 09:56:06 +00002399Protocol versions
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002400'''''''''''''''''
Antoine Pitroub5218772010-05-21 09:56:06 +00002401
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002402SSL versions 2 and 3 are considered insecure and are therefore dangerous to
2403use. If you want maximum compatibility between clients and servers, it is
Christian Heimes5fe668c2016-09-12 00:01:11 +02002404recommended to use :const:`PROTOCOL_TLS_CLIENT` or
2405:const:`PROTOCOL_TLS_SERVER` as the protocol version. SSLv2 and SSLv3 are
2406disabled by default.
Antoine Pitroub5218772010-05-21 09:56:06 +00002407
Marco Buttu7b2491a2017-04-13 16:17:59 +02002408::
2409
Christian Heimesc4d2e502016-09-12 01:14:35 +02002410 >>> client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
2411 >>> client_context.options |= ssl.OP_NO_TLSv1
2412 >>> client_context.options |= ssl.OP_NO_TLSv1_1
Christian Heimes5fe668c2016-09-12 00:01:11 +02002413
Antoine Pitroub5218772010-05-21 09:56:06 +00002414
Christian Heimes598894f2016-09-05 23:19:05 +02002415The SSL context created above will only allow TLSv1.2 and later (if
Christian Heimes5fe668c2016-09-12 00:01:11 +02002416supported by your system) connections to a server. :const:`PROTOCOL_TLS_CLIENT`
2417implies certificate validation and hostname checks by default. You have to
2418load certificates into the context.
2419
Antoine Pitroub5218772010-05-21 09:56:06 +00002420
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002421Cipher selection
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002422''''''''''''''''
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002423
2424If you have advanced security requirements, fine-tuning of the ciphers
2425enabled when negotiating a SSL session is possible through the
2426:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
2427ssl module disables certain weak ciphers by default, but you may want
Donald Stufft79ccaa22014-03-21 21:33:34 -04002428to further restrict the cipher choice. Be sure to read OpenSSL's documentation
Sanyam Khurana338cd832018-01-20 05:55:37 +05302429about the `cipher list format <https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-LIST-FORMAT>`_.
Christian Heimes5fe668c2016-09-12 00:01:11 +02002430If you want to check which ciphers are enabled by a given cipher list, use
2431:meth:`SSLContext.get_ciphers` or the ``openssl ciphers`` command on your
2432system.
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002433
Antoine Pitrou9eefe912013-11-17 15:35:33 +01002434Multi-processing
2435^^^^^^^^^^^^^^^^
2436
2437If using this module as part of a multi-processed application (using,
2438for example the :mod:`multiprocessing` or :mod:`concurrent.futures` modules),
2439be aware that OpenSSL's internal random number generator does not properly
2440handle forked processes. Applications must change the PRNG state of the
2441parent process if they use any SSL feature with :func:`os.fork`. Any
2442successful call of :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or
2443:func:`~ssl.RAND_pseudo_bytes` is sufficient.
2444
Georg Brandl48310cd2009-01-03 21:18:54 +00002445
Miss Islington (bot)01d9c232018-02-24 14:04:27 -08002446.. ssl-libressl:
2447
2448LibreSSL support
2449----------------
2450
2451LibreSSL is a fork of OpenSSL 1.0.1. The ssl module has limited support for
2452LibreSSL. Some features are not available when the ssl module is compiled
2453with LibreSSL.
2454
2455* LibreSSL >= 2.6.1 no longer supports NPN. The methods
2456 :meth:`SSLContext.set_npn_protocols` and
2457 :meth:`SSLSocket.selected_npn_protocol` are not available.
2458* :meth:`SSLContext.set_default_verify_paths` ignores the env vars
2459 :envvar:`SSL_CERT_FILE` and :envvar:`SSL_CERT_PATH` although
2460 :func:`get_default_verify_paths` still reports them.
2461
2462
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002463.. seealso::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002464
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002465 Class :class:`socket.socket`
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002466 Documentation of underlying :mod:`socket` class
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002467
Georg Brandl5d941342016-02-26 19:37:12 +01002468 `SSL/TLS Strong Encryption: An Introduction <https://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002469 Intro from the Apache webserver documentation
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002470
Georg Brandl5d941342016-02-26 19:37:12 +01002471 `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 +00002472 Steve Kent
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002473
Sanyam Khurana338cd832018-01-20 05:55:37 +05302474 `RFC 4086: Randomness Requirements for Security <https://datatracker.ietf.org/doc/rfc4086/>`_
Chandan Kumar63c2c8a2017-06-09 15:13:58 +05302475 Donald E., Jeffrey I. Schiller
Thomas Wouters89d996e2007-09-08 17:39:28 +00002476
Sanyam Khurana338cd832018-01-20 05:55:37 +05302477 `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 +05302478 D. Cooper
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002479
Georg Brandl5d941342016-02-26 19:37:12 +01002480 `RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 <https://tools.ietf.org/html/rfc5246>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002481 T. Dierks et. al.
2482
Georg Brandl5d941342016-02-26 19:37:12 +01002483 `RFC 6066: Transport Layer Security (TLS) Extensions <https://tools.ietf.org/html/rfc6066>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002484 D. Eastlake
2485
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002486 `IANA TLS: Transport Layer Security (TLS) Parameters <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002487 IANA
Christian Heimesad0ffa02017-09-06 16:19:56 -07002488
2489 `RFC 7525: Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) <https://tools.ietf.org/html/rfc7525>`_
2490 IETF
2491
2492 `Mozilla's Server Side TLS recommendations <https://wiki.mozilla.org/Security/Server_Side_TLS>`_
2493 Mozilla