blob: 7371024dce4e30cb97e2e77ceb5e8bd25beca480 [file] [log] [blame]
Antoine Pitroue1bc8982011-01-02 22:12:22 +00001:mod:`ssl` --- TLS/SSL wrapper for socket objects
2=================================================
Thomas Woutersed03b412007-08-28 21:37:11 +00003
4.. module:: ssl
Antoine Pitroue1bc8982011-01-02 22:12:22 +00005 :synopsis: TLS/SSL wrapper for socket objects
Thomas Wouters47b49bf2007-08-30 22:15:33 +00006
7.. moduleauthor:: Bill Janssen <bill.janssen@gmail.com>
Thomas Wouters47b49bf2007-08-30 22:15:33 +00008.. sectionauthor:: Bill Janssen <bill.janssen@gmail.com>
9
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040010**Source code:** :source:`Lib/ssl.py`
Thomas Woutersed03b412007-08-28 21:37:11 +000011
Thomas Wouters1b7f8912007-09-19 03:06:30 +000012.. index:: single: OpenSSL; (use in module ssl)
13
14.. index:: TLS, SSL, Transport Layer Security, Secure Sockets Layer
15
Raymond Hettinger469271d2011-01-27 20:38:46 +000016--------------
17
Georg Brandl7f01a132009-09-16 15:58:14 +000018This module provides access to Transport Layer Security (often known as "Secure
19Sockets Layer") encryption and peer authentication facilities for network
20sockets, both client-side and server-side. This module uses the OpenSSL
21library. It is available on all modern Unix systems, Windows, Mac OS X, and
22probably additional platforms, as long as OpenSSL is installed on that platform.
Thomas Woutersed03b412007-08-28 21:37:11 +000023
24.. note::
25
Georg Brandl7f01a132009-09-16 15:58:14 +000026 Some behavior may be platform dependent, since calls are made to the
27 operating system socket APIs. The installed version of OpenSSL may also
Antoine Pitrou2463e5f2013-03-28 22:24:43 +010028 cause variations in behavior. For example, TLSv1.1 and TLSv1.2 come with
29 openssl version 1.0.1.
Thomas Woutersed03b412007-08-28 21:37:11 +000030
Christian Heimes3046fe42013-10-29 21:08:56 +010031.. warning::
Antoine Pitrou9eefe912013-11-17 15:35:33 +010032 Don't use this module without reading the :ref:`ssl-security`. Doing so
33 may lead to a false sense of security, as the default settings of the
34 ssl module are not necessarily appropriate for your application.
Christian Heimes3046fe42013-10-29 21:08:56 +010035
Christian Heimes3046fe42013-10-29 21:08:56 +010036
Georg Brandl7f01a132009-09-16 15:58:14 +000037This section documents the objects and functions in the ``ssl`` module; for more
38general information about TLS, SSL, and certificates, the reader is referred to
39the documents in the "See Also" section at the bottom.
Thomas Woutersed03b412007-08-28 21:37:11 +000040
Georg Brandl7f01a132009-09-16 15:58:14 +000041This module provides a class, :class:`ssl.SSLSocket`, which is derived from the
42:class:`socket.socket` type, and provides a socket-like wrapper that also
43encrypts and decrypts the data going over the socket with SSL. It supports
Antoine Pitroudab64262010-09-19 13:31:06 +000044additional methods such as :meth:`getpeercert`, which retrieves the
45certificate of the other side of the connection, and :meth:`cipher`,which
46retrieves the cipher being used for the secure connection.
Thomas Woutersed03b412007-08-28 21:37:11 +000047
Antoine Pitrou152efa22010-05-16 18:19:27 +000048For more sophisticated applications, the :class:`ssl.SSLContext` class
49helps manage settings and certificates, which can then be inherited
50by SSL sockets created through the :meth:`SSLContext.wrap_socket` method.
51
Christian Heimes01113fa2016-09-05 23:23:24 +020052.. versionchanged:: 3.6
53
54 OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported.
55 In the future the ssl module will require at least OpenSSL 1.0.2 or
56 1.1.0.
57
Antoine Pitrou152efa22010-05-16 18:19:27 +000058
Thomas Wouters1b7f8912007-09-19 03:06:30 +000059Functions, Constants, and Exceptions
60------------------------------------
61
62.. exception:: SSLError
63
Antoine Pitrou59fdd672010-10-08 10:37:08 +000064 Raised to signal an error from the underlying SSL implementation
65 (currently provided by the OpenSSL library). This signifies some
66 problem in the higher-level encryption and authentication layer that's
67 superimposed on the underlying network connection. This error
Antoine Pitrou5574c302011-10-12 17:53:43 +020068 is a subtype of :exc:`OSError`. The error code and message of
69 :exc:`SSLError` instances are provided by the OpenSSL library.
70
71 .. versionchanged:: 3.3
72 :exc:`SSLError` used to be a subtype of :exc:`socket.error`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +000073
Antoine Pitrou3b36fb12012-06-22 21:11:52 +020074 .. attribute:: library
75
76 A string mnemonic designating the OpenSSL submodule in which the error
77 occurred, such as ``SSL``, ``PEM`` or ``X509``. The range of possible
78 values depends on the OpenSSL version.
79
80 .. versionadded:: 3.3
81
82 .. attribute:: reason
83
84 A string mnemonic designating the reason this error occurred, for
85 example ``CERTIFICATE_VERIFY_FAILED``. The range of possible
86 values depends on the OpenSSL version.
87
88 .. versionadded:: 3.3
89
Antoine Pitrou41032a62011-10-27 23:56:55 +020090.. exception:: SSLZeroReturnError
91
92 A subclass of :exc:`SSLError` raised when trying to read or write and
93 the SSL connection has been closed cleanly. Note that this doesn't
94 mean that the underlying transport (read TCP) has been closed.
95
96 .. versionadded:: 3.3
97
98.. exception:: SSLWantReadError
99
100 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
101 <ssl-nonblocking>` when trying to read or write data, but more data needs
102 to be received on the underlying TCP transport before the request can be
103 fulfilled.
104
105 .. versionadded:: 3.3
106
107.. exception:: SSLWantWriteError
108
109 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
110 <ssl-nonblocking>` when trying to read or write data, but more data needs
111 to be sent on the underlying TCP transport before the request can be
112 fulfilled.
113
114 .. versionadded:: 3.3
115
116.. exception:: SSLSyscallError
117
118 A subclass of :exc:`SSLError` raised when a system error was encountered
119 while trying to fulfill an operation on a SSL socket. Unfortunately,
120 there is no easy way to inspect the original errno number.
121
122 .. versionadded:: 3.3
123
124.. exception:: SSLEOFError
125
126 A subclass of :exc:`SSLError` raised when the SSL connection has been
Antoine Pitrouf3dc2d72011-10-28 00:01:03 +0200127 terminated abruptly. Generally, you shouldn't try to reuse the underlying
Antoine Pitrou41032a62011-10-27 23:56:55 +0200128 transport when this error is encountered.
129
130 .. versionadded:: 3.3
131
Christian Heimesb3ad0e52017-09-08 12:00:19 -0700132.. exception:: SSLCertVerificationError
133
134 A subclass of :exc:`SSLError` raised when certificate validation has
135 failed.
136
137 .. versionadded:: 3.7
138
139 .. attribute:: verify_code
140
141 A numeric error number that denotes the verification error.
142
143 .. attribute:: verify_message
144
145 A human readable string of the verification error.
146
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000147.. exception:: CertificateError
148
Christian Heimes61d478c2018-01-27 15:51:38 +0100149 An alias for :exc:`SSLCertVerificationError`.
150
151 .. versionchanged:: 3.7
152 The exception is now an alias for :exc:`SSLCertVerificationError`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000153
154
155Socket creation
156^^^^^^^^^^^^^^^
157
158The following function allows for standalone socket creation. Starting from
159Python 3.2, it can be more flexible to use :meth:`SSLContext.wrap_socket`
160instead.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000161
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000162.. function:: wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, ssl_version={see docs}, ca_certs=None, do_handshake_on_connect=True, suppress_ragged_eofs=True, ciphers=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000163
Georg Brandl7f01a132009-09-16 15:58:14 +0000164 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance
165 of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps
Antoine Pitrou3e86ba42013-12-28 17:26:33 +0100166 the underlying socket in an SSL context. ``sock`` must be a
167 :data:`~socket.SOCK_STREAM` socket; other socket types are unsupported.
168
169 For client-side sockets, the context construction is lazy; if the
170 underlying socket isn't connected yet, the context construction will be
171 performed after :meth:`connect` is called on the socket. For
172 server-side sockets, if the socket has no remote peer, it is assumed
173 to be a listening socket, and the server-side SSL wrapping is
174 automatically performed on client connections accepted via the
175 :meth:`accept` method. :func:`wrap_socket` may raise :exc:`SSLError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000176
Georg Brandl7f01a132009-09-16 15:58:14 +0000177 The ``keyfile`` and ``certfile`` parameters specify optional files which
178 contain a certificate to be used to identify the local side of the
179 connection. See the discussion of :ref:`ssl-certificates` for more
180 information on how the certificate is stored in the ``certfile``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000181
Georg Brandl7f01a132009-09-16 15:58:14 +0000182 The parameter ``server_side`` is a boolean which identifies whether
183 server-side or client-side behavior is desired from this socket.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000184
Georg Brandl7f01a132009-09-16 15:58:14 +0000185 The parameter ``cert_reqs`` specifies whether a certificate is required from
186 the other side of the connection, and whether it will be validated if
187 provided. It must be one of the three values :const:`CERT_NONE`
188 (certificates ignored), :const:`CERT_OPTIONAL` (not required, but validated
189 if provided), or :const:`CERT_REQUIRED` (required and validated). If the
190 value of this parameter is not :const:`CERT_NONE`, then the ``ca_certs``
191 parameter must point to a file of CA certificates.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000192
Georg Brandl7f01a132009-09-16 15:58:14 +0000193 The ``ca_certs`` file contains a set of concatenated "certification
194 authority" certificates, which are used to validate certificates passed from
195 the other end of the connection. See the discussion of
196 :ref:`ssl-certificates` for more information about how to arrange the
197 certificates in this file.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000198
Georg Brandl7f01a132009-09-16 15:58:14 +0000199 The parameter ``ssl_version`` specifies which version of the SSL protocol to
200 use. Typically, the server chooses a particular protocol version, and the
201 client must adapt to the server's choice. Most of the versions are not
Antoine Pitrou84a2edc2012-01-09 21:35:11 +0100202 interoperable with the other versions. If not specified, the default is
Christian Heimes598894f2016-09-05 23:19:05 +0200203 :data:`PROTOCOL_TLS`; it provides the most compatibility with other
Georg Brandl7f01a132009-09-16 15:58:14 +0000204 versions.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000205
Georg Brandl7f01a132009-09-16 15:58:14 +0000206 Here's a table showing which versions in a client (down the side) can connect
207 to which versions in a server (along the top):
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000208
209 .. table::
210
Christian Heimes17352ff2016-09-13 12:09:55 +0200211 ======================== ============ ============ ============= ========= =========== ===========
Christian Heimescb5b68a2017-09-07 18:07:00 -0700212 *client* / **server** **SSLv2** **SSLv3** **TLS** [3]_ **TLSv1** **TLSv1.1** **TLSv1.2**
Christian Heimes17352ff2016-09-13 12:09:55 +0200213 ------------------------ ------------ ------------ ------------- --------- ----------- -----------
214 *SSLv2* yes no no [1]_ no no no
215 *SSLv3* no yes no [2]_ no no no
Christian Heimescb5b68a2017-09-07 18:07:00 -0700216 *TLS* (*SSLv23*) [3]_ no [1]_ no [2]_ yes yes yes yes
Christian Heimes17352ff2016-09-13 12:09:55 +0200217 *TLSv1* no no yes yes no no
218 *TLSv1.1* no no yes no yes no
219 *TLSv1.2* no no yes no no yes
220 ======================== ============ ============ ============= ========= =========== ===========
221
222 .. rubric:: Footnotes
223 .. [1] :class:`SSLContext` disables SSLv2 with :data:`OP_NO_SSLv2` by default.
Christian Heimesed9c0702016-09-13 13:27:26 +0200224 .. [2] :class:`SSLContext` disables SSLv3 with :data:`OP_NO_SSLv3` by default.
Christian Heimescb5b68a2017-09-07 18:07:00 -0700225 .. [3] TLS 1.3 protocol will be available with :data:`PROTOCOL_TLS` in
226 OpenSSL >= 1.1.1. There is no dedicated PROTOCOL constant for just
227 TLS 1.3.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000228
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000229 .. note::
230
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000231 Which connections succeed will vary depending on the version of
Antoine Pitrou2b207ba2014-12-03 20:00:56 +0100232 OpenSSL. For example, before OpenSSL 1.0.0, an SSLv23 client
233 would always attempt SSLv2 connections.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000234
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000235 The *ciphers* parameter sets the available ciphers for this SSL object.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000236 It should be a string in the `OpenSSL cipher list format
Felipe19e4d932017-09-20 20:20:18 +0200237 <https://wiki.openssl.org/index.php/Manual:Ciphers(1)#CIPHER_LIST_FORMAT>`_.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000238
Bill Janssen48dc27c2007-12-05 03:38:10 +0000239 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
240 handshake automatically after doing a :meth:`socket.connect`, or whether the
Georg Brandl7f01a132009-09-16 15:58:14 +0000241 application program will call it explicitly, by invoking the
242 :meth:`SSLSocket.do_handshake` method. Calling
243 :meth:`SSLSocket.do_handshake` explicitly gives the program control over the
244 blocking behavior of the socket I/O involved in the handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000245
Georg Brandl7f01a132009-09-16 15:58:14 +0000246 The parameter ``suppress_ragged_eofs`` specifies how the
Antoine Pitroudab64262010-09-19 13:31:06 +0000247 :meth:`SSLSocket.recv` method should signal unexpected EOF from the other end
Georg Brandl7f01a132009-09-16 15:58:14 +0000248 of the connection. If specified as :const:`True` (the default), it returns a
Antoine Pitroudab64262010-09-19 13:31:06 +0000249 normal EOF (an empty bytes object) in response to unexpected EOF errors
250 raised from the underlying socket; if :const:`False`, it will raise the
251 exceptions back to the caller.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000252
Ezio Melotti4d5195b2010-04-20 10:57:44 +0000253 .. versionchanged:: 3.2
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000254 New optional argument *ciphers*.
255
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100256Context creation
257^^^^^^^^^^^^^^^^
258
259A convenience function helps create :class:`SSLContext` objects for common
260purposes.
261
262.. function:: create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, capath=None, cadata=None)
263
264 Return a new :class:`SSLContext` object with default settings for
265 the given *purpose*. The settings are chosen by the :mod:`ssl` module,
266 and usually represent a higher security level than when calling the
267 :class:`SSLContext` constructor directly.
268
269 *cafile*, *capath*, *cadata* represent optional CA certificates to
270 trust for certificate verification, as in
271 :meth:`SSLContext.load_verify_locations`. If all three are
272 :const:`None`, this function can choose to trust the system's default
273 CA certificates instead.
274
Christian Heimes598894f2016-09-05 23:19:05 +0200275 The settings are: :data:`PROTOCOL_TLS`, :data:`OP_NO_SSLv2`, and
Benjamin Peterson59c4eb72015-03-16 12:43:38 -0500276 :data:`OP_NO_SSLv3` with high encryption cipher suites without RC4 and
Donald Stufft6a2ba942014-03-23 19:05:28 -0400277 without unauthenticated cipher suites. Passing :data:`~Purpose.SERVER_AUTH`
278 as *purpose* sets :data:`~SSLContext.verify_mode` to :data:`CERT_REQUIRED`
279 and either loads CA certificates (when at least one of *cafile*, *capath* or
280 *cadata* is given) or uses :meth:`SSLContext.load_default_certs` to load
281 default CA certificates.
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100282
283 .. note::
284 The protocol, options, cipher and other settings may change to more
285 restrictive values anytime without prior deprecation. The values
286 represent a fair balance between compatibility and security.
287
288 If your application needs specific settings, you should create a
289 :class:`SSLContext` and apply the settings yourself.
290
Donald Stufft6a2ba942014-03-23 19:05:28 -0400291 .. note::
292 If you find that when certain older clients or servers attempt to connect
Benjamin Peterson6f362fa2015-04-08 11:11:00 -0400293 with a :class:`SSLContext` created by this function that they get an error
294 stating "Protocol or cipher suite mismatch", it may be that they only
295 support SSL3.0 which this function excludes using the
296 :data:`OP_NO_SSLv3`. SSL3.0 is widely considered to be `completely broken
297 <https://en.wikipedia.org/wiki/POODLE>`_. If you still wish to continue to
298 use this function but still allow SSL 3.0 connections you can re-enable
299 them using::
Donald Stufft6a2ba942014-03-23 19:05:28 -0400300
301 ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
302 ctx.options &= ~ssl.OP_NO_SSLv3
303
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100304 .. versionadded:: 3.4
305
Benjamin Peterson59c4eb72015-03-16 12:43:38 -0500306 .. versionchanged:: 3.4.4
307
308 RC4 was dropped from the default cipher string.
309
Christian Heimesac041c02016-09-06 20:07:58 +0200310 .. versionchanged:: 3.6
Christian Heimes03d13c02016-09-06 20:06:47 +0200311
312 ChaCha20/Poly1305 was added to the default cipher string.
313
314 3DES was dropped from the default cipher string.
315
Christian Heimescb5b68a2017-09-07 18:07:00 -0700316 .. versionchanged:: 3.7
317
318 TLS 1.3 cipher suites TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384,
319 and TLS_CHACHA20_POLY1305_SHA256 were added to the default cipher string.
320
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100321
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000322Random generation
323^^^^^^^^^^^^^^^^^
324
Victor Stinner99c8b162011-05-24 12:05:19 +0200325.. function:: RAND_bytes(num)
326
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400327 Return *num* cryptographically strong pseudo-random bytes. Raises an
Victor Stinnera6752062011-05-25 11:27:40 +0200328 :class:`SSLError` if the PRNG has not been seeded with enough data or if the
329 operation is not supported by the current RAND method. :func:`RAND_status`
330 can be used to check the status of the PRNG and :func:`RAND_add` can be used
331 to seed the PRNG.
Victor Stinner99c8b162011-05-24 12:05:19 +0200332
Berker Peksageb7a97c2015-04-10 16:19:13 +0300333 For almost all applications :func:`os.urandom` is preferable.
334
Victor Stinner19fb53c2011-05-24 21:32:40 +0200335 Read the Wikipedia article, `Cryptographically secure pseudorandom number
Victor Stinnera6752062011-05-25 11:27:40 +0200336 generator (CSPRNG)
Georg Brandl5d941342016-02-26 19:37:12 +0100337 <https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator>`_,
Victor Stinner19fb53c2011-05-24 21:32:40 +0200338 to get the requirements of a cryptographically generator.
339
Victor Stinner99c8b162011-05-24 12:05:19 +0200340 .. versionadded:: 3.3
341
342.. function:: RAND_pseudo_bytes(num)
343
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400344 Return (bytes, is_cryptographic): bytes are *num* pseudo-random bytes,
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200345 is_cryptographic is ``True`` if the bytes generated are cryptographically
Victor Stinnera6752062011-05-25 11:27:40 +0200346 strong. Raises an :class:`SSLError` if the operation is not supported by the
347 current RAND method.
Victor Stinner99c8b162011-05-24 12:05:19 +0200348
Victor Stinner19fb53c2011-05-24 21:32:40 +0200349 Generated pseudo-random byte sequences will be unique if they are of
350 sufficient length, but are not necessarily unpredictable. They can be used
351 for non-cryptographic purposes and for certain purposes in cryptographic
352 protocols, but usually not for key generation etc.
353
Berker Peksageb7a97c2015-04-10 16:19:13 +0300354 For almost all applications :func:`os.urandom` is preferable.
355
Victor Stinner99c8b162011-05-24 12:05:19 +0200356 .. versionadded:: 3.3
357
Christian Heimes01113fa2016-09-05 23:23:24 +0200358 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200359
360 OpenSSL has deprecated :func:`ssl.RAND_pseudo_bytes`, use
361 :func:`ssl.RAND_bytes` instead.
362
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000363.. function:: RAND_status()
364
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400365 Return ``True`` if the SSL pseudo-random number generator has been seeded
366 with 'enough' randomness, and ``False`` otherwise. You can use
367 :func:`ssl.RAND_egd` and :func:`ssl.RAND_add` to increase the randomness of
368 the pseudo-random number generator.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000369
370.. function:: RAND_egd(path)
371
Victor Stinner99c8b162011-05-24 12:05:19 +0200372 If you are running an entropy-gathering daemon (EGD) somewhere, and *path*
Georg Brandl7f01a132009-09-16 15:58:14 +0000373 is the pathname of a socket connection open to it, this will read 256 bytes
374 of randomness from the socket, and add it to the SSL pseudo-random number
375 generator to increase the security of generated secret keys. This is
376 typically only necessary on systems without better sources of randomness.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000377
Georg Brandl7f01a132009-09-16 15:58:14 +0000378 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources
379 of entropy-gathering daemons.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000380
Christian Heimes598894f2016-09-05 23:19:05 +0200381 Availability: not available with LibreSSL and OpenSSL > 1.1.0
Victor Stinner3ce67a92015-01-06 13:53:09 +0100382
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000383.. function:: RAND_add(bytes, entropy)
384
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400385 Mix the given *bytes* into the SSL pseudo-random number generator. The
Victor Stinner99c8b162011-05-24 12:05:19 +0200386 parameter *entropy* (a float) is a lower bound on the entropy contained in
Georg Brandl7f01a132009-09-16 15:58:14 +0000387 string (so you can always use :const:`0.0`). See :rfc:`1750` for more
388 information on sources of entropy.
Thomas Woutersed03b412007-08-28 21:37:11 +0000389
Georg Brandl8c16cb92016-02-25 20:17:45 +0100390 .. versionchanged:: 3.5
Serhiy Storchaka8490f5a2015-03-20 09:00:36 +0200391 Writable :term:`bytes-like object` is now accepted.
392
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000393Certificate handling
394^^^^^^^^^^^^^^^^^^^^
395
Marco Buttu7b2491a2017-04-13 16:17:59 +0200396.. testsetup::
397
398 import ssl
399
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000400.. function:: match_hostname(cert, hostname)
401
402 Verify that *cert* (in decoded format as returned by
403 :meth:`SSLSocket.getpeercert`) matches the given *hostname*. The rules
404 applied are those for checking the identity of HTTPS servers as outlined
Chandan Kumar63c2c8a2017-06-09 15:13:58 +0530405 in :rfc:`2818`, :rfc:`5280` and :rfc:`6125`. In addition to HTTPS, this
406 function should be suitable for checking the identity of servers in
407 various SSL-based protocols such as FTPS, IMAPS, POPS and others.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000408
409 :exc:`CertificateError` is raised on failure. On success, the function
410 returns nothing::
411
412 >>> cert = {'subject': ((('commonName', 'example.com'),),)}
413 >>> ssl.match_hostname(cert, "example.com")
414 >>> ssl.match_hostname(cert, "example.org")
415 Traceback (most recent call last):
416 File "<stdin>", line 1, in <module>
417 File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
418 ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
419
420 .. versionadded:: 3.2
421
Georg Brandl72c98d32013-10-27 07:16:53 +0100422 .. versionchanged:: 3.3.3
423 The function now follows :rfc:`6125`, section 6.4.3 and does neither
424 match multiple wildcards (e.g. ``*.*.com`` or ``*a*.example.org``) nor
425 a wildcard inside an internationalized domain names (IDN) fragment.
426 IDN A-labels such as ``www*.xn--pthon-kva.org`` are still supported,
427 but ``x*.python.org`` no longer matches ``xn--tda.python.org``.
428
Antoine Pitrouc481bfb2015-02-15 18:12:20 +0100429 .. versionchanged:: 3.5
430 Matching of IP addresses, when present in the subjectAltName field
431 of the certificate, is now supported.
432
Mandeep Singhede2ac92017-11-27 04:01:27 +0530433 .. versionchanged:: 3.7
Christian Heimes61d478c2018-01-27 15:51:38 +0100434 The function is no longer used to TLS connections. Hostname matching
435 is now performed by OpenSSL.
436
Mandeep Singhede2ac92017-11-27 04:01:27 +0530437 Allow wildcard when it is the leftmost and the only character
Christian Heimes61d478c2018-01-27 15:51:38 +0100438 in that segment. Partial wildcards like ``www*.example.com`` are no
439 longer supported.
440
441 .. deprecated:: 3.7
Mandeep Singhede2ac92017-11-27 04:01:27 +0530442
Antoine Pitrouc695c952014-04-28 20:57:36 +0200443.. function:: cert_time_to_seconds(cert_time)
Thomas Woutersed03b412007-08-28 21:37:11 +0000444
Antoine Pitrouc695c952014-04-28 20:57:36 +0200445 Return the time in seconds since the Epoch, given the ``cert_time``
446 string representing the "notBefore" or "notAfter" date from a
447 certificate in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C
448 locale).
Thomas Woutersed03b412007-08-28 21:37:11 +0000449
Antoine Pitrouc695c952014-04-28 20:57:36 +0200450 Here's an example:
Thomas Woutersed03b412007-08-28 21:37:11 +0000451
Antoine Pitrouc695c952014-04-28 20:57:36 +0200452 .. doctest:: newcontext
453
454 >>> import ssl
455 >>> timestamp = ssl.cert_time_to_seconds("Jan 5 09:34:43 2018 GMT")
Marco Buttu7b2491a2017-04-13 16:17:59 +0200456 >>> timestamp # doctest: +SKIP
Antoine Pitrouc695c952014-04-28 20:57:36 +0200457 1515144883
458 >>> from datetime import datetime
Marco Buttu7b2491a2017-04-13 16:17:59 +0200459 >>> print(datetime.utcfromtimestamp(timestamp)) # doctest: +SKIP
Antoine Pitrouc695c952014-04-28 20:57:36 +0200460 2018-01-05 09:34:43
461
462 "notBefore" or "notAfter" dates must use GMT (:rfc:`5280`).
463
464 .. versionchanged:: 3.5
465 Interpret the input time as a time in UTC as specified by 'GMT'
466 timezone in the input string. Local timezone was used
467 previously. Return an integer (no fractions of a second in the
468 input format)
Thomas Woutersed03b412007-08-28 21:37:11 +0000469
Christian Heimes598894f2016-09-05 23:19:05 +0200470.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None)
Thomas Woutersed03b412007-08-28 21:37:11 +0000471
Georg Brandl7f01a132009-09-16 15:58:14 +0000472 Given the address ``addr`` of an SSL-protected server, as a (*hostname*,
473 *port-number*) pair, fetches the server's certificate, and returns it as a
474 PEM-encoded string. If ``ssl_version`` is specified, uses that version of
475 the SSL protocol to attempt to connect to the server. If ``ca_certs`` is
476 specified, it should be a file containing a list of root certificates, the
477 same format as used for the same parameter in :func:`wrap_socket`. The call
478 will attempt to validate the server certificate against that set of root
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000479 certificates, and will fail if the validation attempt fails.
480
Antoine Pitrou15399c32011-04-28 19:23:55 +0200481 .. versionchanged:: 3.3
482 This function is now IPv6-compatible.
483
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200484 .. versionchanged:: 3.5
485 The default *ssl_version* is changed from :data:`PROTOCOL_SSLv3` to
Christian Heimes598894f2016-09-05 23:19:05 +0200486 :data:`PROTOCOL_TLS` for maximum compatibility with modern servers.
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200487
Georg Brandl7f01a132009-09-16 15:58:14 +0000488.. function:: DER_cert_to_PEM_cert(DER_cert_bytes)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000489
490 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
491 string version of the same certificate.
492
Georg Brandl7f01a132009-09-16 15:58:14 +0000493.. function:: PEM_cert_to_DER_cert(PEM_cert_string)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000494
Georg Brandl7f01a132009-09-16 15:58:14 +0000495 Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of
496 bytes for that same certificate.
Thomas Woutersed03b412007-08-28 21:37:11 +0000497
Christian Heimes6d7ad132013-06-09 18:02:55 +0200498.. function:: get_default_verify_paths()
499
500 Returns a named tuple with paths to OpenSSL's default cafile and capath.
501 The paths are the same as used by
502 :meth:`SSLContext.set_default_verify_paths`. The return value is a
503 :term:`named tuple` ``DefaultVerifyPaths``:
504
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300505 * :attr:`cafile` - resolved path to cafile or ``None`` if the file doesn't exist,
506 * :attr:`capath` - resolved path to capath or ``None`` if the directory doesn't exist,
Christian Heimes6d7ad132013-06-09 18:02:55 +0200507 * :attr:`openssl_cafile_env` - OpenSSL's environment key that points to a cafile,
508 * :attr:`openssl_cafile` - hard coded path to a cafile,
509 * :attr:`openssl_capath_env` - OpenSSL's environment key that points to a capath,
510 * :attr:`openssl_capath` - hard coded path to a capath directory
511
Christian Heimes598894f2016-09-05 23:19:05 +0200512 Availability: LibreSSL ignores the environment vars
513 :attr:`openssl_cafile_env` and :attr:`openssl_capath_env`
514
Christian Heimes6d7ad132013-06-09 18:02:55 +0200515 .. versionadded:: 3.4
516
Christian Heimes44109d72013-11-22 01:51:30 +0100517.. function:: enum_certificates(store_name)
Christian Heimes46bebee2013-06-09 19:03:31 +0200518
519 Retrieve certificates from Windows' system cert store. *store_name* may be
520 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
Christian Heimes44109d72013-11-22 01:51:30 +0100521 stores, too.
Christian Heimes46bebee2013-06-09 19:03:31 +0200522
Christian Heimes44109d72013-11-22 01:51:30 +0100523 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
524 The encoding_type specifies the encoding of cert_bytes. It is either
525 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
526 PKCS#7 ASN.1 data. Trust specifies the purpose of the certificate as a set
527 of OIDS or exactly ``True`` if the certificate is trustworthy for all
528 purposes.
529
530 Example::
531
532 >>> ssl.enum_certificates("CA")
533 [(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
534 (b'data...', 'x509_asn', True)]
Christian Heimes46bebee2013-06-09 19:03:31 +0200535
536 Availability: Windows.
537
538 .. versionadded:: 3.4
Christian Heimes6d7ad132013-06-09 18:02:55 +0200539
Christian Heimes44109d72013-11-22 01:51:30 +0100540.. function:: enum_crls(store_name)
541
542 Retrieve CRLs from Windows' system cert store. *store_name* may be
543 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
544 stores, too.
545
546 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
547 The encoding_type specifies the encoding of cert_bytes. It is either
548 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
549 PKCS#7 ASN.1 data.
550
551 Availability: Windows.
552
553 .. versionadded:: 3.4
554
555
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000556Constants
557^^^^^^^^^
558
Christian Heimes3aeacad2016-09-10 00:19:35 +0200559 All constants are now :class:`enum.IntEnum` or :class:`enum.IntFlag` collections.
560
561 .. versionadded:: 3.6
562
Thomas Woutersed03b412007-08-28 21:37:11 +0000563.. data:: CERT_NONE
564
Antoine Pitrou152efa22010-05-16 18:19:27 +0000565 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
566 parameter to :func:`wrap_socket`. In this mode (the default), no
567 certificates will be required from the other side of the socket connection.
568 If a certificate is received from the other end, no attempt to validate it
569 is made.
570
571 See the discussion of :ref:`ssl-security` below.
Thomas Woutersed03b412007-08-28 21:37:11 +0000572
573.. data:: CERT_OPTIONAL
574
Antoine Pitrou152efa22010-05-16 18:19:27 +0000575 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
576 parameter to :func:`wrap_socket`. In this mode no certificates will be
577 required from the other side of the socket connection; but if they
578 are provided, validation will be attempted and an :class:`SSLError`
579 will be raised on failure.
580
581 Use of this setting requires a valid set of CA certificates to
582 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
583 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000584
585.. data:: CERT_REQUIRED
586
Antoine Pitrou152efa22010-05-16 18:19:27 +0000587 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
588 parameter to :func:`wrap_socket`. In this mode, certificates are
589 required from the other side of the socket connection; an :class:`SSLError`
590 will be raised if no certificate is provided, or if its validation fails.
591
592 Use of this setting requires a valid set of CA certificates to
593 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
594 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000595
Christian Heimes3aeacad2016-09-10 00:19:35 +0200596.. class:: VerifyMode
597
598 :class:`enum.IntEnum` collection of CERT_* constants.
599
600 .. versionadded:: 3.6
601
Christian Heimes22587792013-11-21 23:56:13 +0100602.. data:: VERIFY_DEFAULT
603
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500604 Possible value for :attr:`SSLContext.verify_flags`. In this mode, certificate
605 revocation lists (CRLs) are not checked. By default OpenSSL does neither
606 require nor verify CRLs.
Christian Heimes22587792013-11-21 23:56:13 +0100607
608 .. versionadded:: 3.4
609
610.. data:: VERIFY_CRL_CHECK_LEAF
611
612 Possible value for :attr:`SSLContext.verify_flags`. In this mode, only the
613 peer cert is check but non of the intermediate CA certificates. The mode
614 requires a valid CRL that is signed by the peer cert's issuer (its direct
615 ancestor CA). If no proper has been loaded
616 :attr:`SSLContext.load_verify_locations`, validation will fail.
617
618 .. versionadded:: 3.4
619
620.. data:: VERIFY_CRL_CHECK_CHAIN
621
622 Possible value for :attr:`SSLContext.verify_flags`. In this mode, CRLs of
623 all certificates in the peer cert chain are checked.
624
625 .. versionadded:: 3.4
626
627.. data:: VERIFY_X509_STRICT
628
629 Possible value for :attr:`SSLContext.verify_flags` to disable workarounds
630 for broken X.509 certificates.
631
632 .. versionadded:: 3.4
633
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500634.. data:: VERIFY_X509_TRUSTED_FIRST
635
636 Possible value for :attr:`SSLContext.verify_flags`. It instructs OpenSSL to
637 prefer trusted certificates when building the trust chain to validate a
638 certificate. This flag is enabled by default.
639
Benjamin Petersonc8358272015-03-08 09:42:25 -0400640 .. versionadded:: 3.4.4
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500641
Christian Heimes3aeacad2016-09-10 00:19:35 +0200642.. class:: VerifyFlags
643
644 :class:`enum.IntFlag` collection of VERIFY_* constants.
645
646 .. versionadded:: 3.6
647
Christian Heimes598894f2016-09-05 23:19:05 +0200648.. data:: PROTOCOL_TLS
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200649
650 Selects the highest protocol version that both the client and server support.
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700651 Despite the name, this option can select both "SSL" and "TLS" protocols.
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200652
Christian Heimes01113fa2016-09-05 23:23:24 +0200653 .. versionadded:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200654
Christian Heimes5fe668c2016-09-12 00:01:11 +0200655.. data:: PROTOCOL_TLS_CLIENT
656
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700657 Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`,
Christian Heimes5fe668c2016-09-12 00:01:11 +0200658 but only support client-side :class:`SSLSocket` connections. The protocol
659 enables :data:`CERT_REQUIRED` and :attr:`~SSLContext.check_hostname` by
660 default.
661
662 .. versionadded:: 3.6
663
664.. data:: PROTOCOL_TLS_SERVER
665
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700666 Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`,
Christian Heimes5fe668c2016-09-12 00:01:11 +0200667 but only support server-side :class:`SSLSocket` connections.
668
669 .. versionadded:: 3.6
670
Christian Heimes598894f2016-09-05 23:19:05 +0200671.. data:: PROTOCOL_SSLv23
672
673 Alias for data:`PROTOCOL_TLS`.
674
Christian Heimes01113fa2016-09-05 23:23:24 +0200675 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200676
Berker Peksagd93c4de2017-02-06 13:37:19 +0300677 Use :data:`PROTOCOL_TLS` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200678
Thomas Woutersed03b412007-08-28 21:37:11 +0000679.. data:: PROTOCOL_SSLv2
680
681 Selects SSL version 2 as the channel encryption protocol.
682
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500683 This protocol is not available if OpenSSL is compiled with the
684 ``OPENSSL_NO_SSL2`` flag.
Victor Stinner3de49192011-05-09 00:42:58 +0200685
Antoine Pitrou8eac60d2010-05-16 14:19:41 +0000686 .. warning::
687
688 SSL version 2 is insecure. Its use is highly discouraged.
689
Christian Heimes01113fa2016-09-05 23:23:24 +0200690 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200691
692 OpenSSL has removed support for SSLv2.
693
Thomas Woutersed03b412007-08-28 21:37:11 +0000694.. data:: PROTOCOL_SSLv3
695
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200696 Selects SSL version 3 as the channel encryption protocol.
697
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500698 This protocol is not be available if OpenSSL is compiled with the
699 ``OPENSSL_NO_SSLv3`` flag.
700
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200701 .. warning::
702
703 SSL version 3 is insecure. Its use is highly discouraged.
Thomas Woutersed03b412007-08-28 21:37:11 +0000704
Christian Heimes01113fa2016-09-05 23:23:24 +0200705 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200706
707 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300708 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200709
Thomas Woutersed03b412007-08-28 21:37:11 +0000710.. data:: PROTOCOL_TLSv1
711
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100712 Selects TLS version 1.0 as the channel encryption protocol.
713
Christian Heimes01113fa2016-09-05 23:23:24 +0200714 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200715
716 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300717 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200718
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100719.. data:: PROTOCOL_TLSv1_1
720
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100721 Selects TLS version 1.1 as the channel encryption protocol.
722 Available only with openssl version 1.0.1+.
723
724 .. versionadded:: 3.4
725
Christian Heimes01113fa2016-09-05 23:23:24 +0200726 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200727
728 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300729 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200730
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100731.. data:: PROTOCOL_TLSv1_2
732
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200733 Selects TLS version 1.2 as the channel encryption protocol. This is the
734 most modern version, and probably the best choice for maximum protection,
735 if both sides can speak it. Available only with openssl version 1.0.1+.
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100736
737 .. versionadded:: 3.4
Thomas Woutersed03b412007-08-28 21:37:11 +0000738
Christian Heimes01113fa2016-09-05 23:23:24 +0200739 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200740
741 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300742 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200743
Antoine Pitroub5218772010-05-21 09:56:06 +0000744.. data:: OP_ALL
745
746 Enables workarounds for various bugs present in other SSL implementations.
Antoine Pitrou9f6b02e2012-01-27 10:02:55 +0100747 This option is set by default. It does not necessarily set the same
748 flags as OpenSSL's ``SSL_OP_ALL`` constant.
Antoine Pitroub5218772010-05-21 09:56:06 +0000749
750 .. versionadded:: 3.2
751
752.. data:: OP_NO_SSLv2
753
754 Prevents an SSLv2 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200755 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000756 choosing SSLv2 as the protocol version.
757
758 .. versionadded:: 3.2
759
Christian Heimes01113fa2016-09-05 23:23:24 +0200760 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200761
762 SSLv2 is deprecated
763
764
Antoine Pitroub5218772010-05-21 09:56:06 +0000765.. data:: OP_NO_SSLv3
766
767 Prevents an SSLv3 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200768 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000769 choosing SSLv3 as the protocol version.
770
771 .. versionadded:: 3.2
772
Christian Heimes01113fa2016-09-05 23:23:24 +0200773 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200774
775 SSLv3 is deprecated
776
Antoine Pitroub5218772010-05-21 09:56:06 +0000777.. data:: OP_NO_TLSv1
778
779 Prevents a TLSv1 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200780 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000781 choosing TLSv1 as the protocol version.
782
783 .. versionadded:: 3.2
784
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100785.. data:: OP_NO_TLSv1_1
786
787 Prevents a TLSv1.1 connection. This option is only applicable in conjunction
Christian Heimes598894f2016-09-05 23:19:05 +0200788 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.1 as
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100789 the protocol version. Available only with openssl version 1.0.1+.
790
791 .. versionadded:: 3.4
792
793.. data:: OP_NO_TLSv1_2
794
795 Prevents a TLSv1.2 connection. This option is only applicable in conjunction
Christian Heimes598894f2016-09-05 23:19:05 +0200796 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.2 as
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100797 the protocol version. Available only with openssl version 1.0.1+.
798
799 .. versionadded:: 3.4
800
Christian Heimescb5b68a2017-09-07 18:07:00 -0700801.. data:: OP_NO_TLSv1_3
802
803 Prevents a TLSv1.3 connection. This option is only applicable in conjunction
804 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.3 as
805 the protocol version. TLS 1.3 is available with OpenSSL 1.1.1 or later.
806 When Python has been compiled against an older version of OpenSSL, the
807 flag defaults to *0*.
808
809 .. versionadded:: 3.7
810
Antoine Pitrou6db49442011-12-19 13:27:11 +0100811.. data:: OP_CIPHER_SERVER_PREFERENCE
812
813 Use the server's cipher ordering preference, rather than the client's.
814 This option has no effect on client sockets and SSLv2 server sockets.
815
816 .. versionadded:: 3.3
817
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100818.. data:: OP_SINGLE_DH_USE
819
820 Prevents re-use of the same DH key for distinct SSL sessions. This
821 improves forward secrecy but requires more computational resources.
822 This option only applies to server sockets.
823
824 .. versionadded:: 3.3
825
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100826.. data:: OP_SINGLE_ECDH_USE
827
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100828 Prevents re-use of the same ECDH key for distinct SSL sessions. This
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100829 improves forward secrecy but requires more computational resources.
830 This option only applies to server sockets.
831
832 .. versionadded:: 3.3
833
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100834.. data:: OP_NO_COMPRESSION
835
836 Disable compression on the SSL channel. This is useful if the application
837 protocol supports its own compression scheme.
838
839 This option is only available with OpenSSL 1.0.0 and later.
840
841 .. versionadded:: 3.3
842
Christian Heimes3aeacad2016-09-10 00:19:35 +0200843.. class:: Options
844
845 :class:`enum.IntFlag` collection of OP_* constants.
846
Christian Heimes99a65702016-09-10 23:44:53 +0200847.. data:: OP_NO_TICKET
848
849 Prevent client side from requesting a session ticket.
850
Christian Heimes3aeacad2016-09-10 00:19:35 +0200851 .. versionadded:: 3.6
852
Benjamin Petersoncca27322015-01-23 16:35:37 -0500853.. data:: HAS_ALPN
854
855 Whether the OpenSSL library has built-in support for the *Application-Layer
856 Protocol Negotiation* TLS extension as described in :rfc:`7301`.
857
858 .. versionadded:: 3.5
859
Christian Heimes61d478c2018-01-27 15:51:38 +0100860.. data:: HAS_NEVER_CHECK_COMMON_NAME
861
862 Whether the OpenSSL library has built-in support not checking subject
863 common name and :attr:`SSLContext.hostname_checks_common_name` is
864 writeable.
865
866 .. versionadded:: 3.7
867
Antoine Pitrou501da612011-12-21 09:27:41 +0100868.. data:: HAS_ECDH
869
870 Whether the OpenSSL library has built-in support for Elliptic Curve-based
871 Diffie-Hellman key exchange. This should be true unless the feature was
872 explicitly disabled by the distributor.
873
874 .. versionadded:: 3.3
875
Antoine Pitroud5323212010-10-22 18:19:07 +0000876.. data:: HAS_SNI
877
878 Whether the OpenSSL library has built-in support for the *Server Name
Chandan Kumar63c2c8a2017-06-09 15:13:58 +0530879 Indication* extension (as defined in :rfc:`6066`).
Antoine Pitroud5323212010-10-22 18:19:07 +0000880
881 .. versionadded:: 3.2
882
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100883.. data:: HAS_NPN
884
885 Whether the OpenSSL library has built-in support for *Next Protocol
Sanyam Khurana338cd832018-01-20 05:55:37 +0530886 Negotiation* as described in the `Application Layer Protocol
887 Negotiation <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_.
888 When true, you can use the :meth:`SSLContext.set_npn_protocols` method to advertise
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100889 which protocols you want to support.
890
891 .. versionadded:: 3.3
892
Christian Heimescb5b68a2017-09-07 18:07:00 -0700893.. data:: HAS_TLSv1_3
894
895 Whether the OpenSSL library has built-in support for the TLS 1.3 protocol.
896
897 .. versionadded:: 3.7
898
Antoine Pitroud6494802011-07-21 01:11:30 +0200899.. data:: CHANNEL_BINDING_TYPES
900
901 List of supported TLS channel binding types. Strings in this list
902 can be used as arguments to :meth:`SSLSocket.get_channel_binding`.
903
904 .. versionadded:: 3.3
905
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000906.. data:: OPENSSL_VERSION
907
908 The version string of the OpenSSL library loaded by the interpreter::
909
910 >>> ssl.OPENSSL_VERSION
Alex Gaynor275104e2017-03-02 05:23:19 -0500911 'OpenSSL 1.0.2k 26 Jan 2017'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000912
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000913 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000914
915.. data:: OPENSSL_VERSION_INFO
916
917 A tuple of five integers representing version information about the
918 OpenSSL library::
919
920 >>> ssl.OPENSSL_VERSION_INFO
Alex Gaynor275104e2017-03-02 05:23:19 -0500921 (1, 0, 2, 11, 15)
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000922
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000923 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000924
925.. data:: OPENSSL_VERSION_NUMBER
926
927 The raw version number of the OpenSSL library, as a single integer::
928
929 >>> ssl.OPENSSL_VERSION_NUMBER
Alex Gaynor275104e2017-03-02 05:23:19 -0500930 268443839
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000931 >>> hex(ssl.OPENSSL_VERSION_NUMBER)
Alex Gaynor275104e2017-03-02 05:23:19 -0500932 '0x100020bf'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000933
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000934 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000935
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100936.. data:: ALERT_DESCRIPTION_HANDSHAKE_FAILURE
937 ALERT_DESCRIPTION_INTERNAL_ERROR
938 ALERT_DESCRIPTION_*
939
940 Alert Descriptions from :rfc:`5246` and others. The `IANA TLS Alert Registry
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300941 <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100942 contains this list and references to the RFCs where their meaning is defined.
943
944 Used as the return value of the callback function in
945 :meth:`SSLContext.set_servername_callback`.
946
947 .. versionadded:: 3.4
948
Christian Heimes3aeacad2016-09-10 00:19:35 +0200949.. class:: AlertDescription
950
951 :class:`enum.IntEnum` collection of ALERT_DESCRIPTION_* constants.
952
953 .. versionadded:: 3.6
954
Christian Heimes72d28502013-11-23 13:56:58 +0100955.. data:: Purpose.SERVER_AUTH
956
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100957 Option for :func:`create_default_context` and
958 :meth:`SSLContext.load_default_certs`. This value indicates that the
959 context may be used to authenticate Web servers (therefore, it will
960 be used to create client-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100961
962 .. versionadded:: 3.4
963
Christian Heimes6b2ff982013-11-23 14:42:01 +0100964.. data:: Purpose.CLIENT_AUTH
Christian Heimes72d28502013-11-23 13:56:58 +0100965
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100966 Option for :func:`create_default_context` and
967 :meth:`SSLContext.load_default_certs`. This value indicates that the
968 context may be used to authenticate Web clients (therefore, it will
969 be used to create server-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100970
971 .. versionadded:: 3.4
972
Christian Heimes3aeacad2016-09-10 00:19:35 +0200973.. class:: SSLErrorNumber
974
975 :class:`enum.IntEnum` collection of SSL_ERROR_* constants.
976
977 .. versionadded:: 3.6
978
Thomas Woutersed03b412007-08-28 21:37:11 +0000979
Antoine Pitrou152efa22010-05-16 18:19:27 +0000980SSL Sockets
981-----------
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000982
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200983.. class:: SSLSocket(socket.socket)
Antoine Pitrou792ff3e2010-09-19 13:19:21 +0000984
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200985 SSL sockets provide the following methods of :ref:`socket-objects`:
Zachary Wareba9fb0d2014-06-11 15:02:25 -0500986
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200987 - :meth:`~socket.socket.accept()`
988 - :meth:`~socket.socket.bind()`
989 - :meth:`~socket.socket.close()`
990 - :meth:`~socket.socket.connect()`
991 - :meth:`~socket.socket.detach()`
992 - :meth:`~socket.socket.fileno()`
993 - :meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`
994 - :meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`
995 - :meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`,
996 :meth:`~socket.socket.setblocking()`
997 - :meth:`~socket.socket.listen()`
998 - :meth:`~socket.socket.makefile()`
999 - :meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()`
1000 (but passing a non-zero ``flags`` argument is not allowed)
1001 - :meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with
1002 the same limitation)
Victor Stinner92127a52014-10-10 12:43:17 +02001003 - :meth:`~socket.socket.sendfile()` (but :mod:`os.sendfile` will be used
1004 for plain-text sockets only, else :meth:`~socket.socket.send()` will be used)
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001005 - :meth:`~socket.socket.shutdown()`
Zachary Wareba9fb0d2014-06-11 15:02:25 -05001006
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001007 However, since the SSL (and TLS) protocol has its own framing atop
1008 of TCP, the SSL sockets abstraction can, in certain respects, diverge from
1009 the specification of normal, OS-level sockets. See especially the
1010 :ref:`notes on non-blocking sockets <ssl-nonblocking>`.
Antoine Pitroue1f2f302010-09-19 13:56:11 +00001011
Victor Stinnerd28fe8c2014-10-10 12:07:19 +02001012 Usually, :class:`SSLSocket` are not created directly, but using the
Alex Gaynor1cf2a802017-02-28 22:26:56 -05001013 :meth:`SSLContext.wrap_socket` method.
Victor Stinnerd28fe8c2014-10-10 12:07:19 +02001014
Victor Stinner92127a52014-10-10 12:43:17 +02001015 .. versionchanged:: 3.5
1016 The :meth:`sendfile` method was added.
1017
Victor Stinner14690702015-04-06 22:46:13 +02001018 .. versionchanged:: 3.5
1019 The :meth:`shutdown` does not reset the socket timeout each time bytes
1020 are received or sent. The socket timeout is now to maximum total duration
1021 of the shutdown.
1022
Christian Heimesd0486372016-09-10 23:23:33 +02001023 .. deprecated:: 3.6
1024 It is deprecated to create a :class:`SSLSocket` instance directly, use
1025 :meth:`SSLContext.wrap_socket` to wrap a socket.
1026
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001027
1028SSL sockets also have the following additional methods and attributes:
Antoine Pitrou792ff3e2010-09-19 13:19:21 +00001029
Martin Panterf6b1d662016-03-28 00:22:09 +00001030.. method:: SSLSocket.read(len=1024, buffer=None)
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001031
1032 Read up to *len* bytes of data from the SSL socket and return the result as
1033 a ``bytes`` instance. If *buffer* is specified, then read into the buffer
1034 instead, and return the number of bytes read.
1035
Victor Stinner41f92c22014-10-10 12:05:56 +02001036 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001037 :ref:`non-blocking <ssl-nonblocking>` and the read would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001038
1039 As at any time a re-negotiation is possible, a call to :meth:`read` can also
1040 cause write operations.
1041
Victor Stinner14690702015-04-06 22:46:13 +02001042 .. versionchanged:: 3.5
1043 The socket timeout is no more reset each time bytes are received or sent.
1044 The socket timeout is now to maximum total duration to read up to *len*
1045 bytes.
1046
Christian Heimesd0486372016-09-10 23:23:33 +02001047 .. deprecated:: 3.6
1048 Use :meth:`~SSLSocket.recv` instead of :meth:`~SSLSocket.read`.
1049
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001050.. method:: SSLSocket.write(buf)
1051
1052 Write *buf* to the SSL socket and return the number of bytes written. The
1053 *buf* argument must be an object supporting the buffer interface.
1054
Victor Stinner41f92c22014-10-10 12:05:56 +02001055 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001056 :ref:`non-blocking <ssl-nonblocking>` and the write would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001057
1058 As at any time a re-negotiation is possible, a call to :meth:`write` can
1059 also cause read operations.
1060
Victor Stinner14690702015-04-06 22:46:13 +02001061 .. versionchanged:: 3.5
1062 The socket timeout is no more reset each time bytes are received or sent.
1063 The socket timeout is now to maximum total duration to write *buf*.
1064
Christian Heimesd0486372016-09-10 23:23:33 +02001065 .. deprecated:: 3.6
1066 Use :meth:`~SSLSocket.send` instead of :meth:`~SSLSocket.write`.
1067
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001068.. note::
1069
1070 The :meth:`~SSLSocket.read` and :meth:`~SSLSocket.write` methods are the
1071 low-level methods that read and write unencrypted, application-level data
Martin Panter1f1177d2015-10-31 11:48:53 +00001072 and decrypt/encrypt it to encrypted, wire-level data. These methods
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001073 require an active SSL connection, i.e. the handshake was completed and
1074 :meth:`SSLSocket.unwrap` was not called.
1075
1076 Normally you should use the socket API methods like
1077 :meth:`~socket.socket.recv` and :meth:`~socket.socket.send` instead of these
1078 methods.
1079
Bill Janssen48dc27c2007-12-05 03:38:10 +00001080.. method:: SSLSocket.do_handshake()
1081
Antoine Pitroub3593ca2011-07-11 01:39:19 +02001082 Perform the SSL setup handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +00001083
Christian Heimes1aa9a752013-12-02 02:41:19 +01001084 .. versionchanged:: 3.4
Zachary Ware88a19772014-07-25 13:30:50 -05001085 The handshake method also performs :func:`match_hostname` when the
Christian Heimes1aa9a752013-12-02 02:41:19 +01001086 :attr:`~SSLContext.check_hostname` attribute of the socket's
1087 :attr:`~SSLSocket.context` is true.
1088
Victor Stinner14690702015-04-06 22:46:13 +02001089 .. versionchanged:: 3.5
1090 The socket timeout is no more reset each time bytes are received or sent.
1091 The socket timeout is now to maximum total duration of the handshake.
1092
Christian Heimes61d478c2018-01-27 15:51:38 +01001093 .. versionchanged:: 3.7
1094 Hostname or IP address is matched by OpenSSL during handshake. The
1095 function :func:`match_hostname` is no longer used. In case OpenSSL
1096 refuses a hostname or IP address, the handshake is aborted early and
1097 a TLS alert message is send to the peer.
1098
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001099.. method:: SSLSocket.getpeercert(binary_form=False)
1100
Georg Brandl7f01a132009-09-16 15:58:14 +00001101 If there is no certificate for the peer on the other end of the connection,
Antoine Pitrou20b85552013-09-29 19:50:53 +02001102 return ``None``. If the SSL handshake hasn't been done yet, raise
1103 :exc:`ValueError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001104
Antoine Pitroud34941a2013-04-16 20:27:17 +02001105 If the ``binary_form`` parameter is :const:`False`, and a certificate was
Georg Brandl7f01a132009-09-16 15:58:14 +00001106 received from the peer, this method returns a :class:`dict` instance. If the
1107 certificate was not validated, the dict is empty. If the certificate was
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001108 validated, it returns a dict with several keys, amongst them ``subject``
1109 (the principal for which the certificate was issued) and ``issuer``
1110 (the principal issuing the certificate). If a certificate contains an
1111 instance of the *Subject Alternative Name* extension (see :rfc:`3280`),
1112 there will also be a ``subjectAltName`` key in the dictionary.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001113
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001114 The ``subject`` and ``issuer`` fields are tuples containing the sequence
1115 of relative distinguished names (RDNs) given in the certificate's data
1116 structure for the respective fields, and each RDN is a sequence of
1117 name-value pairs. Here is a real-world example::
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001118
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001119 {'issuer': ((('countryName', 'IL'),),
1120 (('organizationName', 'StartCom Ltd.'),),
1121 (('organizationalUnitName',
1122 'Secure Digital Certificate Signing'),),
1123 (('commonName',
1124 'StartCom Class 2 Primary Intermediate Server CA'),)),
1125 'notAfter': 'Nov 22 08:15:19 2013 GMT',
1126 'notBefore': 'Nov 21 03:09:52 2011 GMT',
1127 'serialNumber': '95F0',
1128 'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),),
1129 (('countryName', 'US'),),
1130 (('stateOrProvinceName', 'California'),),
1131 (('localityName', 'San Francisco'),),
1132 (('organizationName', 'Electronic Frontier Foundation, Inc.'),),
1133 (('commonName', '*.eff.org'),),
1134 (('emailAddress', 'hostmaster@eff.org'),)),
1135 'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')),
1136 'version': 3}
1137
1138 .. note::
Larry Hastings3732ed22014-03-15 21:13:56 -07001139
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001140 To validate a certificate for a particular service, you can use the
1141 :func:`match_hostname` function.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001142
Georg Brandl7f01a132009-09-16 15:58:14 +00001143 If the ``binary_form`` parameter is :const:`True`, and a certificate was
1144 provided, this method returns the DER-encoded form of the entire certificate
1145 as a sequence of bytes, or :const:`None` if the peer did not provide a
Antoine Pitroud34941a2013-04-16 20:27:17 +02001146 certificate. Whether the peer provides a certificate depends on the SSL
1147 socket's role:
1148
1149 * for a client SSL socket, the server will always provide a certificate,
1150 regardless of whether validation was required;
1151
1152 * for a server SSL socket, the client will only provide a certificate
1153 when requested by the server; therefore :meth:`getpeercert` will return
1154 :const:`None` if you used :const:`CERT_NONE` (rather than
1155 :const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`).
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001156
Antoine Pitroufb046912010-11-09 20:21:19 +00001157 .. versionchanged:: 3.2
1158 The returned dictionary includes additional items such as ``issuer``
1159 and ``notBefore``.
1160
Antoine Pitrou20b85552013-09-29 19:50:53 +02001161 .. versionchanged:: 3.4
1162 :exc:`ValueError` is raised when the handshake isn't done.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001163 The returned dictionary includes additional X509v3 extension items
Larry Hastings3732ed22014-03-15 21:13:56 -07001164 such as ``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001165
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001166.. method:: SSLSocket.cipher()
1167
Georg Brandl7f01a132009-09-16 15:58:14 +00001168 Returns a three-value tuple containing the name of the cipher being used, the
1169 version of the SSL protocol that defines its use, and the number of secret
1170 bits being used. If no connection has been established, returns ``None``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001171
Benjamin Peterson4cb17812015-01-07 11:14:26 -06001172.. method:: SSLSocket.shared_ciphers()
1173
1174 Return the list of ciphers shared by the client during the handshake. Each
1175 entry of the returned list is a three-value tuple containing the name of the
1176 cipher, the version of the SSL protocol that defines its use, and the number
1177 of secret bits the cipher uses. :meth:`~SSLSocket.shared_ciphers` returns
1178 ``None`` if no connection has been established or the socket is a client
1179 socket.
1180
1181 .. versionadded:: 3.5
1182
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +01001183.. method:: SSLSocket.compression()
1184
1185 Return the compression algorithm being used as a string, or ``None``
1186 if the connection isn't compressed.
1187
1188 If the higher-level protocol supports its own compression mechanism,
1189 you can use :data:`OP_NO_COMPRESSION` to disable SSL-level compression.
1190
1191 .. versionadded:: 3.3
1192
Antoine Pitroud6494802011-07-21 01:11:30 +02001193.. method:: SSLSocket.get_channel_binding(cb_type="tls-unique")
1194
1195 Get channel binding data for current connection, as a bytes object. Returns
1196 ``None`` if not connected or the handshake has not been completed.
1197
1198 The *cb_type* parameter allow selection of the desired channel binding
1199 type. Valid channel binding types are listed in the
1200 :data:`CHANNEL_BINDING_TYPES` list. Currently only the 'tls-unique' channel
1201 binding, defined by :rfc:`5929`, is supported. :exc:`ValueError` will be
1202 raised if an unsupported channel binding type is requested.
1203
1204 .. versionadded:: 3.3
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001205
Benjamin Petersoncca27322015-01-23 16:35:37 -05001206.. method:: SSLSocket.selected_alpn_protocol()
1207
1208 Return the protocol that was selected during the TLS handshake. If
1209 :meth:`SSLContext.set_alpn_protocols` was not called, if the other party does
Benjamin Peterson88615022015-01-23 17:30:26 -05001210 not support ALPN, if this socket does not support any of the client's
1211 proposed protocols, or if the handshake has not happened yet, ``None`` is
Benjamin Petersoncca27322015-01-23 16:35:37 -05001212 returned.
1213
1214 .. versionadded:: 3.5
1215
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001216.. method:: SSLSocket.selected_npn_protocol()
1217
Benjamin Petersoncca27322015-01-23 16:35:37 -05001218 Return the higher-level protocol that was selected during the TLS/SSL
Antoine Pitrou47e40422014-09-04 21:00:10 +02001219 handshake. If :meth:`SSLContext.set_npn_protocols` was not called, or
1220 if the other party does not support NPN, or if the handshake has not yet
1221 happened, this will return ``None``.
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001222
1223 .. versionadded:: 3.3
1224
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001225.. method:: SSLSocket.unwrap()
1226
Georg Brandl7f01a132009-09-16 15:58:14 +00001227 Performs the SSL shutdown handshake, which removes the TLS layer from the
1228 underlying socket, and returns the underlying socket object. This can be
1229 used to go from encrypted operation over a connection to unencrypted. The
1230 returned socket should always be used for further communication with the
1231 other side of the connection, rather than the original socket.
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001232
Antoine Pitrou47e40422014-09-04 21:00:10 +02001233.. method:: SSLSocket.version()
1234
1235 Return the actual SSL protocol version negotiated by the connection
1236 as a string, or ``None`` is no secure connection is established.
1237 As of this writing, possible return values include ``"SSLv2"``,
1238 ``"SSLv3"``, ``"TLSv1"``, ``"TLSv1.1"`` and ``"TLSv1.2"``.
1239 Recent OpenSSL versions may define more return values.
1240
1241 .. versionadded:: 3.5
1242
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001243.. method:: SSLSocket.pending()
1244
1245 Returns the number of already decrypted bytes available for read, pending on
1246 the connection.
1247
Antoine Pitrouec883db2010-05-24 21:20:20 +00001248.. attribute:: SSLSocket.context
1249
1250 The :class:`SSLContext` object this SSL socket is tied to. If the SSL
1251 socket was created using the top-level :func:`wrap_socket` function
1252 (rather than :meth:`SSLContext.wrap_socket`), this is a custom context
1253 object created for this SSL socket.
1254
1255 .. versionadded:: 3.2
1256
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001257.. attribute:: SSLSocket.server_side
1258
1259 A boolean which is ``True`` for server-side sockets and ``False`` for
1260 client-side sockets.
1261
Victor Stinner41f92c22014-10-10 12:05:56 +02001262 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001263
1264.. attribute:: SSLSocket.server_hostname
1265
Victor Stinner41f92c22014-10-10 12:05:56 +02001266 Hostname of the server: :class:`str` type, or ``None`` for server-side
1267 socket or if the hostname was not specified in the constructor.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001268
Victor Stinner41f92c22014-10-10 12:05:56 +02001269 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001270
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001271 .. versionchanged:: 3.7
1272 The attribute is now always ASCII text. When ``server_hostname`` is
1273 an internationalized domain name (IDN), this attribute now stores the
1274 A-label form (``"xn--pythn-mua.org"``), rather than the U-label form
1275 (``"pythön.org"``).
1276
Christian Heimes99a65702016-09-10 23:44:53 +02001277.. attribute:: SSLSocket.session
1278
1279 The :class:`SSLSession` for this SSL connection. The session is available
1280 for client and server side sockets after the TLS handshake has been
1281 performed. For client sockets the session can be set before
1282 :meth:`~SSLSocket.do_handshake` has been called to reuse a session.
1283
1284 .. versionadded:: 3.6
1285
1286.. attribute:: SSLSocket.session_reused
1287
1288 .. versionadded:: 3.6
1289
Antoine Pitrouec883db2010-05-24 21:20:20 +00001290
Antoine Pitrou152efa22010-05-16 18:19:27 +00001291SSL Contexts
1292------------
1293
Antoine Pitroucafaad42010-05-24 15:58:43 +00001294.. versionadded:: 3.2
1295
Antoine Pitroub0182c82010-10-12 20:09:02 +00001296An SSL context holds various data longer-lived than single SSL connections,
1297such as SSL configuration options, certificate(s) and private key(s).
1298It also manages a cache of SSL sessions for server-side sockets, in order
1299to speed up repeated connections from the same clients.
1300
Christian Heimes598894f2016-09-05 23:19:05 +02001301.. class:: SSLContext(protocol=PROTOCOL_TLS)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001302
Christian Heimes598894f2016-09-05 23:19:05 +02001303 Create a new SSL context. You may pass *protocol* which must be one
Antoine Pitroub0182c82010-10-12 20:09:02 +00001304 of the ``PROTOCOL_*`` constants defined in this module.
Christian Heimes598894f2016-09-05 23:19:05 +02001305 :data:`PROTOCOL_TLS` is currently recommended for maximum
1306 interoperability and default value.
Antoine Pitrou5bef4102013-11-23 16:16:29 +01001307
1308 .. seealso::
1309 :func:`create_default_context` lets the :mod:`ssl` module choose
1310 security settings for a given purpose.
Antoine Pitroub0182c82010-10-12 20:09:02 +00001311
Christian Heimes01113fa2016-09-05 23:23:24 +02001312 .. versionchanged:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +02001313
Christian Heimes358cfd42016-09-10 22:43:48 +02001314 The context is created with secure default values. The options
1315 :data:`OP_NO_COMPRESSION`, :data:`OP_CIPHER_SERVER_PREFERENCE`,
1316 :data:`OP_SINGLE_DH_USE`, :data:`OP_SINGLE_ECDH_USE`,
1317 :data:`OP_NO_SSLv2` (except for :data:`PROTOCOL_SSLv2`),
1318 and :data:`OP_NO_SSLv3` (except for :data:`PROTOCOL_SSLv3`) are
1319 set by default. The initial cipher suite list contains only ``HIGH``
1320 ciphers, no ``NULL`` ciphers and no ``MD5`` ciphers (except for
1321 :data:`PROTOCOL_SSLv2`).
Christian Heimes598894f2016-09-05 23:19:05 +02001322
Antoine Pitrou152efa22010-05-16 18:19:27 +00001323
1324:class:`SSLContext` objects have the following methods and attributes:
1325
Christian Heimes9a5395a2013-06-17 15:44:12 +02001326.. method:: SSLContext.cert_store_stats()
1327
1328 Get statistics about quantities of loaded X.509 certificates, count of
1329 X.509 certificates flagged as CA certificates and certificate revocation
1330 lists as dictionary.
1331
1332 Example for a context with one CA cert and one other cert::
1333
1334 >>> context.cert_store_stats()
1335 {'crl': 0, 'x509_ca': 1, 'x509': 2}
1336
1337 .. versionadded:: 3.4
1338
Christian Heimesefff7062013-11-21 03:35:02 +01001339
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001340.. method:: SSLContext.load_cert_chain(certfile, keyfile=None, password=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001341
1342 Load a private key and the corresponding certificate. The *certfile*
1343 string must be the path to a single file in PEM format containing the
1344 certificate as well as any number of CA certificates needed to establish
1345 the certificate's authenticity. The *keyfile* string, if present, must
1346 point to a file containing the private key in. Otherwise the private
1347 key will be taken from *certfile* as well. See the discussion of
1348 :ref:`ssl-certificates` for more information on how the certificate
1349 is stored in the *certfile*.
1350
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001351 The *password* argument may be a function to call to get the password for
1352 decrypting the private key. It will only be called if the private key is
1353 encrypted and a password is necessary. It will be called with no arguments,
1354 and it should return a string, bytes, or bytearray. If the return value is
1355 a string it will be encoded as UTF-8 before using it to decrypt the key.
1356 Alternatively a string, bytes, or bytearray value may be supplied directly
1357 as the *password* argument. It will be ignored if the private key is not
1358 encrypted and no password is needed.
1359
1360 If the *password* argument is not specified and a password is required,
1361 OpenSSL's built-in password prompting mechanism will be used to
1362 interactively prompt the user for a password.
1363
Antoine Pitrou152efa22010-05-16 18:19:27 +00001364 An :class:`SSLError` is raised if the private key doesn't
1365 match with the certificate.
1366
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001367 .. versionchanged:: 3.3
1368 New optional argument *password*.
1369
Christian Heimes72d28502013-11-23 13:56:58 +01001370.. method:: SSLContext.load_default_certs(purpose=Purpose.SERVER_AUTH)
1371
1372 Load a set of default "certification authority" (CA) certificates from
1373 default locations. On Windows it loads CA certs from the ``CA`` and
1374 ``ROOT`` system stores. On other systems it calls
1375 :meth:`SSLContext.set_default_verify_paths`. In the future the method may
1376 load CA certificates from other locations, too.
1377
1378 The *purpose* flag specifies what kind of CA certificates are loaded. The
1379 default settings :data:`Purpose.SERVER_AUTH` loads certificates, that are
1380 flagged and trusted for TLS web server authentication (client side
Christian Heimes6b2ff982013-11-23 14:42:01 +01001381 sockets). :data:`Purpose.CLIENT_AUTH` loads CA certificates for client
Christian Heimes72d28502013-11-23 13:56:58 +01001382 certificate verification on the server side.
1383
1384 .. versionadded:: 3.4
1385
Christian Heimesefff7062013-11-21 03:35:02 +01001386.. method:: SSLContext.load_verify_locations(cafile=None, capath=None, cadata=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001387
1388 Load a set of "certification authority" (CA) certificates used to validate
1389 other peers' certificates when :data:`verify_mode` is other than
1390 :data:`CERT_NONE`. At least one of *cafile* or *capath* must be specified.
1391
Christian Heimes22587792013-11-21 23:56:13 +01001392 This method can also load certification revocation lists (CRLs) in PEM or
Donald Stufft8b852f12014-05-20 12:58:38 -04001393 DER format. In order to make use of CRLs, :attr:`SSLContext.verify_flags`
Christian Heimes22587792013-11-21 23:56:13 +01001394 must be configured properly.
1395
Christian Heimes3e738f92013-06-09 18:07:16 +02001396 The *cafile* string, if present, is the path to a file of concatenated
Antoine Pitrou152efa22010-05-16 18:19:27 +00001397 CA certificates in PEM format. See the discussion of
1398 :ref:`ssl-certificates` for more information about how to arrange the
1399 certificates in this file.
1400
1401 The *capath* string, if present, is
1402 the path to a directory containing several CA certificates in PEM format,
1403 following an `OpenSSL specific layout
Sanyam Khurana338cd832018-01-20 05:55:37 +05301404 <https://www.openssl.org/docs/manmaster/man3/SSL_CTX_load_verify_locations.html>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001405
Christian Heimesefff7062013-11-21 03:35:02 +01001406 The *cadata* object, if present, is either an ASCII string of one or more
Serhiy Storchakab757c832014-12-05 22:25:22 +02001407 PEM-encoded certificates or a :term:`bytes-like object` of DER-encoded
Christian Heimesefff7062013-11-21 03:35:02 +01001408 certificates. Like with *capath* extra lines around PEM-encoded
1409 certificates are ignored but at least one certificate must be present.
1410
1411 .. versionchanged:: 3.4
1412 New optional argument *cadata*
1413
Christian Heimes9a5395a2013-06-17 15:44:12 +02001414.. method:: SSLContext.get_ca_certs(binary_form=False)
1415
1416 Get a list of loaded "certification authority" (CA) certificates. If the
1417 ``binary_form`` parameter is :const:`False` each list
1418 entry is a dict like the output of :meth:`SSLSocket.getpeercert`. Otherwise
1419 the method returns a list of DER-encoded certificates. The returned list
1420 does not contain certificates from *capath* unless a certificate was
1421 requested and loaded by a SSL connection.
1422
Antoine Pitrou97aa9532015-04-13 21:06:15 +02001423 .. note::
1424 Certificates in a capath directory aren't loaded unless they have
1425 been used at least once.
1426
Larry Hastingsd36fc432013-08-03 02:49:53 -07001427 .. versionadded:: 3.4
Christian Heimes9a5395a2013-06-17 15:44:12 +02001428
Christian Heimes25bfcd52016-09-06 00:04:45 +02001429.. method:: SSLContext.get_ciphers()
1430
1431 Get a list of enabled ciphers. The list is in order of cipher priority.
1432 See :meth:`SSLContext.set_ciphers`.
1433
1434 Example::
1435
1436 >>> ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
1437 >>> ctx.set_ciphers('ECDHE+AESGCM:!ECDSA')
1438 >>> ctx.get_ciphers() # OpenSSL 1.0.x
1439 [{'alg_bits': 256,
1440 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA '
1441 'Enc=AESGCM(256) Mac=AEAD',
1442 'id': 50380848,
1443 'name': 'ECDHE-RSA-AES256-GCM-SHA384',
1444 'protocol': 'TLSv1/SSLv3',
1445 'strength_bits': 256},
1446 {'alg_bits': 128,
1447 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA '
1448 'Enc=AESGCM(128) Mac=AEAD',
1449 'id': 50380847,
1450 'name': 'ECDHE-RSA-AES128-GCM-SHA256',
1451 'protocol': 'TLSv1/SSLv3',
1452 'strength_bits': 128}]
1453
1454 On OpenSSL 1.1 and newer the cipher dict contains additional fields::
Marco Buttu7b2491a2017-04-13 16:17:59 +02001455
Christian Heimes25bfcd52016-09-06 00:04:45 +02001456 >>> ctx.get_ciphers() # OpenSSL 1.1+
1457 [{'aead': True,
1458 'alg_bits': 256,
1459 'auth': 'auth-rsa',
1460 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA '
1461 'Enc=AESGCM(256) Mac=AEAD',
1462 'digest': None,
1463 'id': 50380848,
1464 'kea': 'kx-ecdhe',
1465 'name': 'ECDHE-RSA-AES256-GCM-SHA384',
1466 'protocol': 'TLSv1.2',
1467 'strength_bits': 256,
1468 'symmetric': 'aes-256-gcm'},
1469 {'aead': True,
1470 'alg_bits': 128,
1471 'auth': 'auth-rsa',
1472 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA '
1473 'Enc=AESGCM(128) Mac=AEAD',
1474 'digest': None,
1475 'id': 50380847,
1476 'kea': 'kx-ecdhe',
1477 'name': 'ECDHE-RSA-AES128-GCM-SHA256',
1478 'protocol': 'TLSv1.2',
1479 'strength_bits': 128,
1480 'symmetric': 'aes-128-gcm'}]
1481
1482 Availability: OpenSSL 1.0.2+
1483
1484 .. versionadded:: 3.6
1485
Antoine Pitrou664c2d12010-11-17 20:29:42 +00001486.. method:: SSLContext.set_default_verify_paths()
1487
1488 Load a set of default "certification authority" (CA) certificates from
1489 a filesystem path defined when building the OpenSSL library. Unfortunately,
1490 there's no easy way to know whether this method succeeds: no error is
1491 returned if no certificates are to be found. When the OpenSSL library is
1492 provided as part of the operating system, though, it is likely to be
1493 configured properly.
1494
Antoine Pitrou152efa22010-05-16 18:19:27 +00001495.. method:: SSLContext.set_ciphers(ciphers)
1496
1497 Set the available ciphers for sockets created with this context.
1498 It should be a string in the `OpenSSL cipher list format
Felipe19e4d932017-09-20 20:20:18 +02001499 <https://wiki.openssl.org/index.php/Manual:Ciphers(1)#CIPHER_LIST_FORMAT>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001500 If no cipher can be selected (because compile-time options or other
1501 configuration forbids use of all the specified ciphers), an
1502 :class:`SSLError` will be raised.
1503
1504 .. note::
1505 when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will
1506 give the currently selected cipher.
1507
Benjamin Petersoncca27322015-01-23 16:35:37 -05001508.. method:: SSLContext.set_alpn_protocols(protocols)
1509
1510 Specify which protocols the socket should advertise during the SSL/TLS
1511 handshake. It should be a list of ASCII strings, like ``['http/1.1',
1512 'spdy/2']``, ordered by preference. The selection of a protocol will happen
1513 during the handshake, and will play out according to :rfc:`7301`. After a
1514 successful handshake, the :meth:`SSLSocket.selected_alpn_protocol` method will
1515 return the agreed-upon protocol.
1516
1517 This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is
1518 False.
1519
Christian Heimes7b40cb72017-08-15 10:33:43 +02001520 OpenSSL 1.1.0 to 1.1.0e will abort the handshake and raise :exc:`SSLError`
1521 when both sides support ALPN but cannot agree on a protocol. 1.1.0f+
1522 behaves like 1.0.2, :meth:`SSLSocket.selected_alpn_protocol` returns None.
Christian Heimes598894f2016-09-05 23:19:05 +02001523
Benjamin Petersoncca27322015-01-23 16:35:37 -05001524 .. versionadded:: 3.5
1525
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001526.. method:: SSLContext.set_npn_protocols(protocols)
1527
R David Murrayc7f75792013-06-26 15:11:12 -04001528 Specify which protocols the socket should advertise during the SSL/TLS
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001529 handshake. It should be a list of strings, like ``['http/1.1', 'spdy/2']``,
1530 ordered by preference. The selection of a protocol will happen during the
Sanyam Khurana338cd832018-01-20 05:55:37 +05301531 handshake, and will play out according to the `Application Layer Protocol Negotiation
1532 <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_. After a
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001533 successful handshake, the :meth:`SSLSocket.selected_npn_protocol` method will
1534 return the agreed-upon protocol.
1535
1536 This method will raise :exc:`NotImplementedError` if :data:`HAS_NPN` is
1537 False.
1538
1539 .. versionadded:: 3.3
1540
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001541.. attribute:: SSLContext.sni_callback
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001542
1543 Register a callback function that will be called after the TLS Client Hello
1544 handshake message has been received by the SSL/TLS server when the TLS client
1545 specifies a server name indication. The server name indication mechanism
1546 is specified in :rfc:`6066` section 3 - Server Name Indication.
1547
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001548 Only one callback can be set per ``SSLContext``. If *sni_callback*
1549 is set to ``None`` then the callback is disabled. Calling this function a
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001550 subsequent time will disable the previously registered callback.
1551
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001552 The callback function will be called with three
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001553 arguments; the first being the :class:`ssl.SSLSocket`, the second is a string
1554 that represents the server name that the client is intending to communicate
Antoine Pitrou50b24d02013-04-11 20:48:42 +02001555 (or :const:`None` if the TLS Client Hello does not contain a server name)
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001556 and the third argument is the original :class:`SSLContext`. The server name
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001557 argument is text. For internationalized domain name, the server
1558 name is an IDN A-label (``"xn--pythn-mua.org"``).
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001559
1560 A typical use of this callback is to change the :class:`ssl.SSLSocket`'s
1561 :attr:`SSLSocket.context` attribute to a new object of type
1562 :class:`SSLContext` representing a certificate chain that matches the server
1563 name.
1564
1565 Due to the early negotiation phase of the TLS connection, only limited
1566 methods and attributes are usable like
Benjamin Petersoncca27322015-01-23 16:35:37 -05001567 :meth:`SSLSocket.selected_alpn_protocol` and :attr:`SSLSocket.context`.
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001568 :meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.getpeercert`,
1569 :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compress` methods require that
1570 the TLS connection has progressed beyond the TLS Client Hello and therefore
1571 will not contain return meaningful values nor can they be called safely.
1572
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001573 The *sni_callback* function must return ``None`` to allow the
Terry Jan Reedy8e7586b2013-03-11 18:38:13 -04001574 TLS negotiation to continue. If a TLS failure is required, a constant
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001575 :const:`ALERT_DESCRIPTION_* <ALERT_DESCRIPTION_INTERNAL_ERROR>` can be
1576 returned. Other return values will result in a TLS fatal error with
1577 :const:`ALERT_DESCRIPTION_INTERNAL_ERROR`.
1578
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001579 If an exception is raised from the *sni_callback* function the TLS
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001580 connection will terminate with a fatal TLS alert message
1581 :const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`.
1582
1583 This method will raise :exc:`NotImplementedError` if the OpenSSL library
1584 had OPENSSL_NO_TLSEXT defined when it was built.
1585
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001586 .. versionadded:: 3.7
1587
1588.. attribute:: SSLContext.set_servername_callback(server_name_callback)
1589
1590 This is a legacy API retained for backwards compatibility. When possible,
1591 you should use :attr:`sni_callback` instead. The given *server_name_callback*
1592 is similar to *sni_callback*, except that when the server hostname is an
1593 IDN-encoded internationalized domain name, the *server_name_callback*
1594 receives a decoded U-label (``"pythön.org"``).
1595
1596 If there is an decoding error on the server name, the TLS connection will
1597 terminate with an :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` fatal TLS
1598 alert message to the client.
1599
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001600 .. versionadded:: 3.4
1601
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001602.. method:: SSLContext.load_dh_params(dhfile)
1603
1604 Load the key generation parameters for Diffie-Helman (DH) key exchange.
1605 Using DH key exchange improves forward secrecy at the expense of
1606 computational resources (both on the server and on the client).
1607 The *dhfile* parameter should be the path to a file containing DH
1608 parameters in PEM format.
1609
1610 This setting doesn't apply to client sockets. You can also use the
1611 :data:`OP_SINGLE_DH_USE` option to further improve security.
1612
1613 .. versionadded:: 3.3
1614
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001615.. method:: SSLContext.set_ecdh_curve(curve_name)
1616
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001617 Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH) key
1618 exchange. ECDH is significantly faster than regular DH while arguably
1619 as secure. The *curve_name* parameter should be a string describing
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001620 a well-known elliptic curve, for example ``prime256v1`` for a widely
1621 supported curve.
1622
1623 This setting doesn't apply to client sockets. You can also use the
1624 :data:`OP_SINGLE_ECDH_USE` option to further improve security.
1625
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +03001626 This method is not available if :data:`HAS_ECDH` is ``False``.
Antoine Pitrou501da612011-12-21 09:27:41 +01001627
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001628 .. versionadded:: 3.3
1629
1630 .. seealso::
Sanyam Khurana1b4587a2017-12-06 22:09:33 +05301631 `SSL/TLS & Perfect Forward Secrecy <https://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy>`_
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001632 Vincent Bernat.
1633
Antoine Pitroud5323212010-10-22 18:19:07 +00001634.. method:: SSLContext.wrap_socket(sock, server_side=False, \
1635 do_handshake_on_connect=True, suppress_ragged_eofs=True, \
Christian Heimes99a65702016-09-10 23:44:53 +02001636 server_hostname=None, session=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001637
Christian Heimes4df60f12017-09-15 20:26:05 +02001638 Wrap an existing Python socket *sock* and return an instance of
1639 :attr:`SSLContext.sslsocket_class` (default :class:`SSLSocket`).
1640 *sock* must be a :data:`~socket.SOCK_STREAM` socket; other socket
Antoine Pitrou3e86ba42013-12-28 17:26:33 +01001641 types are unsupported.
1642
1643 The returned SSL socket is tied to the context, its settings and
Antoine Pitrou152efa22010-05-16 18:19:27 +00001644 certificates. The parameters *server_side*, *do_handshake_on_connect*
1645 and *suppress_ragged_eofs* have the same meaning as in the top-level
1646 :func:`wrap_socket` function.
1647
Antoine Pitroud5323212010-10-22 18:19:07 +00001648 On client connections, the optional parameter *server_hostname* specifies
1649 the hostname of the service which we are connecting to. This allows a
1650 single server to host multiple SSL-based services with distinct certificates,
Benjamin Peterson7243b572014-11-23 17:04:34 -06001651 quite similarly to HTTP virtual hosts. Specifying *server_hostname* will
1652 raise a :exc:`ValueError` if *server_side* is true.
1653
Christian Heimes99a65702016-09-10 23:44:53 +02001654 *session*, see :attr:`~SSLSocket.session`.
1655
Benjamin Peterson7243b572014-11-23 17:04:34 -06001656 .. versionchanged:: 3.5
1657 Always allow a server_hostname to be passed, even if OpenSSL does not
1658 have SNI.
Antoine Pitroud5323212010-10-22 18:19:07 +00001659
Christian Heimes99a65702016-09-10 23:44:53 +02001660 .. versionchanged:: 3.6
1661 *session* argument was added.
1662
Christian Heimes4df60f12017-09-15 20:26:05 +02001663 .. versionchanged:: 3.7
1664 The method returns on instance of :attr:`SSLContext.sslsocket_class`
1665 instead of hard-coded :class:`SSLSocket`.
1666
1667.. attribute:: SSLContext.sslsocket_class
1668
1669 The return type of :meth:`SSLContext.wrap_sockets`, defaults to
1670 :class:`SSLSocket`. The attribute can be overridden on instance of class
1671 in order to return a custom subclass of :class:`SSLSocket`.
1672
1673 .. versionadded:: 3.7
1674
Victor Stinner805b2622014-10-10 12:49:08 +02001675.. method:: SSLContext.wrap_bio(incoming, outgoing, server_side=False, \
Christian Heimes99a65702016-09-10 23:44:53 +02001676 server_hostname=None, session=None)
Victor Stinner805b2622014-10-10 12:49:08 +02001677
Christian Heimes4df60f12017-09-15 20:26:05 +02001678 Wrap the BIO objects *incoming* and *outgoing* and return an instance of
1679 attr:`SSLContext.sslobject_class` (default :class:`SSLObject`). The SSL
1680 routines will read input data from the incoming BIO and write data to the
1681 outgoing BIO.
Victor Stinner805b2622014-10-10 12:49:08 +02001682
Christian Heimes99a65702016-09-10 23:44:53 +02001683 The *server_side*, *server_hostname* and *session* parameters have the
1684 same meaning as in :meth:`SSLContext.wrap_socket`.
1685
1686 .. versionchanged:: 3.6
1687 *session* argument was added.
Victor Stinner805b2622014-10-10 12:49:08 +02001688
Christian Heimes4df60f12017-09-15 20:26:05 +02001689 .. versionchanged:: 3.7
1690 The method returns on instance of :attr:`SSLContext.sslobject_class`
1691 instead of hard-coded :class:`SSLObject`.
1692
1693.. attribute:: SSLContext.sslobject_class
1694
1695 The return type of :meth:`SSLContext.wrap_bio`, defaults to
1696 :class:`SSLObject`. The attribute can be overridden on instance of class
1697 in order to return a custom subclass of :class:`SSLObject`.
1698
1699 .. versionadded:: 3.7
1700
Antoine Pitroub0182c82010-10-12 20:09:02 +00001701.. method:: SSLContext.session_stats()
1702
1703 Get statistics about the SSL sessions created or managed by this context.
Sanyam Khurana338cd832018-01-20 05:55:37 +05301704 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 +00001705 numeric values. For example, here is the total number of hits and misses
1706 in the session cache since the context was created::
1707
1708 >>> stats = context.session_stats()
1709 >>> stats['hits'], stats['misses']
1710 (0, 0)
1711
Christian Heimes1aa9a752013-12-02 02:41:19 +01001712.. attribute:: SSLContext.check_hostname
1713
Berker Peksag315e1042015-05-19 01:36:55 +03001714 Whether to match the peer cert's hostname with :func:`match_hostname` in
Christian Heimes1aa9a752013-12-02 02:41:19 +01001715 :meth:`SSLSocket.do_handshake`. The context's
1716 :attr:`~SSLContext.verify_mode` must be set to :data:`CERT_OPTIONAL` or
1717 :data:`CERT_REQUIRED`, and you must pass *server_hostname* to
Christian Heimese82c0342017-09-15 20:29:57 +02001718 :meth:`~SSLContext.wrap_socket` in order to match the hostname. Enabling
1719 hostname checking automatically sets :attr:`~SSLContext.verify_mode` from
1720 :data:`CERT_NONE` to :data:`CERT_REQUIRED`. It cannot be set back to
1721 :data:`CERT_NONE` as long as hostname checking is enabled.
Christian Heimes1aa9a752013-12-02 02:41:19 +01001722
1723 Example::
1724
1725 import socket, ssl
1726
Miss Islington (bot)e5d38de2018-02-20 22:02:18 -08001727 context = ssl.SSLContext()
Christian Heimes1aa9a752013-12-02 02:41:19 +01001728 context.verify_mode = ssl.CERT_REQUIRED
1729 context.check_hostname = True
1730 context.load_default_certs()
1731
1732 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Berker Peksag38bf87c2014-07-17 05:00:36 +03001733 ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
1734 ssl_sock.connect(('www.verisign.com', 443))
Christian Heimes1aa9a752013-12-02 02:41:19 +01001735
1736 .. versionadded:: 3.4
1737
Christian Heimese82c0342017-09-15 20:29:57 +02001738 .. versionchanged:: 3.7
1739
1740 :attr:`~SSLContext.verify_mode` is now automatically changed
1741 to :data:`CERT_REQUIRED` when hostname checking is enabled and
1742 :attr:`~SSLContext.verify_mode` is :data:`CERT_NONE`. Previously
1743 the same operation would have failed with a :exc:`ValueError`.
1744
Christian Heimes1aa9a752013-12-02 02:41:19 +01001745 .. note::
1746
1747 This features requires OpenSSL 0.9.8f or newer.
1748
Antoine Pitroub5218772010-05-21 09:56:06 +00001749.. attribute:: SSLContext.options
1750
1751 An integer representing the set of SSL options enabled on this context.
1752 The default value is :data:`OP_ALL`, but you can specify other options
1753 such as :data:`OP_NO_SSLv2` by ORing them together.
1754
1755 .. note::
1756 With versions of OpenSSL older than 0.9.8m, it is only possible
1757 to set options, not to clear them. Attempting to clear an option
1758 (by resetting the corresponding bits) will raise a ``ValueError``.
1759
Christian Heimes3aeacad2016-09-10 00:19:35 +02001760 .. versionchanged:: 3.6
1761 :attr:`SSLContext.options` returns :class:`Options` flags:
1762
Marco Buttu7b2491a2017-04-13 16:17:59 +02001763 >>> ssl.create_default_context().options # doctest: +SKIP
Christian Heimes3aeacad2016-09-10 00:19:35 +02001764 <Options.OP_ALL|OP_NO_SSLv3|OP_NO_SSLv2|OP_NO_COMPRESSION: 2197947391>
1765
Antoine Pitrou152efa22010-05-16 18:19:27 +00001766.. attribute:: SSLContext.protocol
1767
1768 The protocol version chosen when constructing the context. This attribute
1769 is read-only.
1770
Christian Heimes61d478c2018-01-27 15:51:38 +01001771.. attribute:: SSLContext.hostname_checks_common_name
1772
1773 Whether :attr:`~SSLContext.check_hostname` falls back to verify the cert's
1774 subject common name in the absence of a subject alternative name
1775 extension (default: true).
1776
1777 .. versionadded:: 3.7
1778
1779 .. note::
1780 Only writeable with OpenSSL 1.1.0 or higher.
1781
Christian Heimes22587792013-11-21 23:56:13 +01001782.. attribute:: SSLContext.verify_flags
1783
1784 The flags for certificate verification operations. You can set flags like
1785 :data:`VERIFY_CRL_CHECK_LEAF` by ORing them together. By default OpenSSL
1786 does neither require nor verify certificate revocation lists (CRLs).
Christian Heimes2427b502013-11-23 11:24:32 +01001787 Available only with openssl version 0.9.8+.
Christian Heimes22587792013-11-21 23:56:13 +01001788
1789 .. versionadded:: 3.4
1790
Christian Heimes3aeacad2016-09-10 00:19:35 +02001791 .. versionchanged:: 3.6
1792 :attr:`SSLContext.verify_flags` returns :class:`VerifyFlags` flags:
1793
Marco Buttu7b2491a2017-04-13 16:17:59 +02001794 >>> ssl.create_default_context().verify_flags # doctest: +SKIP
Christian Heimes3aeacad2016-09-10 00:19:35 +02001795 <VerifyFlags.VERIFY_X509_TRUSTED_FIRST: 32768>
1796
Antoine Pitrou152efa22010-05-16 18:19:27 +00001797.. attribute:: SSLContext.verify_mode
1798
1799 Whether to try to verify other peers' certificates and how to behave
1800 if verification fails. This attribute must be one of
1801 :data:`CERT_NONE`, :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`.
1802
Christian Heimes3aeacad2016-09-10 00:19:35 +02001803 .. versionchanged:: 3.6
1804 :attr:`SSLContext.verify_mode` returns :class:`VerifyMode` enum:
1805
1806 >>> ssl.create_default_context().verify_mode
1807 <VerifyMode.CERT_REQUIRED: 2>
Antoine Pitrou152efa22010-05-16 18:19:27 +00001808
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001809.. index:: single: certificates
1810
1811.. index:: single: X509 certificate
1812
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001813.. _ssl-certificates:
1814
Thomas Woutersed03b412007-08-28 21:37:11 +00001815Certificates
1816------------
1817
Georg Brandl7f01a132009-09-16 15:58:14 +00001818Certificates in general are part of a public-key / private-key system. In this
1819system, each *principal*, (which may be a machine, or a person, or an
1820organization) is assigned a unique two-part encryption key. One part of the key
1821is public, and is called the *public key*; the other part is kept secret, and is
1822called the *private key*. The two parts are related, in that if you encrypt a
1823message with one of the parts, you can decrypt it with the other part, and
1824**only** with the other part.
Thomas Woutersed03b412007-08-28 21:37:11 +00001825
Georg Brandl7f01a132009-09-16 15:58:14 +00001826A certificate contains information about two principals. It contains the name
1827of a *subject*, and the subject's public key. It also contains a statement by a
1828second principal, the *issuer*, that the subject is who he claims to be, and
1829that this is indeed the subject's public key. The issuer's statement is signed
1830with the issuer's private key, which only the issuer knows. However, anyone can
1831verify the issuer's statement by finding the issuer's public key, decrypting the
1832statement with it, and comparing it to the other information in the certificate.
1833The certificate also contains information about the time period over which it is
1834valid. This is expressed as two fields, called "notBefore" and "notAfter".
Thomas Woutersed03b412007-08-28 21:37:11 +00001835
Georg Brandl7f01a132009-09-16 15:58:14 +00001836In the Python use of certificates, a client or server can use a certificate to
1837prove who they are. The other side of a network connection can also be required
1838to produce a certificate, and that certificate can be validated to the
1839satisfaction of the client or server that requires such validation. The
1840connection attempt can be set to raise an exception if the validation fails.
1841Validation is done automatically, by the underlying OpenSSL framework; the
1842application need not concern itself with its mechanics. But the application
1843does usually need to provide sets of certificates to allow this process to take
1844place.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001845
Georg Brandl7f01a132009-09-16 15:58:14 +00001846Python uses files to contain certificates. They should be formatted as "PEM"
1847(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
1848and a footer line::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001849
1850 -----BEGIN CERTIFICATE-----
1851 ... (certificate in base64 PEM encoding) ...
1852 -----END CERTIFICATE-----
1853
Antoine Pitrou152efa22010-05-16 18:19:27 +00001854Certificate chains
1855^^^^^^^^^^^^^^^^^^
1856
Georg Brandl7f01a132009-09-16 15:58:14 +00001857The Python files which contain certificates can contain a sequence of
1858certificates, sometimes called a *certificate chain*. This chain should start
1859with the specific certificate for the principal who "is" the client or server,
1860and then the certificate for the issuer of that certificate, and then the
1861certificate for the issuer of *that* certificate, and so on up the chain till
1862you get to a certificate which is *self-signed*, that is, a certificate which
1863has the same subject and issuer, sometimes called a *root certificate*. The
1864certificates should just be concatenated together in the certificate file. For
1865example, suppose we had a three certificate chain, from our server certificate
1866to the certificate of the certification authority that signed our server
1867certificate, to the root certificate of the agency which issued the
1868certification authority's certificate::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001869
1870 -----BEGIN CERTIFICATE-----
1871 ... (certificate for your server)...
1872 -----END CERTIFICATE-----
1873 -----BEGIN CERTIFICATE-----
1874 ... (the certificate for the CA)...
1875 -----END CERTIFICATE-----
1876 -----BEGIN CERTIFICATE-----
1877 ... (the root certificate for the CA's issuer)...
1878 -----END CERTIFICATE-----
1879
Antoine Pitrou152efa22010-05-16 18:19:27 +00001880CA certificates
1881^^^^^^^^^^^^^^^
1882
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001883If you are going to require validation of the other side of the connection's
1884certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandl7f01a132009-09-16 15:58:14 +00001885chains for each issuer you are willing to trust. Again, this file just contains
1886these chains concatenated together. For validation, Python will use the first
Donald Stufft41374652014-03-24 19:26:03 -04001887chain it finds in the file which matches. The platform's certificates file can
1888be used by calling :meth:`SSLContext.load_default_certs`, this is done
1889automatically with :func:`.create_default_context`.
Thomas Woutersed03b412007-08-28 21:37:11 +00001890
Antoine Pitrou152efa22010-05-16 18:19:27 +00001891Combined key and certificate
1892^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1893
1894Often the private key is stored in the same file as the certificate; in this
1895case, only the ``certfile`` parameter to :meth:`SSLContext.load_cert_chain`
1896and :func:`wrap_socket` needs to be passed. If the private key is stored
1897with the certificate, it should come before the first certificate in
1898the certificate chain::
1899
1900 -----BEGIN RSA PRIVATE KEY-----
1901 ... (private key in base64 encoding) ...
1902 -----END RSA PRIVATE KEY-----
1903 -----BEGIN CERTIFICATE-----
1904 ... (certificate in base64 PEM encoding) ...
1905 -----END CERTIFICATE-----
1906
1907Self-signed certificates
1908^^^^^^^^^^^^^^^^^^^^^^^^
1909
Georg Brandl7f01a132009-09-16 15:58:14 +00001910If you are going to create a server that provides SSL-encrypted connection
1911services, you will need to acquire a certificate for that service. There are
1912many ways of acquiring appropriate certificates, such as buying one from a
1913certification authority. Another common practice is to generate a self-signed
1914certificate. The simplest way to do this is with the OpenSSL package, using
1915something like the following::
Thomas Woutersed03b412007-08-28 21:37:11 +00001916
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001917 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
1918 Generating a 1024 bit RSA private key
1919 .......++++++
1920 .............................++++++
1921 writing new private key to 'cert.pem'
1922 -----
1923 You are about to be asked to enter information that will be incorporated
1924 into your certificate request.
1925 What you are about to enter is what is called a Distinguished Name or a DN.
1926 There are quite a few fields but you can leave some blank
1927 For some fields there will be a default value,
1928 If you enter '.', the field will be left blank.
1929 -----
1930 Country Name (2 letter code) [AU]:US
1931 State or Province Name (full name) [Some-State]:MyState
1932 Locality Name (eg, city) []:Some City
1933 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
1934 Organizational Unit Name (eg, section) []:My Group
1935 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
1936 Email Address []:ops@myserver.mygroup.myorganization.com
1937 %
Thomas Woutersed03b412007-08-28 21:37:11 +00001938
Georg Brandl7f01a132009-09-16 15:58:14 +00001939The disadvantage of a self-signed certificate is that it is its own root
1940certificate, and no one else will have it in their cache of known (and trusted)
1941root certificates.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001942
1943
Thomas Woutersed03b412007-08-28 21:37:11 +00001944Examples
1945--------
1946
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001947Testing for SSL support
1948^^^^^^^^^^^^^^^^^^^^^^^
1949
Georg Brandl7f01a132009-09-16 15:58:14 +00001950To test for the presence of SSL support in a Python installation, user code
1951should use the following idiom::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001952
1953 try:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001954 import ssl
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001955 except ImportError:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001956 pass
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001957 else:
Serhiy Storchakadba90392016-05-10 12:01:23 +03001958 ... # do something that requires SSL support
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001959
1960Client-side operation
1961^^^^^^^^^^^^^^^^^^^^^
1962
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001963This example creates a SSL context with the recommended security settings
1964for client sockets, including automatic certificate verification::
Thomas Woutersed03b412007-08-28 21:37:11 +00001965
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001966 >>> context = ssl.create_default_context()
Thomas Woutersed03b412007-08-28 21:37:11 +00001967
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001968If you prefer to tune security settings yourself, you might create
1969a context from scratch (but beware that you might not get the settings
1970right)::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001971
Miss Islington (bot)e5d38de2018-02-20 22:02:18 -08001972 >>> context = ssl.SSLContext()
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001973 >>> context.verify_mode = ssl.CERT_REQUIRED
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001974 >>> context.check_hostname = True
Antoine Pitrou152efa22010-05-16 18:19:27 +00001975 >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
1976
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001977(this snippet assumes your operating system places a bundle of all CA
1978certificates in ``/etc/ssl/certs/ca-bundle.crt``; if not, you'll get an
1979error and have to adjust the location)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001980
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001981When you use the context to connect to a server, :const:`CERT_REQUIRED`
Antoine Pitrou152efa22010-05-16 18:19:27 +00001982validates the server certificate: it ensures that the server certificate
1983was signed with one of the CA certificates, and checks the signature for
1984correctness::
1985
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001986 >>> conn = context.wrap_socket(socket.socket(socket.AF_INET),
1987 ... server_hostname="www.python.org")
1988 >>> conn.connect(("www.python.org", 443))
Antoine Pitrou152efa22010-05-16 18:19:27 +00001989
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001990You may then fetch the certificate::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001991
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001992 >>> cert = conn.getpeercert()
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001993
1994Visual inspection shows that the certificate does identify the desired service
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001995(that is, the HTTPS host ``www.python.org``)::
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001996
1997 >>> pprint.pprint(cert)
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001998 {'OCSP': ('http://ocsp.digicert.com',),
1999 'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',),
2000 'crlDistributionPoints': ('http://crl3.digicert.com/sha2-ev-server-g1.crl',
2001 'http://crl4.digicert.com/sha2-ev-server-g1.crl'),
2002 'issuer': ((('countryName', 'US'),),
2003 (('organizationName', 'DigiCert Inc'),),
2004 (('organizationalUnitName', 'www.digicert.com'),),
2005 (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),)),
2006 'notAfter': 'Sep 9 12:00:00 2016 GMT',
2007 'notBefore': 'Sep 5 00:00:00 2014 GMT',
2008 'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26',
2009 'subject': ((('businessCategory', 'Private Organization'),),
2010 (('1.3.6.1.4.1.311.60.2.1.3', 'US'),),
2011 (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),),
2012 (('serialNumber', '3359300'),),
2013 (('streetAddress', '16 Allen Rd'),),
2014 (('postalCode', '03894-4801'),),
2015 (('countryName', 'US'),),
2016 (('stateOrProvinceName', 'NH'),),
2017 (('localityName', 'Wolfeboro,'),),
2018 (('organizationName', 'Python Software Foundation'),),
2019 (('commonName', 'www.python.org'),)),
2020 'subjectAltName': (('DNS', 'www.python.org'),
2021 ('DNS', 'python.org'),
2022 ('DNS', 'pypi.python.org'),
2023 ('DNS', 'docs.python.org'),
2024 ('DNS', 'testpypi.python.org'),
2025 ('DNS', 'bugs.python.org'),
2026 ('DNS', 'wiki.python.org'),
2027 ('DNS', 'hg.python.org'),
2028 ('DNS', 'mail.python.org'),
2029 ('DNS', 'packaging.python.org'),
2030 ('DNS', 'pythonhosted.org'),
2031 ('DNS', 'www.pythonhosted.org'),
2032 ('DNS', 'test.pythonhosted.org'),
2033 ('DNS', 'us.pycon.org'),
2034 ('DNS', 'id.python.org')),
Antoine Pitrou441ae042012-01-06 20:06:15 +01002035 'version': 3}
Antoine Pitrou152efa22010-05-16 18:19:27 +00002036
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002037Now the SSL channel is established and the certificate verified, you can
2038proceed to talk with the server::
Antoine Pitrou152efa22010-05-16 18:19:27 +00002039
Antoine Pitroudab64262010-09-19 13:31:06 +00002040 >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n")
2041 >>> pprint.pprint(conn.recv(1024).split(b"\r\n"))
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002042 [b'HTTP/1.1 200 OK',
2043 b'Date: Sat, 18 Oct 2014 18:27:20 GMT',
2044 b'Server: nginx',
2045 b'Content-Type: text/html; charset=utf-8',
2046 b'X-Frame-Options: SAMEORIGIN',
2047 b'Content-Length: 45679',
2048 b'Accept-Ranges: bytes',
2049 b'Via: 1.1 varnish',
2050 b'Age: 2188',
2051 b'X-Served-By: cache-lcy1134-LCY',
2052 b'X-Cache: HIT',
2053 b'X-Cache-Hits: 11',
2054 b'Vary: Cookie',
2055 b'Strict-Transport-Security: max-age=63072000; includeSubDomains',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002056 b'Connection: close',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002057 b'',
2058 b'']
2059
Antoine Pitrou152efa22010-05-16 18:19:27 +00002060See the discussion of :ref:`ssl-security` below.
2061
2062
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002063Server-side operation
2064^^^^^^^^^^^^^^^^^^^^^
2065
Antoine Pitrou152efa22010-05-16 18:19:27 +00002066For server operation, typically you'll need to have a server certificate, and
2067private key, each in a file. You'll first create a context holding the key
2068and the certificate, so that clients can check your authenticity. Then
2069you'll open a socket, bind it to a port, call :meth:`listen` on it, and start
2070waiting for clients to connect::
Thomas Woutersed03b412007-08-28 21:37:11 +00002071
2072 import socket, ssl
2073
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002074 context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
Antoine Pitrou152efa22010-05-16 18:19:27 +00002075 context.load_cert_chain(certfile="mycertfile", keyfile="mykeyfile")
2076
Thomas Woutersed03b412007-08-28 21:37:11 +00002077 bindsocket = socket.socket()
2078 bindsocket.bind(('myaddr.mydomain.com', 10023))
2079 bindsocket.listen(5)
2080
Antoine Pitrou152efa22010-05-16 18:19:27 +00002081When a client connects, you'll call :meth:`accept` on the socket to get the
2082new socket from the other end, and use the context's :meth:`SSLContext.wrap_socket`
2083method to create a server-side SSL socket for the connection::
Thomas Woutersed03b412007-08-28 21:37:11 +00002084
2085 while True:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002086 newsocket, fromaddr = bindsocket.accept()
2087 connstream = context.wrap_socket(newsocket, server_side=True)
2088 try:
2089 deal_with_client(connstream)
2090 finally:
Antoine Pitroub205d582011-01-02 22:09:27 +00002091 connstream.shutdown(socket.SHUT_RDWR)
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002092 connstream.close()
Thomas Woutersed03b412007-08-28 21:37:11 +00002093
Antoine Pitrou152efa22010-05-16 18:19:27 +00002094Then you'll read data from the ``connstream`` and do something with it till you
Georg Brandl7f01a132009-09-16 15:58:14 +00002095are finished with the client (or the client is finished with you)::
Thomas Woutersed03b412007-08-28 21:37:11 +00002096
2097 def deal_with_client(connstream):
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002098 data = connstream.recv(1024)
2099 # empty data means the client is finished with us
2100 while data:
2101 if not do_something(connstream, data):
2102 # we'll assume do_something returns False
2103 # when we're finished with client
2104 break
2105 data = connstream.recv(1024)
2106 # finished with client
Thomas Woutersed03b412007-08-28 21:37:11 +00002107
Antoine Pitrou152efa22010-05-16 18:19:27 +00002108And go back to listening for new client connections (of course, a real server
2109would probably handle each client connection in a separate thread, or put
Victor Stinner29611452014-10-10 12:52:43 +02002110the sockets in :ref:`non-blocking mode <ssl-nonblocking>` and use an event loop).
Antoine Pitrou152efa22010-05-16 18:19:27 +00002111
2112
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002113.. _ssl-nonblocking:
2114
2115Notes on non-blocking sockets
2116-----------------------------
2117
Antoine Pitroub4bebda2014-04-29 10:03:28 +02002118SSL sockets behave slightly different than regular sockets in
2119non-blocking mode. When working with non-blocking sockets, there are
2120thus several things you need to be aware of:
2121
2122- Most :class:`SSLSocket` methods will raise either
2123 :exc:`SSLWantWriteError` or :exc:`SSLWantReadError` instead of
2124 :exc:`BlockingIOError` if an I/O operation would
2125 block. :exc:`SSLWantReadError` will be raised if a read operation on
2126 the underlying socket is necessary, and :exc:`SSLWantWriteError` for
2127 a write operation on the underlying socket. Note that attempts to
2128 *write* to an SSL socket may require *reading* from the underlying
2129 socket first, and attempts to *read* from the SSL socket may require
2130 a prior *write* to the underlying socket.
2131
2132 .. versionchanged:: 3.5
2133
2134 In earlier Python versions, the :meth:`!SSLSocket.send` method
2135 returned zero instead of raising :exc:`SSLWantWriteError` or
2136 :exc:`SSLWantReadError`.
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002137
2138- Calling :func:`~select.select` tells you that the OS-level socket can be
2139 read from (or written to), but it does not imply that there is sufficient
2140 data at the upper SSL layer. For example, only part of an SSL frame might
2141 have arrived. Therefore, you must be ready to handle :meth:`SSLSocket.recv`
2142 and :meth:`SSLSocket.send` failures, and retry after another call to
2143 :func:`~select.select`.
2144
Antoine Pitrou75e03382014-05-18 00:55:13 +02002145- Conversely, since the SSL layer has its own framing, a SSL socket may
2146 still have data available for reading without :func:`~select.select`
2147 being aware of it. Therefore, you should first call
2148 :meth:`SSLSocket.recv` to drain any potentially available data, and then
2149 only block on a :func:`~select.select` call if still necessary.
2150
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002151 (of course, similar provisions apply when using other primitives such as
Antoine Pitrou75e03382014-05-18 00:55:13 +02002152 :func:`~select.poll`, or those in the :mod:`selectors` module)
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002153
2154- The SSL handshake itself will be non-blocking: the
2155 :meth:`SSLSocket.do_handshake` method has to be retried until it returns
2156 successfully. Here is a synopsis using :func:`~select.select` to wait for
2157 the socket's readiness::
2158
2159 while True:
2160 try:
2161 sock.do_handshake()
2162 break
Antoine Pitrou873bf262011-10-27 23:59:03 +02002163 except ssl.SSLWantReadError:
2164 select.select([sock], [], [])
2165 except ssl.SSLWantWriteError:
2166 select.select([], [sock], [])
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002167
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002168.. seealso::
2169
Victor Stinner29611452014-10-10 12:52:43 +02002170 The :mod:`asyncio` module supports :ref:`non-blocking SSL sockets
2171 <ssl-nonblocking>` and provides a
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002172 higher level API. It polls for events using the :mod:`selectors` module and
2173 handles :exc:`SSLWantWriteError`, :exc:`SSLWantReadError` and
2174 :exc:`BlockingIOError` exceptions. It runs the SSL handshake asynchronously
2175 as well.
2176
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002177
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002178Memory BIO Support
2179------------------
2180
2181.. versionadded:: 3.5
2182
2183Ever since the SSL module was introduced in Python 2.6, the :class:`SSLSocket`
2184class has provided two related but distinct areas of functionality:
2185
2186- SSL protocol handling
2187- Network IO
2188
2189The network IO API is identical to that provided by :class:`socket.socket`,
2190from which :class:`SSLSocket` also inherits. This allows an SSL socket to be
2191used as a drop-in replacement for a regular socket, making it very easy to add
2192SSL support to an existing application.
2193
2194Combining SSL protocol handling and network IO usually works well, but there
2195are some cases where it doesn't. An example is async IO frameworks that want to
2196use a different IO multiplexing model than the "select/poll on a file
2197descriptor" (readiness based) model that is assumed by :class:`socket.socket`
2198and by the internal OpenSSL socket IO routines. This is mostly relevant for
2199platforms like Windows where this model is not efficient. For this purpose, a
2200reduced scope variant of :class:`SSLSocket` called :class:`SSLObject` is
2201provided.
2202
2203.. class:: SSLObject
2204
2205 A reduced-scope variant of :class:`SSLSocket` representing an SSL protocol
Victor Stinner2debf152014-10-10 13:04:08 +02002206 instance that does not contain any network IO methods. This class is
2207 typically used by framework authors that want to implement asynchronous IO
2208 for SSL through memory buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002209
Victor Stinner2debf152014-10-10 13:04:08 +02002210 This class implements an interface on top of a low-level SSL object as
2211 implemented by OpenSSL. This object captures the state of an SSL connection
2212 but does not provide any network IO itself. IO needs to be performed through
2213 separate "BIO" objects which are OpenSSL's IO abstraction layer.
2214
2215 An :class:`SSLObject` instance can be created using the
2216 :meth:`~SSLContext.wrap_bio` method. This method will create the
2217 :class:`SSLObject` instance and bind it to a pair of BIOs. The *incoming*
2218 BIO is used to pass data from Python to the SSL protocol instance, while the
2219 *outgoing* BIO is used to pass data the other way around.
2220
2221 The following methods are available:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002222
Victor Stinner805b2622014-10-10 12:49:08 +02002223 - :attr:`~SSLSocket.context`
2224 - :attr:`~SSLSocket.server_side`
2225 - :attr:`~SSLSocket.server_hostname`
Christian Heimes99a65702016-09-10 23:44:53 +02002226 - :attr:`~SSLSocket.session`
2227 - :attr:`~SSLSocket.session_reused`
Victor Stinner805b2622014-10-10 12:49:08 +02002228 - :meth:`~SSLSocket.read`
2229 - :meth:`~SSLSocket.write`
2230 - :meth:`~SSLSocket.getpeercert`
2231 - :meth:`~SSLSocket.selected_npn_protocol`
2232 - :meth:`~SSLSocket.cipher`
Benjamin Peterson4cb17812015-01-07 11:14:26 -06002233 - :meth:`~SSLSocket.shared_ciphers`
Victor Stinner805b2622014-10-10 12:49:08 +02002234 - :meth:`~SSLSocket.compression`
2235 - :meth:`~SSLSocket.pending`
2236 - :meth:`~SSLSocket.do_handshake`
2237 - :meth:`~SSLSocket.unwrap`
2238 - :meth:`~SSLSocket.get_channel_binding`
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002239
Victor Stinner2debf152014-10-10 13:04:08 +02002240 When compared to :class:`SSLSocket`, this object lacks the following
2241 features:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002242
Benjamin Petersonfdfca5f2017-06-11 00:24:38 -07002243 - Any form of network IO; ``recv()`` and ``send()`` read and write only to
2244 the underlying :class:`MemoryBIO` buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002245
Victor Stinner2debf152014-10-10 13:04:08 +02002246 - There is no *do_handshake_on_connect* machinery. You must always manually
2247 call :meth:`~SSLSocket.do_handshake` to start the handshake.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002248
Victor Stinner2debf152014-10-10 13:04:08 +02002249 - There is no handling of *suppress_ragged_eofs*. All end-of-file conditions
2250 that are in violation of the protocol are reported via the
2251 :exc:`SSLEOFError` exception.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002252
Victor Stinner2debf152014-10-10 13:04:08 +02002253 - The method :meth:`~SSLSocket.unwrap` call does not return anything,
2254 unlike for an SSL socket where it returns the underlying socket.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002255
Victor Stinner2debf152014-10-10 13:04:08 +02002256 - The *server_name_callback* callback passed to
2257 :meth:`SSLContext.set_servername_callback` will get an :class:`SSLObject`
2258 instance instead of a :class:`SSLSocket` instance as its first parameter.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002259
Victor Stinner2debf152014-10-10 13:04:08 +02002260 Some notes related to the use of :class:`SSLObject`:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002261
Victor Stinner2debf152014-10-10 13:04:08 +02002262 - All IO on an :class:`SSLObject` is :ref:`non-blocking <ssl-nonblocking>`.
2263 This means that for example :meth:`~SSLSocket.read` will raise an
2264 :exc:`SSLWantReadError` if it needs more data than the incoming BIO has
2265 available.
2266
2267 - There is no module-level ``wrap_bio()`` call like there is for
2268 :meth:`~SSLContext.wrap_socket`. An :class:`SSLObject` is always created
2269 via an :class:`SSLContext`.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002270
Victor Stinner805b2622014-10-10 12:49:08 +02002271An SSLObject communicates with the outside world using memory buffers. The
2272class :class:`MemoryBIO` provides a memory buffer that can be used for this
2273purpose. It wraps an OpenSSL memory BIO (Basic IO) object:
2274
2275.. class:: MemoryBIO
2276
2277 A memory buffer that can be used to pass data between Python and an SSL
2278 protocol instance.
2279
2280 .. attribute:: MemoryBIO.pending
2281
2282 Return the number of bytes currently in the memory buffer.
2283
2284 .. attribute:: MemoryBIO.eof
2285
2286 A boolean indicating whether the memory BIO is current at the end-of-file
2287 position.
2288
2289 .. method:: MemoryBIO.read(n=-1)
2290
2291 Read up to *n* bytes from the memory buffer. If *n* is not specified or
2292 negative, all bytes are returned.
2293
2294 .. method:: MemoryBIO.write(buf)
2295
2296 Write the bytes from *buf* to the memory BIO. The *buf* argument must be an
2297 object supporting the buffer protocol.
2298
2299 The return value is the number of bytes written, which is always equal to
2300 the length of *buf*.
2301
2302 .. method:: MemoryBIO.write_eof()
2303
2304 Write an EOF marker to the memory BIO. After this method has been called, it
2305 is illegal to call :meth:`~MemoryBIO.write`. The attribute :attr:`eof` will
2306 become true after all data currently in the buffer has been read.
2307
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002308
Christian Heimes99a65702016-09-10 23:44:53 +02002309SSL session
2310-----------
2311
2312.. versionadded:: 3.6
2313
2314.. class:: SSLSession
2315
2316 Session object used by :attr:`~SSLSocket.session`.
2317
2318 .. attribute:: id
2319 .. attribute:: time
2320 .. attribute:: timeout
2321 .. attribute:: ticket_lifetime_hint
2322 .. attribute:: has_ticket
2323
2324
Antoine Pitrou152efa22010-05-16 18:19:27 +00002325.. _ssl-security:
2326
2327Security considerations
2328-----------------------
2329
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002330Best defaults
2331^^^^^^^^^^^^^
Antoine Pitrou152efa22010-05-16 18:19:27 +00002332
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002333For **client use**, if you don't have any special requirements for your
2334security policy, it is highly recommended that you use the
2335:func:`create_default_context` function to create your SSL context.
2336It will load the system's trusted CA certificates, enable certificate
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002337validation and hostname checking, and try to choose reasonably secure
2338protocol and cipher settings.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002339
2340For example, here is how you would use the :class:`smtplib.SMTP` class to
2341create a trusted, secure connection to a SMTP server::
2342
2343 >>> import ssl, smtplib
2344 >>> smtp = smtplib.SMTP("mail.python.org", port=587)
2345 >>> context = ssl.create_default_context()
2346 >>> smtp.starttls(context=context)
2347 (220, b'2.0.0 Ready to start TLS')
2348
2349If a client certificate is needed for the connection, it can be added with
2350:meth:`SSLContext.load_cert_chain`.
2351
2352By contrast, if you create the SSL context by calling the :class:`SSLContext`
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002353constructor yourself, it will not have certificate validation nor hostname
2354checking enabled by default. If you do so, please read the paragraphs below
2355to achieve a good security level.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002356
2357Manual settings
2358^^^^^^^^^^^^^^^
2359
2360Verifying certificates
2361''''''''''''''''''''''
2362
Donald Stufft8b852f12014-05-20 12:58:38 -04002363When calling the :class:`SSLContext` constructor directly,
Antoine Pitrou152efa22010-05-16 18:19:27 +00002364:const:`CERT_NONE` is the default. Since it does not authenticate the other
2365peer, it can be insecure, especially in client mode where most of time you
2366would like to ensure the authenticity of the server you're talking to.
2367Therefore, when in client mode, it is highly recommended to use
2368:const:`CERT_REQUIRED`. However, it is in itself not sufficient; you also
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002369have to check that the server certificate, which can be obtained by calling
2370:meth:`SSLSocket.getpeercert`, matches the desired service. For many
2371protocols and applications, the service can be identified by the hostname;
Christian Heimes1aa9a752013-12-02 02:41:19 +01002372in this case, the :func:`match_hostname` function can be used. This common
2373check is automatically performed when :attr:`SSLContext.check_hostname` is
2374enabled.
Antoine Pitrou152efa22010-05-16 18:19:27 +00002375
Christian Heimes61d478c2018-01-27 15:51:38 +01002376.. versionchanged:: 3.7
2377 Hostname matchings is now performed by OpenSSL. Python no longer uses
2378 :func:`match_hostname`.
2379
Antoine Pitrou152efa22010-05-16 18:19:27 +00002380In server mode, if you want to authenticate your clients using the SSL layer
2381(rather than using a higher-level authentication mechanism), you'll also have
2382to specify :const:`CERT_REQUIRED` and similarly check the client certificate.
2383
2384 .. note::
2385
2386 In client mode, :const:`CERT_OPTIONAL` and :const:`CERT_REQUIRED` are
2387 equivalent unless anonymous ciphers are enabled (they are disabled
2388 by default).
Thomas Woutersed03b412007-08-28 21:37:11 +00002389
Antoine Pitroub5218772010-05-21 09:56:06 +00002390Protocol versions
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002391'''''''''''''''''
Antoine Pitroub5218772010-05-21 09:56:06 +00002392
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002393SSL versions 2 and 3 are considered insecure and are therefore dangerous to
2394use. If you want maximum compatibility between clients and servers, it is
Christian Heimes5fe668c2016-09-12 00:01:11 +02002395recommended to use :const:`PROTOCOL_TLS_CLIENT` or
2396:const:`PROTOCOL_TLS_SERVER` as the protocol version. SSLv2 and SSLv3 are
2397disabled by default.
Antoine Pitroub5218772010-05-21 09:56:06 +00002398
Marco Buttu7b2491a2017-04-13 16:17:59 +02002399::
2400
Christian Heimesc4d2e502016-09-12 01:14:35 +02002401 >>> client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
2402 >>> client_context.options |= ssl.OP_NO_TLSv1
2403 >>> client_context.options |= ssl.OP_NO_TLSv1_1
Christian Heimes5fe668c2016-09-12 00:01:11 +02002404
Antoine Pitroub5218772010-05-21 09:56:06 +00002405
Christian Heimes598894f2016-09-05 23:19:05 +02002406The SSL context created above will only allow TLSv1.2 and later (if
Christian Heimes5fe668c2016-09-12 00:01:11 +02002407supported by your system) connections to a server. :const:`PROTOCOL_TLS_CLIENT`
2408implies certificate validation and hostname checks by default. You have to
2409load certificates into the context.
2410
Antoine Pitroub5218772010-05-21 09:56:06 +00002411
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002412Cipher selection
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002413''''''''''''''''
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002414
2415If you have advanced security requirements, fine-tuning of the ciphers
2416enabled when negotiating a SSL session is possible through the
2417:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
2418ssl module disables certain weak ciphers by default, but you may want
Donald Stufft79ccaa22014-03-21 21:33:34 -04002419to further restrict the cipher choice. Be sure to read OpenSSL's documentation
Sanyam Khurana338cd832018-01-20 05:55:37 +05302420about the `cipher list format <https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-LIST-FORMAT>`_.
Christian Heimes5fe668c2016-09-12 00:01:11 +02002421If you want to check which ciphers are enabled by a given cipher list, use
2422:meth:`SSLContext.get_ciphers` or the ``openssl ciphers`` command on your
2423system.
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002424
Antoine Pitrou9eefe912013-11-17 15:35:33 +01002425Multi-processing
2426^^^^^^^^^^^^^^^^
2427
2428If using this module as part of a multi-processed application (using,
2429for example the :mod:`multiprocessing` or :mod:`concurrent.futures` modules),
2430be aware that OpenSSL's internal random number generator does not properly
2431handle forked processes. Applications must change the PRNG state of the
2432parent process if they use any SSL feature with :func:`os.fork`. Any
2433successful call of :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or
2434:func:`~ssl.RAND_pseudo_bytes` is sufficient.
2435
Georg Brandl48310cd2009-01-03 21:18:54 +00002436
Miss Islington (bot)01d9c232018-02-24 14:04:27 -08002437.. ssl-libressl:
2438
2439LibreSSL support
2440----------------
2441
2442LibreSSL is a fork of OpenSSL 1.0.1. The ssl module has limited support for
2443LibreSSL. Some features are not available when the ssl module is compiled
2444with LibreSSL.
2445
2446* LibreSSL >= 2.6.1 no longer supports NPN. The methods
2447 :meth:`SSLContext.set_npn_protocols` and
2448 :meth:`SSLSocket.selected_npn_protocol` are not available.
2449* :meth:`SSLContext.set_default_verify_paths` ignores the env vars
2450 :envvar:`SSL_CERT_FILE` and :envvar:`SSL_CERT_PATH` although
2451 :func:`get_default_verify_paths` still reports them.
2452
2453
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002454.. seealso::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002455
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002456 Class :class:`socket.socket`
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002457 Documentation of underlying :mod:`socket` class
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002458
Georg Brandl5d941342016-02-26 19:37:12 +01002459 `SSL/TLS Strong Encryption: An Introduction <https://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002460 Intro from the Apache webserver documentation
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002461
Georg Brandl5d941342016-02-26 19:37:12 +01002462 `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 +00002463 Steve Kent
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002464
Sanyam Khurana338cd832018-01-20 05:55:37 +05302465 `RFC 4086: Randomness Requirements for Security <https://datatracker.ietf.org/doc/rfc4086/>`_
Chandan Kumar63c2c8a2017-06-09 15:13:58 +05302466 Donald E., Jeffrey I. Schiller
Thomas Wouters89d996e2007-09-08 17:39:28 +00002467
Sanyam Khurana338cd832018-01-20 05:55:37 +05302468 `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 +05302469 D. Cooper
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002470
Georg Brandl5d941342016-02-26 19:37:12 +01002471 `RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 <https://tools.ietf.org/html/rfc5246>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002472 T. Dierks et. al.
2473
Georg Brandl5d941342016-02-26 19:37:12 +01002474 `RFC 6066: Transport Layer Security (TLS) Extensions <https://tools.ietf.org/html/rfc6066>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002475 D. Eastlake
2476
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002477 `IANA TLS: Transport Layer Security (TLS) Parameters <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002478 IANA
Christian Heimesad0ffa02017-09-06 16:19:56 -07002479
2480 `RFC 7525: Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) <https://tools.ietf.org/html/rfc7525>`_
2481 IETF
2482
2483 `Mozilla's Server Side TLS recommendations <https://wiki.mozilla.org/Security/Server_Side_TLS>`_
2484 Mozilla