blob: 2ccea13b614210c44b5bdf9be5e3ef7680ec419b [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
Miss Islington (bot)102d5202018-02-27 01:45:31 -080062
63Socket creation
64^^^^^^^^^^^^^^^
65
66Since Python 3.2 and 2.7.9, it is recommended to use the
67:meth:`SSLContext.wrap_socket` of an :class:`SSLContext` instance to wrap
68sockets as :class:`SSLSocket` objects. The helper functions
69:func:`create_default_context` returns a new context with secure default
70settings. The old :func:`wrap_socket` function is deprecated since it is
71both inefficient and has no support for server name indication (SNI) and
72hostname matching.
73
74Client socket example with default context and IPv4/IPv6 dual stack::
75
76 import socket
77 import ssl
78
79 hostname = 'www.python.org'
80 context = ssl.create_default_context()
81
82 with socket.create_connection((hostname, 443)) as sock:
83 with context.wrap_socket(sock, server_hostname=hostname) as ssock:
84 print(ssock.version())
85
86
87Client socket example with custom context and IPv4::
88
89 hostname = 'www.python.org'
90 # PROTOCOL_TLS_CLIENT requires valid cert chain and hostname
91 context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
92 context.load_verify_locations('path/to/cabundle.pem')
93
94 with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
95 with context.wrap_socket(sock, server_hostname=hostname) as ssock:
96 print(ssock.version())
97
98
99Server socket example listening on localhost IPv4::
100
101 context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
102 context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
103
104 with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
105 sock.bind(('127.0.0.1', 8443))
106 sock.listen(5)
107 with context.wrap_socket(sock, server_side=True) as ssock:
108 conn, addr = ssock.accept()
109 ...
110
111
112Context creation
113^^^^^^^^^^^^^^^^
114
115A convenience function helps create :class:`SSLContext` objects for common
116purposes.
117
118.. function:: create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, capath=None, cadata=None)
119
120 Return a new :class:`SSLContext` object with default settings for
121 the given *purpose*. The settings are chosen by the :mod:`ssl` module,
122 and usually represent a higher security level than when calling the
123 :class:`SSLContext` constructor directly.
124
125 *cafile*, *capath*, *cadata* represent optional CA certificates to
126 trust for certificate verification, as in
127 :meth:`SSLContext.load_verify_locations`. If all three are
128 :const:`None`, this function can choose to trust the system's default
129 CA certificates instead.
130
131 The settings are: :data:`PROTOCOL_TLS`, :data:`OP_NO_SSLv2`, and
132 :data:`OP_NO_SSLv3` with high encryption cipher suites without RC4 and
133 without unauthenticated cipher suites. Passing :data:`~Purpose.SERVER_AUTH`
134 as *purpose* sets :data:`~SSLContext.verify_mode` to :data:`CERT_REQUIRED`
135 and either loads CA certificates (when at least one of *cafile*, *capath* or
136 *cadata* is given) or uses :meth:`SSLContext.load_default_certs` to load
137 default CA certificates.
138
139 .. note::
140 The protocol, options, cipher and other settings may change to more
141 restrictive values anytime without prior deprecation. The values
142 represent a fair balance between compatibility and security.
143
144 If your application needs specific settings, you should create a
145 :class:`SSLContext` and apply the settings yourself.
146
147 .. note::
148 If you find that when certain older clients or servers attempt to connect
149 with a :class:`SSLContext` created by this function that they get an error
150 stating "Protocol or cipher suite mismatch", it may be that they only
151 support SSL3.0 which this function excludes using the
152 :data:`OP_NO_SSLv3`. SSL3.0 is widely considered to be `completely broken
153 <https://en.wikipedia.org/wiki/POODLE>`_. If you still wish to continue to
154 use this function but still allow SSL 3.0 connections you can re-enable
155 them using::
156
157 ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
158 ctx.options &= ~ssl.OP_NO_SSLv3
159
160 .. versionadded:: 3.4
161
162 .. versionchanged:: 3.4.4
163
164 RC4 was dropped from the default cipher string.
165
166 .. versionchanged:: 3.6
167
168 ChaCha20/Poly1305 was added to the default cipher string.
169
170 3DES was dropped from the default cipher string.
171
Miss Islington (bot)102d5202018-02-27 01:45:31 -0800172
173Exceptions
174^^^^^^^^^^
175
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000176.. exception:: SSLError
177
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000178 Raised to signal an error from the underlying SSL implementation
179 (currently provided by the OpenSSL library). This signifies some
180 problem in the higher-level encryption and authentication layer that's
181 superimposed on the underlying network connection. This error
Antoine Pitrou5574c302011-10-12 17:53:43 +0200182 is a subtype of :exc:`OSError`. The error code and message of
183 :exc:`SSLError` instances are provided by the OpenSSL library.
184
185 .. versionchanged:: 3.3
186 :exc:`SSLError` used to be a subtype of :exc:`socket.error`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000187
Antoine Pitrou3b36fb12012-06-22 21:11:52 +0200188 .. attribute:: library
189
190 A string mnemonic designating the OpenSSL submodule in which the error
191 occurred, such as ``SSL``, ``PEM`` or ``X509``. The range of possible
192 values depends on the OpenSSL version.
193
194 .. versionadded:: 3.3
195
196 .. attribute:: reason
197
198 A string mnemonic designating the reason this error occurred, for
199 example ``CERTIFICATE_VERIFY_FAILED``. The range of possible
200 values depends on the OpenSSL version.
201
202 .. versionadded:: 3.3
203
Antoine Pitrou41032a62011-10-27 23:56:55 +0200204.. exception:: SSLZeroReturnError
205
206 A subclass of :exc:`SSLError` raised when trying to read or write and
207 the SSL connection has been closed cleanly. Note that this doesn't
208 mean that the underlying transport (read TCP) has been closed.
209
210 .. versionadded:: 3.3
211
212.. exception:: SSLWantReadError
213
214 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
215 <ssl-nonblocking>` when trying to read or write data, but more data needs
216 to be received on the underlying TCP transport before the request can be
217 fulfilled.
218
219 .. versionadded:: 3.3
220
221.. exception:: SSLWantWriteError
222
223 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
224 <ssl-nonblocking>` when trying to read or write data, but more data needs
225 to be sent on the underlying TCP transport before the request can be
226 fulfilled.
227
228 .. versionadded:: 3.3
229
230.. exception:: SSLSyscallError
231
232 A subclass of :exc:`SSLError` raised when a system error was encountered
233 while trying to fulfill an operation on a SSL socket. Unfortunately,
234 there is no easy way to inspect the original errno number.
235
236 .. versionadded:: 3.3
237
238.. exception:: SSLEOFError
239
240 A subclass of :exc:`SSLError` raised when the SSL connection has been
Antoine Pitrouf3dc2d72011-10-28 00:01:03 +0200241 terminated abruptly. Generally, you shouldn't try to reuse the underlying
Antoine Pitrou41032a62011-10-27 23:56:55 +0200242 transport when this error is encountered.
243
244 .. versionadded:: 3.3
245
Christian Heimesb3ad0e52017-09-08 12:00:19 -0700246.. exception:: SSLCertVerificationError
247
248 A subclass of :exc:`SSLError` raised when certificate validation has
249 failed.
250
251 .. versionadded:: 3.7
252
253 .. attribute:: verify_code
254
255 A numeric error number that denotes the verification error.
256
257 .. attribute:: verify_message
258
259 A human readable string of the verification error.
260
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000261.. exception:: CertificateError
262
Christian Heimes61d478c2018-01-27 15:51:38 +0100263 An alias for :exc:`SSLCertVerificationError`.
264
265 .. versionchanged:: 3.7
266 The exception is now an alias for :exc:`SSLCertVerificationError`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000267
268
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000269Random generation
270^^^^^^^^^^^^^^^^^
271
Victor Stinner99c8b162011-05-24 12:05:19 +0200272.. function:: RAND_bytes(num)
273
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400274 Return *num* cryptographically strong pseudo-random bytes. Raises an
Victor Stinnera6752062011-05-25 11:27:40 +0200275 :class:`SSLError` if the PRNG has not been seeded with enough data or if the
276 operation is not supported by the current RAND method. :func:`RAND_status`
277 can be used to check the status of the PRNG and :func:`RAND_add` can be used
278 to seed the PRNG.
Victor Stinner99c8b162011-05-24 12:05:19 +0200279
Berker Peksageb7a97c2015-04-10 16:19:13 +0300280 For almost all applications :func:`os.urandom` is preferable.
281
Victor Stinner19fb53c2011-05-24 21:32:40 +0200282 Read the Wikipedia article, `Cryptographically secure pseudorandom number
Victor Stinnera6752062011-05-25 11:27:40 +0200283 generator (CSPRNG)
Georg Brandl5d941342016-02-26 19:37:12 +0100284 <https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator>`_,
Victor Stinner19fb53c2011-05-24 21:32:40 +0200285 to get the requirements of a cryptographically generator.
286
Victor Stinner99c8b162011-05-24 12:05:19 +0200287 .. versionadded:: 3.3
288
289.. function:: RAND_pseudo_bytes(num)
290
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400291 Return (bytes, is_cryptographic): bytes are *num* pseudo-random bytes,
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200292 is_cryptographic is ``True`` if the bytes generated are cryptographically
Victor Stinnera6752062011-05-25 11:27:40 +0200293 strong. Raises an :class:`SSLError` if the operation is not supported by the
294 current RAND method.
Victor Stinner99c8b162011-05-24 12:05:19 +0200295
Victor Stinner19fb53c2011-05-24 21:32:40 +0200296 Generated pseudo-random byte sequences will be unique if they are of
297 sufficient length, but are not necessarily unpredictable. They can be used
298 for non-cryptographic purposes and for certain purposes in cryptographic
299 protocols, but usually not for key generation etc.
300
Berker Peksageb7a97c2015-04-10 16:19:13 +0300301 For almost all applications :func:`os.urandom` is preferable.
302
Victor Stinner99c8b162011-05-24 12:05:19 +0200303 .. versionadded:: 3.3
304
Christian Heimes01113fa2016-09-05 23:23:24 +0200305 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200306
307 OpenSSL has deprecated :func:`ssl.RAND_pseudo_bytes`, use
308 :func:`ssl.RAND_bytes` instead.
309
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000310.. function:: RAND_status()
311
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400312 Return ``True`` if the SSL pseudo-random number generator has been seeded
313 with 'enough' randomness, and ``False`` otherwise. You can use
314 :func:`ssl.RAND_egd` and :func:`ssl.RAND_add` to increase the randomness of
315 the pseudo-random number generator.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000316
317.. function:: RAND_egd(path)
318
Victor Stinner99c8b162011-05-24 12:05:19 +0200319 If you are running an entropy-gathering daemon (EGD) somewhere, and *path*
Georg Brandl7f01a132009-09-16 15:58:14 +0000320 is the pathname of a socket connection open to it, this will read 256 bytes
321 of randomness from the socket, and add it to the SSL pseudo-random number
322 generator to increase the security of generated secret keys. This is
323 typically only necessary on systems without better sources of randomness.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000324
Georg Brandl7f01a132009-09-16 15:58:14 +0000325 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources
326 of entropy-gathering daemons.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000327
Christian Heimes598894f2016-09-05 23:19:05 +0200328 Availability: not available with LibreSSL and OpenSSL > 1.1.0
Victor Stinner3ce67a92015-01-06 13:53:09 +0100329
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000330.. function:: RAND_add(bytes, entropy)
331
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400332 Mix the given *bytes* into the SSL pseudo-random number generator. The
Victor Stinner99c8b162011-05-24 12:05:19 +0200333 parameter *entropy* (a float) is a lower bound on the entropy contained in
Georg Brandl7f01a132009-09-16 15:58:14 +0000334 string (so you can always use :const:`0.0`). See :rfc:`1750` for more
335 information on sources of entropy.
Thomas Woutersed03b412007-08-28 21:37:11 +0000336
Georg Brandl8c16cb92016-02-25 20:17:45 +0100337 .. versionchanged:: 3.5
Serhiy Storchaka8490f5a2015-03-20 09:00:36 +0200338 Writable :term:`bytes-like object` is now accepted.
339
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000340Certificate handling
341^^^^^^^^^^^^^^^^^^^^
342
Marco Buttu7b2491a2017-04-13 16:17:59 +0200343.. testsetup::
344
345 import ssl
346
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000347.. function:: match_hostname(cert, hostname)
348
349 Verify that *cert* (in decoded format as returned by
350 :meth:`SSLSocket.getpeercert`) matches the given *hostname*. The rules
351 applied are those for checking the identity of HTTPS servers as outlined
Chandan Kumar63c2c8a2017-06-09 15:13:58 +0530352 in :rfc:`2818`, :rfc:`5280` and :rfc:`6125`. In addition to HTTPS, this
353 function should be suitable for checking the identity of servers in
354 various SSL-based protocols such as FTPS, IMAPS, POPS and others.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000355
356 :exc:`CertificateError` is raised on failure. On success, the function
357 returns nothing::
358
359 >>> cert = {'subject': ((('commonName', 'example.com'),),)}
360 >>> ssl.match_hostname(cert, "example.com")
361 >>> ssl.match_hostname(cert, "example.org")
362 Traceback (most recent call last):
363 File "<stdin>", line 1, in <module>
364 File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
365 ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
366
367 .. versionadded:: 3.2
368
Georg Brandl72c98d32013-10-27 07:16:53 +0100369 .. versionchanged:: 3.3.3
370 The function now follows :rfc:`6125`, section 6.4.3 and does neither
371 match multiple wildcards (e.g. ``*.*.com`` or ``*a*.example.org``) nor
372 a wildcard inside an internationalized domain names (IDN) fragment.
373 IDN A-labels such as ``www*.xn--pthon-kva.org`` are still supported,
374 but ``x*.python.org`` no longer matches ``xn--tda.python.org``.
375
Antoine Pitrouc481bfb2015-02-15 18:12:20 +0100376 .. versionchanged:: 3.5
377 Matching of IP addresses, when present in the subjectAltName field
378 of the certificate, is now supported.
379
Mandeep Singhede2ac92017-11-27 04:01:27 +0530380 .. versionchanged:: 3.7
Christian Heimes61d478c2018-01-27 15:51:38 +0100381 The function is no longer used to TLS connections. Hostname matching
382 is now performed by OpenSSL.
383
Mandeep Singhede2ac92017-11-27 04:01:27 +0530384 Allow wildcard when it is the leftmost and the only character
Christian Heimes61d478c2018-01-27 15:51:38 +0100385 in that segment. Partial wildcards like ``www*.example.com`` are no
386 longer supported.
387
388 .. deprecated:: 3.7
Mandeep Singhede2ac92017-11-27 04:01:27 +0530389
Antoine Pitrouc695c952014-04-28 20:57:36 +0200390.. function:: cert_time_to_seconds(cert_time)
Thomas Woutersed03b412007-08-28 21:37:11 +0000391
Antoine Pitrouc695c952014-04-28 20:57:36 +0200392 Return the time in seconds since the Epoch, given the ``cert_time``
393 string representing the "notBefore" or "notAfter" date from a
394 certificate in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C
395 locale).
Thomas Woutersed03b412007-08-28 21:37:11 +0000396
Antoine Pitrouc695c952014-04-28 20:57:36 +0200397 Here's an example:
Thomas Woutersed03b412007-08-28 21:37:11 +0000398
Antoine Pitrouc695c952014-04-28 20:57:36 +0200399 .. doctest:: newcontext
400
401 >>> import ssl
402 >>> timestamp = ssl.cert_time_to_seconds("Jan 5 09:34:43 2018 GMT")
Marco Buttu7b2491a2017-04-13 16:17:59 +0200403 >>> timestamp # doctest: +SKIP
Antoine Pitrouc695c952014-04-28 20:57:36 +0200404 1515144883
405 >>> from datetime import datetime
Marco Buttu7b2491a2017-04-13 16:17:59 +0200406 >>> print(datetime.utcfromtimestamp(timestamp)) # doctest: +SKIP
Antoine Pitrouc695c952014-04-28 20:57:36 +0200407 2018-01-05 09:34:43
408
409 "notBefore" or "notAfter" dates must use GMT (:rfc:`5280`).
410
411 .. versionchanged:: 3.5
412 Interpret the input time as a time in UTC as specified by 'GMT'
413 timezone in the input string. Local timezone was used
414 previously. Return an integer (no fractions of a second in the
415 input format)
Thomas Woutersed03b412007-08-28 21:37:11 +0000416
Christian Heimes598894f2016-09-05 23:19:05 +0200417.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None)
Thomas Woutersed03b412007-08-28 21:37:11 +0000418
Georg Brandl7f01a132009-09-16 15:58:14 +0000419 Given the address ``addr`` of an SSL-protected server, as a (*hostname*,
420 *port-number*) pair, fetches the server's certificate, and returns it as a
421 PEM-encoded string. If ``ssl_version`` is specified, uses that version of
422 the SSL protocol to attempt to connect to the server. If ``ca_certs`` is
423 specified, it should be a file containing a list of root certificates, the
Miss Islington (bot)102d5202018-02-27 01:45:31 -0800424 same format as used for the same parameter in
425 :meth:`SSLContext.wrap_socket`. The call will attempt to validate the
426 server certificate against that set of root certificates, and will fail
427 if the validation attempt fails.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000428
Antoine Pitrou15399c32011-04-28 19:23:55 +0200429 .. versionchanged:: 3.3
430 This function is now IPv6-compatible.
431
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200432 .. versionchanged:: 3.5
433 The default *ssl_version* is changed from :data:`PROTOCOL_SSLv3` to
Christian Heimes598894f2016-09-05 23:19:05 +0200434 :data:`PROTOCOL_TLS` for maximum compatibility with modern servers.
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200435
Georg Brandl7f01a132009-09-16 15:58:14 +0000436.. function:: DER_cert_to_PEM_cert(DER_cert_bytes)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000437
438 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
439 string version of the same certificate.
440
Georg Brandl7f01a132009-09-16 15:58:14 +0000441.. function:: PEM_cert_to_DER_cert(PEM_cert_string)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000442
Georg Brandl7f01a132009-09-16 15:58:14 +0000443 Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of
444 bytes for that same certificate.
Thomas Woutersed03b412007-08-28 21:37:11 +0000445
Christian Heimes6d7ad132013-06-09 18:02:55 +0200446.. function:: get_default_verify_paths()
447
448 Returns a named tuple with paths to OpenSSL's default cafile and capath.
449 The paths are the same as used by
450 :meth:`SSLContext.set_default_verify_paths`. The return value is a
451 :term:`named tuple` ``DefaultVerifyPaths``:
452
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300453 * :attr:`cafile` - resolved path to cafile or ``None`` if the file doesn't exist,
454 * :attr:`capath` - resolved path to capath or ``None`` if the directory doesn't exist,
Christian Heimes6d7ad132013-06-09 18:02:55 +0200455 * :attr:`openssl_cafile_env` - OpenSSL's environment key that points to a cafile,
456 * :attr:`openssl_cafile` - hard coded path to a cafile,
457 * :attr:`openssl_capath_env` - OpenSSL's environment key that points to a capath,
458 * :attr:`openssl_capath` - hard coded path to a capath directory
459
Christian Heimes598894f2016-09-05 23:19:05 +0200460 Availability: LibreSSL ignores the environment vars
461 :attr:`openssl_cafile_env` and :attr:`openssl_capath_env`
462
Christian Heimes6d7ad132013-06-09 18:02:55 +0200463 .. versionadded:: 3.4
464
Christian Heimes44109d72013-11-22 01:51:30 +0100465.. function:: enum_certificates(store_name)
Christian Heimes46bebee2013-06-09 19:03:31 +0200466
467 Retrieve certificates from Windows' system cert store. *store_name* may be
468 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
Christian Heimes44109d72013-11-22 01:51:30 +0100469 stores, too.
Christian Heimes46bebee2013-06-09 19:03:31 +0200470
Christian Heimes44109d72013-11-22 01:51:30 +0100471 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
472 The encoding_type specifies the encoding of cert_bytes. It is either
473 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
474 PKCS#7 ASN.1 data. Trust specifies the purpose of the certificate as a set
475 of OIDS or exactly ``True`` if the certificate is trustworthy for all
476 purposes.
477
478 Example::
479
480 >>> ssl.enum_certificates("CA")
481 [(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
482 (b'data...', 'x509_asn', True)]
Christian Heimes46bebee2013-06-09 19:03:31 +0200483
484 Availability: Windows.
485
486 .. versionadded:: 3.4
Christian Heimes6d7ad132013-06-09 18:02:55 +0200487
Christian Heimes44109d72013-11-22 01:51:30 +0100488.. function:: enum_crls(store_name)
489
490 Retrieve CRLs from Windows' system cert store. *store_name* may be
491 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
492 stores, too.
493
494 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
495 The encoding_type specifies the encoding of cert_bytes. It is either
496 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
497 PKCS#7 ASN.1 data.
498
499 Availability: Windows.
500
501 .. versionadded:: 3.4
502
Miss Islington (bot)102d5202018-02-27 01:45:31 -0800503.. function:: wrap_socket(sock, keyfile=None, certfile=None, \
504 server_side=False, cert_reqs=CERT_NONE, ssl_version=PROTOCOL_TLS, \
505 ca_certs=None, do_handshake_on_connect=True, \
506 suppress_ragged_eofs=True, ciphers=None)
507
508 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance
509 of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps
510 the underlying socket in an SSL context. ``sock`` must be a
511 :data:`~socket.SOCK_STREAM` socket; other socket types are unsupported.
512
513 Internally, function creates a :class:`SSLContext` with protocol
514 *ssl_version* and :attr:`SSLContext.options` set to *cert_reqs*. If
515 parameters *keyfile*, *certfile*, *ca_certs* or *ciphers* are set, then
516 the values are passed to :meth:`SSLContext.load_cert_chain`,
517 :meth:`SSLContext.load_verify_locations`, and
518 :meth:`SSLContext.set_ciphers`.
519
520 The arguments *server_side*, *do_handshake_on_connect*, and
521 *suppress_ragged_eofs* have the same meaning as
522 :meth:`SSLContext.wrap_socket`.
523
524 .. deprecated:: 3.7
525
526 Since Python 3.2 and 2.7.9, it is recommended to use the
527 :meth:`SSLContext.wrap_socket` instead of :func:`wrap_socket`. The
528 top-level function is limited and creates an insecure client socket
529 without server name indication or hostname matching.
Christian Heimes44109d72013-11-22 01:51:30 +0100530
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000531Constants
532^^^^^^^^^
533
Christian Heimes3aeacad2016-09-10 00:19:35 +0200534 All constants are now :class:`enum.IntEnum` or :class:`enum.IntFlag` collections.
535
536 .. versionadded:: 3.6
537
Thomas Woutersed03b412007-08-28 21:37:11 +0000538.. data:: CERT_NONE
539
Antoine Pitrou152efa22010-05-16 18:19:27 +0000540 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
541 parameter to :func:`wrap_socket`. In this mode (the default), no
542 certificates will be required from the other side of the socket connection.
543 If a certificate is received from the other end, no attempt to validate it
544 is made.
545
546 See the discussion of :ref:`ssl-security` below.
Thomas Woutersed03b412007-08-28 21:37:11 +0000547
548.. data:: CERT_OPTIONAL
549
Antoine Pitrou152efa22010-05-16 18:19:27 +0000550 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
551 parameter to :func:`wrap_socket`. In this mode no certificates will be
552 required from the other side of the socket connection; but if they
553 are provided, validation will be attempted and an :class:`SSLError`
554 will be raised on failure.
555
556 Use of this setting requires a valid set of CA certificates to
557 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
558 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000559
560.. data:: CERT_REQUIRED
561
Antoine Pitrou152efa22010-05-16 18:19:27 +0000562 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
563 parameter to :func:`wrap_socket`. In this mode, certificates are
564 required from the other side of the socket connection; an :class:`SSLError`
565 will be raised if no certificate is provided, or if its validation fails.
566
567 Use of this setting requires a valid set of CA certificates to
568 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
569 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000570
Christian Heimes3aeacad2016-09-10 00:19:35 +0200571.. class:: VerifyMode
572
573 :class:`enum.IntEnum` collection of CERT_* constants.
574
575 .. versionadded:: 3.6
576
Christian Heimes22587792013-11-21 23:56:13 +0100577.. data:: VERIFY_DEFAULT
578
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500579 Possible value for :attr:`SSLContext.verify_flags`. In this mode, certificate
580 revocation lists (CRLs) are not checked. By default OpenSSL does neither
581 require nor verify CRLs.
Christian Heimes22587792013-11-21 23:56:13 +0100582
583 .. versionadded:: 3.4
584
585.. data:: VERIFY_CRL_CHECK_LEAF
586
587 Possible value for :attr:`SSLContext.verify_flags`. In this mode, only the
588 peer cert is check but non of the intermediate CA certificates. The mode
589 requires a valid CRL that is signed by the peer cert's issuer (its direct
590 ancestor CA). If no proper has been loaded
591 :attr:`SSLContext.load_verify_locations`, validation will fail.
592
593 .. versionadded:: 3.4
594
595.. data:: VERIFY_CRL_CHECK_CHAIN
596
597 Possible value for :attr:`SSLContext.verify_flags`. In this mode, CRLs of
598 all certificates in the peer cert chain are checked.
599
600 .. versionadded:: 3.4
601
602.. data:: VERIFY_X509_STRICT
603
604 Possible value for :attr:`SSLContext.verify_flags` to disable workarounds
605 for broken X.509 certificates.
606
607 .. versionadded:: 3.4
608
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500609.. data:: VERIFY_X509_TRUSTED_FIRST
610
611 Possible value for :attr:`SSLContext.verify_flags`. It instructs OpenSSL to
612 prefer trusted certificates when building the trust chain to validate a
613 certificate. This flag is enabled by default.
614
Benjamin Petersonc8358272015-03-08 09:42:25 -0400615 .. versionadded:: 3.4.4
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500616
Christian Heimes3aeacad2016-09-10 00:19:35 +0200617.. class:: VerifyFlags
618
619 :class:`enum.IntFlag` collection of VERIFY_* constants.
620
621 .. versionadded:: 3.6
622
Christian Heimes598894f2016-09-05 23:19:05 +0200623.. data:: PROTOCOL_TLS
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200624
625 Selects the highest protocol version that both the client and server support.
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700626 Despite the name, this option can select both "SSL" and "TLS" protocols.
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200627
Christian Heimes01113fa2016-09-05 23:23:24 +0200628 .. versionadded:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200629
Christian Heimes5fe668c2016-09-12 00:01:11 +0200630.. data:: PROTOCOL_TLS_CLIENT
631
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700632 Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`,
Christian Heimes5fe668c2016-09-12 00:01:11 +0200633 but only support client-side :class:`SSLSocket` connections. The protocol
634 enables :data:`CERT_REQUIRED` and :attr:`~SSLContext.check_hostname` by
635 default.
636
637 .. versionadded:: 3.6
638
639.. data:: PROTOCOL_TLS_SERVER
640
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700641 Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`,
Christian Heimes5fe668c2016-09-12 00:01:11 +0200642 but only support server-side :class:`SSLSocket` connections.
643
644 .. versionadded:: 3.6
645
Christian Heimes598894f2016-09-05 23:19:05 +0200646.. data:: PROTOCOL_SSLv23
647
648 Alias for data:`PROTOCOL_TLS`.
649
Christian Heimes01113fa2016-09-05 23:23:24 +0200650 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200651
Berker Peksagd93c4de2017-02-06 13:37:19 +0300652 Use :data:`PROTOCOL_TLS` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200653
Thomas Woutersed03b412007-08-28 21:37:11 +0000654.. data:: PROTOCOL_SSLv2
655
656 Selects SSL version 2 as the channel encryption protocol.
657
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500658 This protocol is not available if OpenSSL is compiled with the
659 ``OPENSSL_NO_SSL2`` flag.
Victor Stinner3de49192011-05-09 00:42:58 +0200660
Antoine Pitrou8eac60d2010-05-16 14:19:41 +0000661 .. warning::
662
663 SSL version 2 is insecure. Its use is highly discouraged.
664
Christian Heimes01113fa2016-09-05 23:23:24 +0200665 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200666
667 OpenSSL has removed support for SSLv2.
668
Thomas Woutersed03b412007-08-28 21:37:11 +0000669.. data:: PROTOCOL_SSLv3
670
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200671 Selects SSL version 3 as the channel encryption protocol.
672
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500673 This protocol is not be available if OpenSSL is compiled with the
674 ``OPENSSL_NO_SSLv3`` flag.
675
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200676 .. warning::
677
678 SSL version 3 is insecure. Its use is highly discouraged.
Thomas Woutersed03b412007-08-28 21:37:11 +0000679
Christian Heimes01113fa2016-09-05 23:23:24 +0200680 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200681
682 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300683 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200684
Thomas Woutersed03b412007-08-28 21:37:11 +0000685.. data:: PROTOCOL_TLSv1
686
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100687 Selects TLS version 1.0 as the channel encryption protocol.
688
Christian Heimes01113fa2016-09-05 23:23:24 +0200689 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200690
691 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300692 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200693
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100694.. data:: PROTOCOL_TLSv1_1
695
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100696 Selects TLS version 1.1 as the channel encryption protocol.
697 Available only with openssl version 1.0.1+.
698
699 .. versionadded:: 3.4
700
Christian Heimes01113fa2016-09-05 23:23:24 +0200701 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200702
703 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300704 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200705
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100706.. data:: PROTOCOL_TLSv1_2
707
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200708 Selects TLS version 1.2 as the channel encryption protocol. This is the
709 most modern version, and probably the best choice for maximum protection,
710 if both sides can speak it. Available only with openssl version 1.0.1+.
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100711
712 .. versionadded:: 3.4
Thomas Woutersed03b412007-08-28 21:37:11 +0000713
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 Pitroub5218772010-05-21 09:56:06 +0000719.. data:: OP_ALL
720
721 Enables workarounds for various bugs present in other SSL implementations.
Antoine Pitrou9f6b02e2012-01-27 10:02:55 +0100722 This option is set by default. It does not necessarily set the same
723 flags as OpenSSL's ``SSL_OP_ALL`` constant.
Antoine Pitroub5218772010-05-21 09:56:06 +0000724
725 .. versionadded:: 3.2
726
727.. data:: OP_NO_SSLv2
728
729 Prevents an SSLv2 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200730 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000731 choosing SSLv2 as the protocol version.
732
733 .. versionadded:: 3.2
734
Christian Heimes01113fa2016-09-05 23:23:24 +0200735 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200736
737 SSLv2 is deprecated
738
739
Antoine Pitroub5218772010-05-21 09:56:06 +0000740.. data:: OP_NO_SSLv3
741
742 Prevents an SSLv3 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200743 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000744 choosing SSLv3 as the protocol version.
745
746 .. versionadded:: 3.2
747
Christian Heimes01113fa2016-09-05 23:23:24 +0200748 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200749
750 SSLv3 is deprecated
751
Antoine Pitroub5218772010-05-21 09:56:06 +0000752.. data:: OP_NO_TLSv1
753
754 Prevents a TLSv1 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 TLSv1 as the protocol version.
757
758 .. versionadded:: 3.2
759
Miss Islington (bot)4c842b02018-02-27 03:41:04 -0800760 .. deprecated:: 3.7
761 The option is deprecated since OpenSSL 1.1.0, use the new
762 :attr:`SSLContext.minimum_version` and
763 :attr:`SSLContext.maximum_version` instead.
764
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100765.. data:: OP_NO_TLSv1_1
766
767 Prevents a TLSv1.1 connection. This option is only applicable in conjunction
Christian Heimes598894f2016-09-05 23:19:05 +0200768 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.1 as
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100769 the protocol version. Available only with openssl version 1.0.1+.
770
771 .. versionadded:: 3.4
772
Miss Islington (bot)4c842b02018-02-27 03:41:04 -0800773 .. deprecated:: 3.7
774 The option is deprecated since OpenSSL 1.1.0.
775
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100776.. data:: OP_NO_TLSv1_2
777
778 Prevents a TLSv1.2 connection. This option is only applicable in conjunction
Christian Heimes598894f2016-09-05 23:19:05 +0200779 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.2 as
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100780 the protocol version. Available only with openssl version 1.0.1+.
781
782 .. versionadded:: 3.4
783
Miss Islington (bot)4c842b02018-02-27 03:41:04 -0800784 .. deprecated:: 3.7
785 The option is deprecated since OpenSSL 1.1.0.
786
Christian Heimescb5b68a2017-09-07 18:07:00 -0700787.. data:: OP_NO_TLSv1_3
788
789 Prevents a TLSv1.3 connection. This option is only applicable in conjunction
790 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.3 as
791 the protocol version. TLS 1.3 is available with OpenSSL 1.1.1 or later.
792 When Python has been compiled against an older version of OpenSSL, the
793 flag defaults to *0*.
794
795 .. versionadded:: 3.7
796
Miss Islington (bot)4c842b02018-02-27 03:41:04 -0800797 .. deprecated:: 3.7
798 The option is deprecated since OpenSSL 1.1.0. It was added to 2.7.15,
799 3.6.3 and 3.7.0 for backwards compatibility with OpenSSL 1.0.2.
800
Miss Islington (bot)e2db6ad2018-05-16 07:26:19 -0700801.. data:: OP_NO_RENEGOTIATION
802
803 Disable all renegotiation in TLSv1.2 and earlier. Do not send
804 HelloRequest messages, and ignore renegotiation requests via ClientHello.
805
806 This option is only available with OpenSSL 1.1.0h and later.
807
808 .. versionadded:: 3.7
809
Antoine Pitrou6db49442011-12-19 13:27:11 +0100810.. data:: OP_CIPHER_SERVER_PREFERENCE
811
812 Use the server's cipher ordering preference, rather than the client's.
813 This option has no effect on client sockets and SSLv2 server sockets.
814
815 .. versionadded:: 3.3
816
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100817.. data:: OP_SINGLE_DH_USE
818
819 Prevents re-use of the same DH key for distinct SSL sessions. This
820 improves forward secrecy but requires more computational resources.
821 This option only applies to server sockets.
822
823 .. versionadded:: 3.3
824
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100825.. data:: OP_SINGLE_ECDH_USE
826
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100827 Prevents re-use of the same ECDH key for distinct SSL sessions. This
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100828 improves forward secrecy but requires more computational resources.
829 This option only applies to server sockets.
830
831 .. versionadded:: 3.3
832
Miss Islington (bot)2614ed42018-02-27 00:17:49 -0800833.. data:: OP_ENABLE_MIDDLEBOX_COMPAT
834
835 Send dummy Change Cipher Spec (CCS) messages in TLS 1.3 handshake to make
836 a TLS 1.3 connection look more like a TLS 1.2 connection.
837
838 This option is only available with OpenSSL 1.1.1 and later.
839
840 .. versionadded:: 3.8
841
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100842.. data:: OP_NO_COMPRESSION
843
844 Disable compression on the SSL channel. This is useful if the application
845 protocol supports its own compression scheme.
846
847 This option is only available with OpenSSL 1.0.0 and later.
848
849 .. versionadded:: 3.3
850
Christian Heimes3aeacad2016-09-10 00:19:35 +0200851.. class:: Options
852
853 :class:`enum.IntFlag` collection of OP_* constants.
854
Christian Heimes99a65702016-09-10 23:44:53 +0200855.. data:: OP_NO_TICKET
856
857 Prevent client side from requesting a session ticket.
858
Christian Heimes3aeacad2016-09-10 00:19:35 +0200859 .. versionadded:: 3.6
860
Benjamin Petersoncca27322015-01-23 16:35:37 -0500861.. data:: HAS_ALPN
862
863 Whether the OpenSSL library has built-in support for the *Application-Layer
864 Protocol Negotiation* TLS extension as described in :rfc:`7301`.
865
866 .. versionadded:: 3.5
867
Christian Heimes61d478c2018-01-27 15:51:38 +0100868.. data:: HAS_NEVER_CHECK_COMMON_NAME
869
870 Whether the OpenSSL library has built-in support not checking subject
871 common name and :attr:`SSLContext.hostname_checks_common_name` is
872 writeable.
873
874 .. versionadded:: 3.7
875
Antoine Pitrou501da612011-12-21 09:27:41 +0100876.. data:: HAS_ECDH
877
Miss Islington (bot)4c842b02018-02-27 03:41:04 -0800878 Whether the OpenSSL library has built-in support for the Elliptic Curve-based
Antoine Pitrou501da612011-12-21 09:27:41 +0100879 Diffie-Hellman key exchange. This should be true unless the feature was
880 explicitly disabled by the distributor.
881
882 .. versionadded:: 3.3
883
Antoine Pitroud5323212010-10-22 18:19:07 +0000884.. data:: HAS_SNI
885
886 Whether the OpenSSL library has built-in support for the *Server Name
Chandan Kumar63c2c8a2017-06-09 15:13:58 +0530887 Indication* extension (as defined in :rfc:`6066`).
Antoine Pitroud5323212010-10-22 18:19:07 +0000888
889 .. versionadded:: 3.2
890
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100891.. data:: HAS_NPN
892
Miss Islington (bot)4c842b02018-02-27 03:41:04 -0800893 Whether the OpenSSL library has built-in support for the *Next Protocol
Sanyam Khurana338cd832018-01-20 05:55:37 +0530894 Negotiation* as described in the `Application Layer Protocol
895 Negotiation <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_.
896 When true, you can use the :meth:`SSLContext.set_npn_protocols` method to advertise
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100897 which protocols you want to support.
898
899 .. versionadded:: 3.3
900
Miss Islington (bot)4c842b02018-02-27 03:41:04 -0800901.. data:: HAS_SSLv2
902
903 Whether the OpenSSL library has built-in support for the SSL 2.0 protocol.
904
905 .. versionadded:: 3.7
906
907.. data:: HAS_SSLv3
908
909 Whether the OpenSSL library has built-in support for the SSL 3.0 protocol.
910
911 .. versionadded:: 3.7
912
913.. data:: HAS_TLSv1
914
915 Whether the OpenSSL library has built-in support for the TLS 1.0 protocol.
916
917 .. versionadded:: 3.7
918
919.. data:: HAS_TLSv1_1
920
921 Whether the OpenSSL library has built-in support for the TLS 1.1 protocol.
922
923 .. versionadded:: 3.7
924
925.. data:: HAS_TLSv1_2
926
927 Whether the OpenSSL library has built-in support for the TLS 1.2 protocol.
928
929 .. versionadded:: 3.7
930
Christian Heimescb5b68a2017-09-07 18:07:00 -0700931.. data:: HAS_TLSv1_3
932
933 Whether the OpenSSL library has built-in support for the TLS 1.3 protocol.
934
935 .. versionadded:: 3.7
936
Antoine Pitroud6494802011-07-21 01:11:30 +0200937.. data:: CHANNEL_BINDING_TYPES
938
939 List of supported TLS channel binding types. Strings in this list
940 can be used as arguments to :meth:`SSLSocket.get_channel_binding`.
941
942 .. versionadded:: 3.3
943
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000944.. data:: OPENSSL_VERSION
945
946 The version string of the OpenSSL library loaded by the interpreter::
947
948 >>> ssl.OPENSSL_VERSION
Alex Gaynor275104e2017-03-02 05:23:19 -0500949 'OpenSSL 1.0.2k 26 Jan 2017'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000950
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000951 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000952
953.. data:: OPENSSL_VERSION_INFO
954
955 A tuple of five integers representing version information about the
956 OpenSSL library::
957
958 >>> ssl.OPENSSL_VERSION_INFO
Alex Gaynor275104e2017-03-02 05:23:19 -0500959 (1, 0, 2, 11, 15)
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000960
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000961 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000962
963.. data:: OPENSSL_VERSION_NUMBER
964
965 The raw version number of the OpenSSL library, as a single integer::
966
967 >>> ssl.OPENSSL_VERSION_NUMBER
Alex Gaynor275104e2017-03-02 05:23:19 -0500968 268443839
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000969 >>> hex(ssl.OPENSSL_VERSION_NUMBER)
Alex Gaynor275104e2017-03-02 05:23:19 -0500970 '0x100020bf'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000971
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000972 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000973
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100974.. data:: ALERT_DESCRIPTION_HANDSHAKE_FAILURE
975 ALERT_DESCRIPTION_INTERNAL_ERROR
976 ALERT_DESCRIPTION_*
977
978 Alert Descriptions from :rfc:`5246` and others. The `IANA TLS Alert Registry
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300979 <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100980 contains this list and references to the RFCs where their meaning is defined.
981
982 Used as the return value of the callback function in
983 :meth:`SSLContext.set_servername_callback`.
984
985 .. versionadded:: 3.4
986
Christian Heimes3aeacad2016-09-10 00:19:35 +0200987.. class:: AlertDescription
988
989 :class:`enum.IntEnum` collection of ALERT_DESCRIPTION_* constants.
990
991 .. versionadded:: 3.6
992
Christian Heimes72d28502013-11-23 13:56:58 +0100993.. data:: Purpose.SERVER_AUTH
994
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100995 Option for :func:`create_default_context` and
996 :meth:`SSLContext.load_default_certs`. This value indicates that the
997 context may be used to authenticate Web servers (therefore, it will
998 be used to create client-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100999
1000 .. versionadded:: 3.4
1001
Christian Heimes6b2ff982013-11-23 14:42:01 +01001002.. data:: Purpose.CLIENT_AUTH
Christian Heimes72d28502013-11-23 13:56:58 +01001003
Antoine Pitrou5bef4102013-11-23 16:16:29 +01001004 Option for :func:`create_default_context` and
1005 :meth:`SSLContext.load_default_certs`. This value indicates that the
1006 context may be used to authenticate Web clients (therefore, it will
1007 be used to create server-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +01001008
1009 .. versionadded:: 3.4
1010
Christian Heimes3aeacad2016-09-10 00:19:35 +02001011.. class:: SSLErrorNumber
1012
1013 :class:`enum.IntEnum` collection of SSL_ERROR_* constants.
1014
1015 .. versionadded:: 3.6
1016
Miss Islington (bot)4c842b02018-02-27 03:41:04 -08001017.. class:: TLSVersion
1018
1019 :class:`enum.IntEnum` collection of SSL and TLS versions for
1020 :attr:`SSLContext.maximum_version` and :attr:`SSLContext.minimum_version`.
1021
1022 .. versionadded:: 3.7
1023
1024.. attribute:: TLSVersion.MINIMUM_SUPPORTED
1025.. attribute:: TLSVersion.MAXIMUM_SUPPORTED
1026
1027 The minimum or maximum supported SSL or TLS version. These are magic
1028 constants. Their values don't reflect the lowest and highest available
1029 TLS/SSL versions.
1030
1031.. attribute:: TLSVersion.SSLv3
1032.. attribute:: TLSVersion.TLSv1
1033.. attribute:: TLSVersion.TLSv1_1
1034.. attribute:: TLSVersion.TLSv1_2
1035.. attribute:: TLSVersion.TLSv1_3
1036
1037 SSL 3.0 to TLS 1.3.
Thomas Woutersed03b412007-08-28 21:37:11 +00001038
Antoine Pitrou152efa22010-05-16 18:19:27 +00001039SSL Sockets
1040-----------
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001041
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001042.. class:: SSLSocket(socket.socket)
Antoine Pitrou792ff3e2010-09-19 13:19:21 +00001043
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001044 SSL sockets provide the following methods of :ref:`socket-objects`:
Zachary Wareba9fb0d2014-06-11 15:02:25 -05001045
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001046 - :meth:`~socket.socket.accept()`
1047 - :meth:`~socket.socket.bind()`
1048 - :meth:`~socket.socket.close()`
1049 - :meth:`~socket.socket.connect()`
1050 - :meth:`~socket.socket.detach()`
1051 - :meth:`~socket.socket.fileno()`
1052 - :meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`
1053 - :meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`
1054 - :meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`,
1055 :meth:`~socket.socket.setblocking()`
1056 - :meth:`~socket.socket.listen()`
1057 - :meth:`~socket.socket.makefile()`
1058 - :meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()`
1059 (but passing a non-zero ``flags`` argument is not allowed)
1060 - :meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with
1061 the same limitation)
Victor Stinner92127a52014-10-10 12:43:17 +02001062 - :meth:`~socket.socket.sendfile()` (but :mod:`os.sendfile` will be used
1063 for plain-text sockets only, else :meth:`~socket.socket.send()` will be used)
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001064 - :meth:`~socket.socket.shutdown()`
Zachary Wareba9fb0d2014-06-11 15:02:25 -05001065
Victor Stinner3c3d3c72014-10-10 12:06:51 +02001066 However, since the SSL (and TLS) protocol has its own framing atop
1067 of TCP, the SSL sockets abstraction can, in certain respects, diverge from
1068 the specification of normal, OS-level sockets. See especially the
1069 :ref:`notes on non-blocking sockets <ssl-nonblocking>`.
Antoine Pitroue1f2f302010-09-19 13:56:11 +00001070
Christian Heimes89c20512018-02-27 11:17:32 +01001071 Instances of :class:`SSLSocket` must be created using the
Alex Gaynor1cf2a802017-02-28 22:26:56 -05001072 :meth:`SSLContext.wrap_socket` method.
Victor Stinnerd28fe8c2014-10-10 12:07:19 +02001073
Victor Stinner92127a52014-10-10 12:43:17 +02001074 .. versionchanged:: 3.5
1075 The :meth:`sendfile` method was added.
1076
Victor Stinner14690702015-04-06 22:46:13 +02001077 .. versionchanged:: 3.5
1078 The :meth:`shutdown` does not reset the socket timeout each time bytes
1079 are received or sent. The socket timeout is now to maximum total duration
1080 of the shutdown.
1081
Christian Heimesd0486372016-09-10 23:23:33 +02001082 .. deprecated:: 3.6
1083 It is deprecated to create a :class:`SSLSocket` instance directly, use
1084 :meth:`SSLContext.wrap_socket` to wrap a socket.
1085
Christian Heimes89c20512018-02-27 11:17:32 +01001086 .. versionchanged:: 3.7
1087 :class:`SSLSocket` instances must to created with
1088 :meth:`~SSLContext.wrap_socket`. In earlier versions, it was possible
1089 to create instances directly. This was never documented or officially
1090 supported.
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001091
1092SSL sockets also have the following additional methods and attributes:
Antoine Pitrou792ff3e2010-09-19 13:19:21 +00001093
Martin Panterf6b1d662016-03-28 00:22:09 +00001094.. method:: SSLSocket.read(len=1024, buffer=None)
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001095
1096 Read up to *len* bytes of data from the SSL socket and return the result as
1097 a ``bytes`` instance. If *buffer* is specified, then read into the buffer
1098 instead, and return the number of bytes read.
1099
Victor Stinner41f92c22014-10-10 12:05:56 +02001100 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001101 :ref:`non-blocking <ssl-nonblocking>` and the read would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001102
1103 As at any time a re-negotiation is possible, a call to :meth:`read` can also
1104 cause write operations.
1105
Victor Stinner14690702015-04-06 22:46:13 +02001106 .. versionchanged:: 3.5
1107 The socket timeout is no more reset each time bytes are received or sent.
1108 The socket timeout is now to maximum total duration to read up to *len*
1109 bytes.
1110
Christian Heimesd0486372016-09-10 23:23:33 +02001111 .. deprecated:: 3.6
1112 Use :meth:`~SSLSocket.recv` instead of :meth:`~SSLSocket.read`.
1113
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001114.. method:: SSLSocket.write(buf)
1115
1116 Write *buf* to the SSL socket and return the number of bytes written. The
1117 *buf* argument must be an object supporting the buffer interface.
1118
Victor Stinner41f92c22014-10-10 12:05:56 +02001119 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001120 :ref:`non-blocking <ssl-nonblocking>` and the write would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001121
1122 As at any time a re-negotiation is possible, a call to :meth:`write` can
1123 also cause read operations.
1124
Victor Stinner14690702015-04-06 22:46:13 +02001125 .. versionchanged:: 3.5
1126 The socket timeout is no more reset each time bytes are received or sent.
1127 The socket timeout is now to maximum total duration to write *buf*.
1128
Christian Heimesd0486372016-09-10 23:23:33 +02001129 .. deprecated:: 3.6
1130 Use :meth:`~SSLSocket.send` instead of :meth:`~SSLSocket.write`.
1131
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001132.. note::
1133
1134 The :meth:`~SSLSocket.read` and :meth:`~SSLSocket.write` methods are the
1135 low-level methods that read and write unencrypted, application-level data
Martin Panter1f1177d2015-10-31 11:48:53 +00001136 and decrypt/encrypt it to encrypted, wire-level data. These methods
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001137 require an active SSL connection, i.e. the handshake was completed and
1138 :meth:`SSLSocket.unwrap` was not called.
1139
1140 Normally you should use the socket API methods like
1141 :meth:`~socket.socket.recv` and :meth:`~socket.socket.send` instead of these
1142 methods.
1143
Bill Janssen48dc27c2007-12-05 03:38:10 +00001144.. method:: SSLSocket.do_handshake()
1145
Antoine Pitroub3593ca2011-07-11 01:39:19 +02001146 Perform the SSL setup handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +00001147
Christian Heimes1aa9a752013-12-02 02:41:19 +01001148 .. versionchanged:: 3.4
Zachary Ware88a19772014-07-25 13:30:50 -05001149 The handshake method also performs :func:`match_hostname` when the
Christian Heimes1aa9a752013-12-02 02:41:19 +01001150 :attr:`~SSLContext.check_hostname` attribute of the socket's
1151 :attr:`~SSLSocket.context` is true.
1152
Victor Stinner14690702015-04-06 22:46:13 +02001153 .. versionchanged:: 3.5
1154 The socket timeout is no more reset each time bytes are received or sent.
1155 The socket timeout is now to maximum total duration of the handshake.
1156
Christian Heimes61d478c2018-01-27 15:51:38 +01001157 .. versionchanged:: 3.7
1158 Hostname or IP address is matched by OpenSSL during handshake. The
1159 function :func:`match_hostname` is no longer used. In case OpenSSL
1160 refuses a hostname or IP address, the handshake is aborted early and
1161 a TLS alert message is send to the peer.
1162
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001163.. method:: SSLSocket.getpeercert(binary_form=False)
1164
Georg Brandl7f01a132009-09-16 15:58:14 +00001165 If there is no certificate for the peer on the other end of the connection,
Antoine Pitrou20b85552013-09-29 19:50:53 +02001166 return ``None``. If the SSL handshake hasn't been done yet, raise
1167 :exc:`ValueError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001168
Antoine Pitroud34941a2013-04-16 20:27:17 +02001169 If the ``binary_form`` parameter is :const:`False`, and a certificate was
Georg Brandl7f01a132009-09-16 15:58:14 +00001170 received from the peer, this method returns a :class:`dict` instance. If the
1171 certificate was not validated, the dict is empty. If the certificate was
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001172 validated, it returns a dict with several keys, amongst them ``subject``
1173 (the principal for which the certificate was issued) and ``issuer``
1174 (the principal issuing the certificate). If a certificate contains an
1175 instance of the *Subject Alternative Name* extension (see :rfc:`3280`),
1176 there will also be a ``subjectAltName`` key in the dictionary.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001177
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001178 The ``subject`` and ``issuer`` fields are tuples containing the sequence
1179 of relative distinguished names (RDNs) given in the certificate's data
1180 structure for the respective fields, and each RDN is a sequence of
1181 name-value pairs. Here is a real-world example::
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001182
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001183 {'issuer': ((('countryName', 'IL'),),
1184 (('organizationName', 'StartCom Ltd.'),),
1185 (('organizationalUnitName',
1186 'Secure Digital Certificate Signing'),),
1187 (('commonName',
1188 'StartCom Class 2 Primary Intermediate Server CA'),)),
1189 'notAfter': 'Nov 22 08:15:19 2013 GMT',
1190 'notBefore': 'Nov 21 03:09:52 2011 GMT',
1191 'serialNumber': '95F0',
1192 'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),),
1193 (('countryName', 'US'),),
1194 (('stateOrProvinceName', 'California'),),
1195 (('localityName', 'San Francisco'),),
1196 (('organizationName', 'Electronic Frontier Foundation, Inc.'),),
1197 (('commonName', '*.eff.org'),),
1198 (('emailAddress', 'hostmaster@eff.org'),)),
1199 'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')),
1200 'version': 3}
1201
1202 .. note::
Larry Hastings3732ed22014-03-15 21:13:56 -07001203
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001204 To validate a certificate for a particular service, you can use the
1205 :func:`match_hostname` function.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001206
Georg Brandl7f01a132009-09-16 15:58:14 +00001207 If the ``binary_form`` parameter is :const:`True`, and a certificate was
1208 provided, this method returns the DER-encoded form of the entire certificate
1209 as a sequence of bytes, or :const:`None` if the peer did not provide a
Antoine Pitroud34941a2013-04-16 20:27:17 +02001210 certificate. Whether the peer provides a certificate depends on the SSL
1211 socket's role:
1212
1213 * for a client SSL socket, the server will always provide a certificate,
1214 regardless of whether validation was required;
1215
1216 * for a server SSL socket, the client will only provide a certificate
1217 when requested by the server; therefore :meth:`getpeercert` will return
1218 :const:`None` if you used :const:`CERT_NONE` (rather than
1219 :const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`).
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001220
Antoine Pitroufb046912010-11-09 20:21:19 +00001221 .. versionchanged:: 3.2
1222 The returned dictionary includes additional items such as ``issuer``
1223 and ``notBefore``.
1224
Antoine Pitrou20b85552013-09-29 19:50:53 +02001225 .. versionchanged:: 3.4
1226 :exc:`ValueError` is raised when the handshake isn't done.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001227 The returned dictionary includes additional X509v3 extension items
Larry Hastings3732ed22014-03-15 21:13:56 -07001228 such as ``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001229
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001230.. method:: SSLSocket.cipher()
1231
Georg Brandl7f01a132009-09-16 15:58:14 +00001232 Returns a three-value tuple containing the name of the cipher being used, the
1233 version of the SSL protocol that defines its use, and the number of secret
1234 bits being used. If no connection has been established, returns ``None``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001235
Benjamin Peterson4cb17812015-01-07 11:14:26 -06001236.. method:: SSLSocket.shared_ciphers()
1237
1238 Return the list of ciphers shared by the client during the handshake. Each
1239 entry of the returned list is a three-value tuple containing the name of the
1240 cipher, the version of the SSL protocol that defines its use, and the number
1241 of secret bits the cipher uses. :meth:`~SSLSocket.shared_ciphers` returns
1242 ``None`` if no connection has been established or the socket is a client
1243 socket.
1244
1245 .. versionadded:: 3.5
1246
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +01001247.. method:: SSLSocket.compression()
1248
1249 Return the compression algorithm being used as a string, or ``None``
1250 if the connection isn't compressed.
1251
1252 If the higher-level protocol supports its own compression mechanism,
1253 you can use :data:`OP_NO_COMPRESSION` to disable SSL-level compression.
1254
1255 .. versionadded:: 3.3
1256
Antoine Pitroud6494802011-07-21 01:11:30 +02001257.. method:: SSLSocket.get_channel_binding(cb_type="tls-unique")
1258
1259 Get channel binding data for current connection, as a bytes object. Returns
1260 ``None`` if not connected or the handshake has not been completed.
1261
1262 The *cb_type* parameter allow selection of the desired channel binding
1263 type. Valid channel binding types are listed in the
1264 :data:`CHANNEL_BINDING_TYPES` list. Currently only the 'tls-unique' channel
1265 binding, defined by :rfc:`5929`, is supported. :exc:`ValueError` will be
1266 raised if an unsupported channel binding type is requested.
1267
1268 .. versionadded:: 3.3
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001269
Benjamin Petersoncca27322015-01-23 16:35:37 -05001270.. method:: SSLSocket.selected_alpn_protocol()
1271
1272 Return the protocol that was selected during the TLS handshake. If
1273 :meth:`SSLContext.set_alpn_protocols` was not called, if the other party does
Benjamin Peterson88615022015-01-23 17:30:26 -05001274 not support ALPN, if this socket does not support any of the client's
1275 proposed protocols, or if the handshake has not happened yet, ``None`` is
Benjamin Petersoncca27322015-01-23 16:35:37 -05001276 returned.
1277
1278 .. versionadded:: 3.5
1279
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001280.. method:: SSLSocket.selected_npn_protocol()
1281
Benjamin Petersoncca27322015-01-23 16:35:37 -05001282 Return the higher-level protocol that was selected during the TLS/SSL
Antoine Pitrou47e40422014-09-04 21:00:10 +02001283 handshake. If :meth:`SSLContext.set_npn_protocols` was not called, or
1284 if the other party does not support NPN, or if the handshake has not yet
1285 happened, this will return ``None``.
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001286
1287 .. versionadded:: 3.3
1288
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001289.. method:: SSLSocket.unwrap()
1290
Georg Brandl7f01a132009-09-16 15:58:14 +00001291 Performs the SSL shutdown handshake, which removes the TLS layer from the
1292 underlying socket, and returns the underlying socket object. This can be
1293 used to go from encrypted operation over a connection to unencrypted. The
1294 returned socket should always be used for further communication with the
1295 other side of the connection, rather than the original socket.
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001296
Antoine Pitrou47e40422014-09-04 21:00:10 +02001297.. method:: SSLSocket.version()
1298
1299 Return the actual SSL protocol version negotiated by the connection
1300 as a string, or ``None`` is no secure connection is established.
1301 As of this writing, possible return values include ``"SSLv2"``,
1302 ``"SSLv3"``, ``"TLSv1"``, ``"TLSv1.1"`` and ``"TLSv1.2"``.
1303 Recent OpenSSL versions may define more return values.
1304
1305 .. versionadded:: 3.5
1306
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001307.. method:: SSLSocket.pending()
1308
1309 Returns the number of already decrypted bytes available for read, pending on
1310 the connection.
1311
Antoine Pitrouec883db2010-05-24 21:20:20 +00001312.. attribute:: SSLSocket.context
1313
1314 The :class:`SSLContext` object this SSL socket is tied to. If the SSL
Miss Islington (bot)102d5202018-02-27 01:45:31 -08001315 socket was created using the deprecated :func:`wrap_socket` function
Antoine Pitrouec883db2010-05-24 21:20:20 +00001316 (rather than :meth:`SSLContext.wrap_socket`), this is a custom context
1317 object created for this SSL socket.
1318
1319 .. versionadded:: 3.2
1320
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001321.. attribute:: SSLSocket.server_side
1322
1323 A boolean which is ``True`` for server-side sockets and ``False`` for
1324 client-side sockets.
1325
Victor Stinner41f92c22014-10-10 12:05:56 +02001326 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001327
1328.. attribute:: SSLSocket.server_hostname
1329
Victor Stinner41f92c22014-10-10 12:05:56 +02001330 Hostname of the server: :class:`str` type, or ``None`` for server-side
1331 socket or if the hostname was not specified in the constructor.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001332
Victor Stinner41f92c22014-10-10 12:05:56 +02001333 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001334
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001335 .. versionchanged:: 3.7
1336 The attribute is now always ASCII text. When ``server_hostname`` is
1337 an internationalized domain name (IDN), this attribute now stores the
1338 A-label form (``"xn--pythn-mua.org"``), rather than the U-label form
1339 (``"pythön.org"``).
1340
Christian Heimes99a65702016-09-10 23:44:53 +02001341.. attribute:: SSLSocket.session
1342
1343 The :class:`SSLSession` for this SSL connection. The session is available
1344 for client and server side sockets after the TLS handshake has been
1345 performed. For client sockets the session can be set before
1346 :meth:`~SSLSocket.do_handshake` has been called to reuse a session.
1347
1348 .. versionadded:: 3.6
1349
1350.. attribute:: SSLSocket.session_reused
1351
1352 .. versionadded:: 3.6
1353
Antoine Pitrouec883db2010-05-24 21:20:20 +00001354
Antoine Pitrou152efa22010-05-16 18:19:27 +00001355SSL Contexts
1356------------
1357
Antoine Pitroucafaad42010-05-24 15:58:43 +00001358.. versionadded:: 3.2
1359
Antoine Pitroub0182c82010-10-12 20:09:02 +00001360An SSL context holds various data longer-lived than single SSL connections,
1361such as SSL configuration options, certificate(s) and private key(s).
1362It also manages a cache of SSL sessions for server-side sockets, in order
1363to speed up repeated connections from the same clients.
1364
Christian Heimes598894f2016-09-05 23:19:05 +02001365.. class:: SSLContext(protocol=PROTOCOL_TLS)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001366
Christian Heimes598894f2016-09-05 23:19:05 +02001367 Create a new SSL context. You may pass *protocol* which must be one
Miss Islington (bot)102d5202018-02-27 01:45:31 -08001368 of the ``PROTOCOL_*`` constants defined in this module. The parameter
1369 specifies which version of the SSL protocol to use. Typically, the
1370 server chooses a particular protocol version, and the client must adapt
1371 to the server's choice. Most of the versions are not interoperable
1372 with the other versions. If not specified, the default is
1373 :data:`PROTOCOL_TLS`; it provides the most compatibility with other
1374 versions.
1375
1376 Here's a table showing which versions in a client (down the side) can connect
1377 to which versions in a server (along the top):
1378
1379 .. table::
1380
1381 ======================== ============ ============ ============= ========= =========== ===========
1382 *client* / **server** **SSLv2** **SSLv3** **TLS** [3]_ **TLSv1** **TLSv1.1** **TLSv1.2**
1383 ------------------------ ------------ ------------ ------------- --------- ----------- -----------
1384 *SSLv2* yes no no [1]_ no no no
1385 *SSLv3* no yes no [2]_ no no no
1386 *TLS* (*SSLv23*) [3]_ no [1]_ no [2]_ yes yes yes yes
1387 *TLSv1* no no yes yes no no
1388 *TLSv1.1* no no yes no yes no
1389 *TLSv1.2* no no yes no no yes
1390 ======================== ============ ============ ============= ========= =========== ===========
1391
1392 .. rubric:: Footnotes
1393 .. [1] :class:`SSLContext` disables SSLv2 with :data:`OP_NO_SSLv2` by default.
1394 .. [2] :class:`SSLContext` disables SSLv3 with :data:`OP_NO_SSLv3` by default.
1395 .. [3] TLS 1.3 protocol will be available with :data:`PROTOCOL_TLS` in
1396 OpenSSL >= 1.1.1. There is no dedicated PROTOCOL constant for just
1397 TLS 1.3.
Antoine Pitrou5bef4102013-11-23 16:16:29 +01001398
1399 .. seealso::
1400 :func:`create_default_context` lets the :mod:`ssl` module choose
1401 security settings for a given purpose.
Antoine Pitroub0182c82010-10-12 20:09:02 +00001402
Christian Heimes01113fa2016-09-05 23:23:24 +02001403 .. versionchanged:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +02001404
Christian Heimes358cfd42016-09-10 22:43:48 +02001405 The context is created with secure default values. The options
1406 :data:`OP_NO_COMPRESSION`, :data:`OP_CIPHER_SERVER_PREFERENCE`,
1407 :data:`OP_SINGLE_DH_USE`, :data:`OP_SINGLE_ECDH_USE`,
1408 :data:`OP_NO_SSLv2` (except for :data:`PROTOCOL_SSLv2`),
1409 and :data:`OP_NO_SSLv3` (except for :data:`PROTOCOL_SSLv3`) are
1410 set by default. The initial cipher suite list contains only ``HIGH``
1411 ciphers, no ``NULL`` ciphers and no ``MD5`` ciphers (except for
1412 :data:`PROTOCOL_SSLv2`).
Christian Heimes598894f2016-09-05 23:19:05 +02001413
Antoine Pitrou152efa22010-05-16 18:19:27 +00001414
1415:class:`SSLContext` objects have the following methods and attributes:
1416
Christian Heimes9a5395a2013-06-17 15:44:12 +02001417.. method:: SSLContext.cert_store_stats()
1418
1419 Get statistics about quantities of loaded X.509 certificates, count of
1420 X.509 certificates flagged as CA certificates and certificate revocation
1421 lists as dictionary.
1422
1423 Example for a context with one CA cert and one other cert::
1424
1425 >>> context.cert_store_stats()
1426 {'crl': 0, 'x509_ca': 1, 'x509': 2}
1427
1428 .. versionadded:: 3.4
1429
Christian Heimesefff7062013-11-21 03:35:02 +01001430
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001431.. method:: SSLContext.load_cert_chain(certfile, keyfile=None, password=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001432
1433 Load a private key and the corresponding certificate. The *certfile*
1434 string must be the path to a single file in PEM format containing the
1435 certificate as well as any number of CA certificates needed to establish
1436 the certificate's authenticity. The *keyfile* string, if present, must
1437 point to a file containing the private key in. Otherwise the private
1438 key will be taken from *certfile* as well. See the discussion of
1439 :ref:`ssl-certificates` for more information on how the certificate
1440 is stored in the *certfile*.
1441
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001442 The *password* argument may be a function to call to get the password for
1443 decrypting the private key. It will only be called if the private key is
1444 encrypted and a password is necessary. It will be called with no arguments,
1445 and it should return a string, bytes, or bytearray. If the return value is
1446 a string it will be encoded as UTF-8 before using it to decrypt the key.
1447 Alternatively a string, bytes, or bytearray value may be supplied directly
1448 as the *password* argument. It will be ignored if the private key is not
1449 encrypted and no password is needed.
1450
1451 If the *password* argument is not specified and a password is required,
1452 OpenSSL's built-in password prompting mechanism will be used to
1453 interactively prompt the user for a password.
1454
Antoine Pitrou152efa22010-05-16 18:19:27 +00001455 An :class:`SSLError` is raised if the private key doesn't
1456 match with the certificate.
1457
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001458 .. versionchanged:: 3.3
1459 New optional argument *password*.
1460
Christian Heimes72d28502013-11-23 13:56:58 +01001461.. method:: SSLContext.load_default_certs(purpose=Purpose.SERVER_AUTH)
1462
1463 Load a set of default "certification authority" (CA) certificates from
1464 default locations. On Windows it loads CA certs from the ``CA`` and
1465 ``ROOT`` system stores. On other systems it calls
1466 :meth:`SSLContext.set_default_verify_paths`. In the future the method may
1467 load CA certificates from other locations, too.
1468
1469 The *purpose* flag specifies what kind of CA certificates are loaded. The
1470 default settings :data:`Purpose.SERVER_AUTH` loads certificates, that are
1471 flagged and trusted for TLS web server authentication (client side
Christian Heimes6b2ff982013-11-23 14:42:01 +01001472 sockets). :data:`Purpose.CLIENT_AUTH` loads CA certificates for client
Christian Heimes72d28502013-11-23 13:56:58 +01001473 certificate verification on the server side.
1474
1475 .. versionadded:: 3.4
1476
Christian Heimesefff7062013-11-21 03:35:02 +01001477.. method:: SSLContext.load_verify_locations(cafile=None, capath=None, cadata=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001478
1479 Load a set of "certification authority" (CA) certificates used to validate
1480 other peers' certificates when :data:`verify_mode` is other than
1481 :data:`CERT_NONE`. At least one of *cafile* or *capath* must be specified.
1482
Christian Heimes22587792013-11-21 23:56:13 +01001483 This method can also load certification revocation lists (CRLs) in PEM or
Donald Stufft8b852f12014-05-20 12:58:38 -04001484 DER format. In order to make use of CRLs, :attr:`SSLContext.verify_flags`
Christian Heimes22587792013-11-21 23:56:13 +01001485 must be configured properly.
1486
Christian Heimes3e738f92013-06-09 18:07:16 +02001487 The *cafile* string, if present, is the path to a file of concatenated
Antoine Pitrou152efa22010-05-16 18:19:27 +00001488 CA certificates in PEM format. See the discussion of
1489 :ref:`ssl-certificates` for more information about how to arrange the
1490 certificates in this file.
1491
1492 The *capath* string, if present, is
1493 the path to a directory containing several CA certificates in PEM format,
1494 following an `OpenSSL specific layout
Sanyam Khurana338cd832018-01-20 05:55:37 +05301495 <https://www.openssl.org/docs/manmaster/man3/SSL_CTX_load_verify_locations.html>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001496
Christian Heimesefff7062013-11-21 03:35:02 +01001497 The *cadata* object, if present, is either an ASCII string of one or more
Serhiy Storchakab757c832014-12-05 22:25:22 +02001498 PEM-encoded certificates or a :term:`bytes-like object` of DER-encoded
Christian Heimesefff7062013-11-21 03:35:02 +01001499 certificates. Like with *capath* extra lines around PEM-encoded
1500 certificates are ignored but at least one certificate must be present.
1501
1502 .. versionchanged:: 3.4
1503 New optional argument *cadata*
1504
Christian Heimes9a5395a2013-06-17 15:44:12 +02001505.. method:: SSLContext.get_ca_certs(binary_form=False)
1506
1507 Get a list of loaded "certification authority" (CA) certificates. If the
1508 ``binary_form`` parameter is :const:`False` each list
1509 entry is a dict like the output of :meth:`SSLSocket.getpeercert`. Otherwise
1510 the method returns a list of DER-encoded certificates. The returned list
1511 does not contain certificates from *capath* unless a certificate was
1512 requested and loaded by a SSL connection.
1513
Antoine Pitrou97aa9532015-04-13 21:06:15 +02001514 .. note::
1515 Certificates in a capath directory aren't loaded unless they have
1516 been used at least once.
1517
Larry Hastingsd36fc432013-08-03 02:49:53 -07001518 .. versionadded:: 3.4
Christian Heimes9a5395a2013-06-17 15:44:12 +02001519
Christian Heimes25bfcd52016-09-06 00:04:45 +02001520.. method:: SSLContext.get_ciphers()
1521
1522 Get a list of enabled ciphers. The list is in order of cipher priority.
1523 See :meth:`SSLContext.set_ciphers`.
1524
1525 Example::
1526
1527 >>> ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
1528 >>> ctx.set_ciphers('ECDHE+AESGCM:!ECDSA')
1529 >>> ctx.get_ciphers() # OpenSSL 1.0.x
1530 [{'alg_bits': 256,
1531 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA '
1532 'Enc=AESGCM(256) Mac=AEAD',
1533 'id': 50380848,
1534 'name': 'ECDHE-RSA-AES256-GCM-SHA384',
1535 'protocol': 'TLSv1/SSLv3',
1536 'strength_bits': 256},
1537 {'alg_bits': 128,
1538 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA '
1539 'Enc=AESGCM(128) Mac=AEAD',
1540 'id': 50380847,
1541 'name': 'ECDHE-RSA-AES128-GCM-SHA256',
1542 'protocol': 'TLSv1/SSLv3',
1543 'strength_bits': 128}]
1544
1545 On OpenSSL 1.1 and newer the cipher dict contains additional fields::
Marco Buttu7b2491a2017-04-13 16:17:59 +02001546
Christian Heimes25bfcd52016-09-06 00:04:45 +02001547 >>> ctx.get_ciphers() # OpenSSL 1.1+
1548 [{'aead': True,
1549 'alg_bits': 256,
1550 'auth': 'auth-rsa',
1551 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA '
1552 'Enc=AESGCM(256) Mac=AEAD',
1553 'digest': None,
1554 'id': 50380848,
1555 'kea': 'kx-ecdhe',
1556 'name': 'ECDHE-RSA-AES256-GCM-SHA384',
1557 'protocol': 'TLSv1.2',
1558 'strength_bits': 256,
1559 'symmetric': 'aes-256-gcm'},
1560 {'aead': True,
1561 'alg_bits': 128,
1562 'auth': 'auth-rsa',
1563 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA '
1564 'Enc=AESGCM(128) Mac=AEAD',
1565 'digest': None,
1566 'id': 50380847,
1567 'kea': 'kx-ecdhe',
1568 'name': 'ECDHE-RSA-AES128-GCM-SHA256',
1569 'protocol': 'TLSv1.2',
1570 'strength_bits': 128,
1571 'symmetric': 'aes-128-gcm'}]
1572
1573 Availability: OpenSSL 1.0.2+
1574
1575 .. versionadded:: 3.6
1576
Antoine Pitrou664c2d12010-11-17 20:29:42 +00001577.. method:: SSLContext.set_default_verify_paths()
1578
1579 Load a set of default "certification authority" (CA) certificates from
1580 a filesystem path defined when building the OpenSSL library. Unfortunately,
1581 there's no easy way to know whether this method succeeds: no error is
1582 returned if no certificates are to be found. When the OpenSSL library is
1583 provided as part of the operating system, though, it is likely to be
1584 configured properly.
1585
Antoine Pitrou152efa22010-05-16 18:19:27 +00001586.. method:: SSLContext.set_ciphers(ciphers)
1587
1588 Set the available ciphers for sockets created with this context.
1589 It should be a string in the `OpenSSL cipher list format
Felipe19e4d932017-09-20 20:20:18 +02001590 <https://wiki.openssl.org/index.php/Manual:Ciphers(1)#CIPHER_LIST_FORMAT>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001591 If no cipher can be selected (because compile-time options or other
1592 configuration forbids use of all the specified ciphers), an
1593 :class:`SSLError` will be raised.
1594
1595 .. note::
1596 when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will
1597 give the currently selected cipher.
1598
Miss Islington (bot)cd57b482018-05-22 14:40:46 -07001599 OpenSSL 1.1.1 has TLS 1.3 cipher suites enabled by default. The suites
1600 cannot be disabled with :meth:`~SSLContext.set_ciphers`.
1601
Benjamin Petersoncca27322015-01-23 16:35:37 -05001602.. method:: SSLContext.set_alpn_protocols(protocols)
1603
1604 Specify which protocols the socket should advertise during the SSL/TLS
1605 handshake. It should be a list of ASCII strings, like ``['http/1.1',
1606 'spdy/2']``, ordered by preference. The selection of a protocol will happen
1607 during the handshake, and will play out according to :rfc:`7301`. After a
1608 successful handshake, the :meth:`SSLSocket.selected_alpn_protocol` method will
1609 return the agreed-upon protocol.
1610
1611 This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is
1612 False.
1613
Christian Heimes7b40cb72017-08-15 10:33:43 +02001614 OpenSSL 1.1.0 to 1.1.0e will abort the handshake and raise :exc:`SSLError`
1615 when both sides support ALPN but cannot agree on a protocol. 1.1.0f+
1616 behaves like 1.0.2, :meth:`SSLSocket.selected_alpn_protocol` returns None.
Christian Heimes598894f2016-09-05 23:19:05 +02001617
Benjamin Petersoncca27322015-01-23 16:35:37 -05001618 .. versionadded:: 3.5
1619
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001620.. method:: SSLContext.set_npn_protocols(protocols)
1621
R David Murrayc7f75792013-06-26 15:11:12 -04001622 Specify which protocols the socket should advertise during the SSL/TLS
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001623 handshake. It should be a list of strings, like ``['http/1.1', 'spdy/2']``,
1624 ordered by preference. The selection of a protocol will happen during the
Sanyam Khurana338cd832018-01-20 05:55:37 +05301625 handshake, and will play out according to the `Application Layer Protocol Negotiation
1626 <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_. After a
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001627 successful handshake, the :meth:`SSLSocket.selected_npn_protocol` method will
1628 return the agreed-upon protocol.
1629
1630 This method will raise :exc:`NotImplementedError` if :data:`HAS_NPN` is
1631 False.
1632
1633 .. versionadded:: 3.3
1634
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001635.. attribute:: SSLContext.sni_callback
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001636
1637 Register a callback function that will be called after the TLS Client Hello
1638 handshake message has been received by the SSL/TLS server when the TLS client
1639 specifies a server name indication. The server name indication mechanism
1640 is specified in :rfc:`6066` section 3 - Server Name Indication.
1641
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001642 Only one callback can be set per ``SSLContext``. If *sni_callback*
1643 is set to ``None`` then the callback is disabled. Calling this function a
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001644 subsequent time will disable the previously registered callback.
1645
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001646 The callback function will be called with three
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001647 arguments; the first being the :class:`ssl.SSLSocket`, the second is a string
1648 that represents the server name that the client is intending to communicate
Antoine Pitrou50b24d02013-04-11 20:48:42 +02001649 (or :const:`None` if the TLS Client Hello does not contain a server name)
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001650 and the third argument is the original :class:`SSLContext`. The server name
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001651 argument is text. For internationalized domain name, the server
1652 name is an IDN A-label (``"xn--pythn-mua.org"``).
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001653
1654 A typical use of this callback is to change the :class:`ssl.SSLSocket`'s
1655 :attr:`SSLSocket.context` attribute to a new object of type
1656 :class:`SSLContext` representing a certificate chain that matches the server
1657 name.
1658
1659 Due to the early negotiation phase of the TLS connection, only limited
1660 methods and attributes are usable like
Benjamin Petersoncca27322015-01-23 16:35:37 -05001661 :meth:`SSLSocket.selected_alpn_protocol` and :attr:`SSLSocket.context`.
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001662 :meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.getpeercert`,
1663 :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compress` methods require that
1664 the TLS connection has progressed beyond the TLS Client Hello and therefore
1665 will not contain return meaningful values nor can they be called safely.
1666
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001667 The *sni_callback* function must return ``None`` to allow the
Terry Jan Reedy8e7586b2013-03-11 18:38:13 -04001668 TLS negotiation to continue. If a TLS failure is required, a constant
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001669 :const:`ALERT_DESCRIPTION_* <ALERT_DESCRIPTION_INTERNAL_ERROR>` can be
1670 returned. Other return values will result in a TLS fatal error with
1671 :const:`ALERT_DESCRIPTION_INTERNAL_ERROR`.
1672
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001673 If an exception is raised from the *sni_callback* function the TLS
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001674 connection will terminate with a fatal TLS alert message
1675 :const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`.
1676
1677 This method will raise :exc:`NotImplementedError` if the OpenSSL library
1678 had OPENSSL_NO_TLSEXT defined when it was built.
1679
Miss Islington (bot)1c37e272018-02-23 19:18:28 -08001680 .. versionadded:: 3.7
1681
1682.. attribute:: SSLContext.set_servername_callback(server_name_callback)
1683
1684 This is a legacy API retained for backwards compatibility. When possible,
1685 you should use :attr:`sni_callback` instead. The given *server_name_callback*
1686 is similar to *sni_callback*, except that when the server hostname is an
1687 IDN-encoded internationalized domain name, the *server_name_callback*
1688 receives a decoded U-label (``"pythön.org"``).
1689
1690 If there is an decoding error on the server name, the TLS connection will
1691 terminate with an :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` fatal TLS
1692 alert message to the client.
1693
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001694 .. versionadded:: 3.4
1695
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001696.. method:: SSLContext.load_dh_params(dhfile)
1697
Miss Islington (bot)17b6c192018-03-10 17:21:27 -08001698 Load the key generation parameters for Diffie-Hellman (DH) key exchange.
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001699 Using DH key exchange improves forward secrecy at the expense of
1700 computational resources (both on the server and on the client).
1701 The *dhfile* parameter should be the path to a file containing DH
1702 parameters in PEM format.
1703
1704 This setting doesn't apply to client sockets. You can also use the
1705 :data:`OP_SINGLE_DH_USE` option to further improve security.
1706
1707 .. versionadded:: 3.3
1708
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001709.. method:: SSLContext.set_ecdh_curve(curve_name)
1710
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001711 Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH) key
1712 exchange. ECDH is significantly faster than regular DH while arguably
1713 as secure. The *curve_name* parameter should be a string describing
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001714 a well-known elliptic curve, for example ``prime256v1`` for a widely
1715 supported curve.
1716
1717 This setting doesn't apply to client sockets. You can also use the
1718 :data:`OP_SINGLE_ECDH_USE` option to further improve security.
1719
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +03001720 This method is not available if :data:`HAS_ECDH` is ``False``.
Antoine Pitrou501da612011-12-21 09:27:41 +01001721
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001722 .. versionadded:: 3.3
1723
1724 .. seealso::
Sanyam Khurana1b4587a2017-12-06 22:09:33 +05301725 `SSL/TLS & Perfect Forward Secrecy <https://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy>`_
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001726 Vincent Bernat.
1727
Antoine Pitroud5323212010-10-22 18:19:07 +00001728.. method:: SSLContext.wrap_socket(sock, server_side=False, \
1729 do_handshake_on_connect=True, suppress_ragged_eofs=True, \
Christian Heimes99a65702016-09-10 23:44:53 +02001730 server_hostname=None, session=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001731
Christian Heimes4df60f12017-09-15 20:26:05 +02001732 Wrap an existing Python socket *sock* and return an instance of
Miss Islington (bot)102d5202018-02-27 01:45:31 -08001733 :attr:`SSLContext.sslsocket_class` (default :class:`SSLSocket`). The
1734 returned SSL socket is tied to the context, its settings and certificates.
1735 *sock* must be a :data:`~socket.SOCK_STREAM` socket; other
1736 socket types are unsupported.
Antoine Pitrou3e86ba42013-12-28 17:26:33 +01001737
Miss Islington (bot)102d5202018-02-27 01:45:31 -08001738 The parameter ``server_side`` is a boolean which identifies whether
1739 server-side or client-side behavior is desired from this socket.
1740
1741 For client-side sockets, the context construction is lazy; if the
1742 underlying socket isn't connected yet, the context construction will be
1743 performed after :meth:`connect` is called on the socket. For
1744 server-side sockets, if the socket has no remote peer, it is assumed
1745 to be a listening socket, and the server-side SSL wrapping is
1746 automatically performed on client connections accepted via the
1747 :meth:`accept` method. The method may raise :exc:`SSLError`.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001748
Antoine Pitroud5323212010-10-22 18:19:07 +00001749 On client connections, the optional parameter *server_hostname* specifies
1750 the hostname of the service which we are connecting to. This allows a
1751 single server to host multiple SSL-based services with distinct certificates,
Benjamin Peterson7243b572014-11-23 17:04:34 -06001752 quite similarly to HTTP virtual hosts. Specifying *server_hostname* will
1753 raise a :exc:`ValueError` if *server_side* is true.
1754
Miss Islington (bot)102d5202018-02-27 01:45:31 -08001755 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
1756 handshake automatically after doing a :meth:`socket.connect`, or whether the
1757 application program will call it explicitly, by invoking the
1758 :meth:`SSLSocket.do_handshake` method. Calling
1759 :meth:`SSLSocket.do_handshake` explicitly gives the program control over the
1760 blocking behavior of the socket I/O involved in the handshake.
1761
1762 The parameter ``suppress_ragged_eofs`` specifies how the
1763 :meth:`SSLSocket.recv` method should signal unexpected EOF from the other end
1764 of the connection. If specified as :const:`True` (the default), it returns a
1765 normal EOF (an empty bytes object) in response to unexpected EOF errors
1766 raised from the underlying socket; if :const:`False`, it will raise the
1767 exceptions back to the caller.
1768
Christian Heimes99a65702016-09-10 23:44:53 +02001769 *session*, see :attr:`~SSLSocket.session`.
1770
Benjamin Peterson7243b572014-11-23 17:04:34 -06001771 .. versionchanged:: 3.5
1772 Always allow a server_hostname to be passed, even if OpenSSL does not
1773 have SNI.
Antoine Pitroud5323212010-10-22 18:19:07 +00001774
Christian Heimes99a65702016-09-10 23:44:53 +02001775 .. versionchanged:: 3.6
1776 *session* argument was added.
1777
Christian Heimes4df60f12017-09-15 20:26:05 +02001778 .. versionchanged:: 3.7
1779 The method returns on instance of :attr:`SSLContext.sslsocket_class`
1780 instead of hard-coded :class:`SSLSocket`.
1781
1782.. attribute:: SSLContext.sslsocket_class
1783
1784 The return type of :meth:`SSLContext.wrap_sockets`, defaults to
1785 :class:`SSLSocket`. The attribute can be overridden on instance of class
1786 in order to return a custom subclass of :class:`SSLSocket`.
1787
1788 .. versionadded:: 3.7
1789
Victor Stinner805b2622014-10-10 12:49:08 +02001790.. method:: SSLContext.wrap_bio(incoming, outgoing, server_side=False, \
Christian Heimes99a65702016-09-10 23:44:53 +02001791 server_hostname=None, session=None)
Victor Stinner805b2622014-10-10 12:49:08 +02001792
Christian Heimes4df60f12017-09-15 20:26:05 +02001793 Wrap the BIO objects *incoming* and *outgoing* and return an instance of
1794 attr:`SSLContext.sslobject_class` (default :class:`SSLObject`). The SSL
1795 routines will read input data from the incoming BIO and write data to the
1796 outgoing BIO.
Victor Stinner805b2622014-10-10 12:49:08 +02001797
Christian Heimes99a65702016-09-10 23:44:53 +02001798 The *server_side*, *server_hostname* and *session* parameters have the
1799 same meaning as in :meth:`SSLContext.wrap_socket`.
1800
1801 .. versionchanged:: 3.6
1802 *session* argument was added.
Victor Stinner805b2622014-10-10 12:49:08 +02001803
Christian Heimes4df60f12017-09-15 20:26:05 +02001804 .. versionchanged:: 3.7
1805 The method returns on instance of :attr:`SSLContext.sslobject_class`
1806 instead of hard-coded :class:`SSLObject`.
1807
1808.. attribute:: SSLContext.sslobject_class
1809
1810 The return type of :meth:`SSLContext.wrap_bio`, defaults to
1811 :class:`SSLObject`. The attribute can be overridden on instance of class
1812 in order to return a custom subclass of :class:`SSLObject`.
1813
1814 .. versionadded:: 3.7
1815
Antoine Pitroub0182c82010-10-12 20:09:02 +00001816.. method:: SSLContext.session_stats()
1817
1818 Get statistics about the SSL sessions created or managed by this context.
Sanyam Khurana338cd832018-01-20 05:55:37 +05301819 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 +00001820 numeric values. For example, here is the total number of hits and misses
1821 in the session cache since the context was created::
1822
1823 >>> stats = context.session_stats()
1824 >>> stats['hits'], stats['misses']
1825 (0, 0)
1826
Christian Heimes1aa9a752013-12-02 02:41:19 +01001827.. attribute:: SSLContext.check_hostname
1828
Berker Peksag315e1042015-05-19 01:36:55 +03001829 Whether to match the peer cert's hostname with :func:`match_hostname` in
Christian Heimes1aa9a752013-12-02 02:41:19 +01001830 :meth:`SSLSocket.do_handshake`. The context's
1831 :attr:`~SSLContext.verify_mode` must be set to :data:`CERT_OPTIONAL` or
1832 :data:`CERT_REQUIRED`, and you must pass *server_hostname* to
Christian Heimese82c0342017-09-15 20:29:57 +02001833 :meth:`~SSLContext.wrap_socket` in order to match the hostname. Enabling
1834 hostname checking automatically sets :attr:`~SSLContext.verify_mode` from
1835 :data:`CERT_NONE` to :data:`CERT_REQUIRED`. It cannot be set back to
1836 :data:`CERT_NONE` as long as hostname checking is enabled.
Christian Heimes1aa9a752013-12-02 02:41:19 +01001837
1838 Example::
1839
1840 import socket, ssl
1841
Miss Islington (bot)e5d38de2018-02-20 22:02:18 -08001842 context = ssl.SSLContext()
Christian Heimes1aa9a752013-12-02 02:41:19 +01001843 context.verify_mode = ssl.CERT_REQUIRED
1844 context.check_hostname = True
1845 context.load_default_certs()
1846
1847 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Berker Peksag38bf87c2014-07-17 05:00:36 +03001848 ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
1849 ssl_sock.connect(('www.verisign.com', 443))
Christian Heimes1aa9a752013-12-02 02:41:19 +01001850
1851 .. versionadded:: 3.4
1852
Christian Heimese82c0342017-09-15 20:29:57 +02001853 .. versionchanged:: 3.7
1854
1855 :attr:`~SSLContext.verify_mode` is now automatically changed
1856 to :data:`CERT_REQUIRED` when hostname checking is enabled and
1857 :attr:`~SSLContext.verify_mode` is :data:`CERT_NONE`. Previously
1858 the same operation would have failed with a :exc:`ValueError`.
1859
Christian Heimes1aa9a752013-12-02 02:41:19 +01001860 .. note::
1861
1862 This features requires OpenSSL 0.9.8f or newer.
1863
Miss Islington (bot)4c842b02018-02-27 03:41:04 -08001864.. attribute:: SSLContext.maximum_version
1865
1866 A :class:`TLSVersion` enum member representing the highest supported
1867 TLS version. The value defaults to :attr:`TLSVersion.MAXIMUM_SUPPORTED`.
1868 The attribute is read-only for protocols other than :attr:`PROTOCOL_TLS`,
1869 :attr:`PROTOCOL_TLS_CLIENT`, and :attr:`PROTOCOL_TLS_SERVER`.
1870
1871 The attributes :attr:`~SSLContext.maximum_version`,
1872 :attr:`~SSLContext.minimum_version` and
1873 :attr:`SSLContext.options` all affect the supported SSL
1874 and TLS versions of the context. The implementation does not prevent
1875 invalid combination. For example a context with
1876 :attr:`OP_NO_TLSv1_2` in :attr:`~SSLContext.options` and
1877 :attr:`~SSLContext.maximum_version` set to :attr:`TLSVersion.TLSv1_2`
1878 will not be able to establish a TLS 1.2 connection.
1879
1880 .. note::
1881
1882 This attribute is not available unless the ssl module is compiled
1883 with OpenSSL 1.1.0g or newer.
1884
1885.. attribute:: SSLContext.minimum_version
1886
1887 Like :attr:`SSLContext.maximum_version` except it is the lowest
1888 supported version or :attr:`TLSVersion.MINIMUM_SUPPORTED`.
1889
1890 .. note::
1891
1892 This attribute is not available unless the ssl module is compiled
1893 with OpenSSL 1.1.0g or newer.
1894
Antoine Pitroub5218772010-05-21 09:56:06 +00001895.. attribute:: SSLContext.options
1896
1897 An integer representing the set of SSL options enabled on this context.
1898 The default value is :data:`OP_ALL`, but you can specify other options
1899 such as :data:`OP_NO_SSLv2` by ORing them together.
1900
1901 .. note::
1902 With versions of OpenSSL older than 0.9.8m, it is only possible
1903 to set options, not to clear them. Attempting to clear an option
1904 (by resetting the corresponding bits) will raise a ``ValueError``.
1905
Christian Heimes3aeacad2016-09-10 00:19:35 +02001906 .. versionchanged:: 3.6
1907 :attr:`SSLContext.options` returns :class:`Options` flags:
1908
Marco Buttu7b2491a2017-04-13 16:17:59 +02001909 >>> ssl.create_default_context().options # doctest: +SKIP
Christian Heimes3aeacad2016-09-10 00:19:35 +02001910 <Options.OP_ALL|OP_NO_SSLv3|OP_NO_SSLv2|OP_NO_COMPRESSION: 2197947391>
1911
Antoine Pitrou152efa22010-05-16 18:19:27 +00001912.. attribute:: SSLContext.protocol
1913
1914 The protocol version chosen when constructing the context. This attribute
1915 is read-only.
1916
Christian Heimes61d478c2018-01-27 15:51:38 +01001917.. attribute:: SSLContext.hostname_checks_common_name
1918
1919 Whether :attr:`~SSLContext.check_hostname` falls back to verify the cert's
1920 subject common name in the absence of a subject alternative name
1921 extension (default: true).
1922
1923 .. versionadded:: 3.7
1924
1925 .. note::
1926 Only writeable with OpenSSL 1.1.0 or higher.
1927
Christian Heimes22587792013-11-21 23:56:13 +01001928.. attribute:: SSLContext.verify_flags
1929
1930 The flags for certificate verification operations. You can set flags like
1931 :data:`VERIFY_CRL_CHECK_LEAF` by ORing them together. By default OpenSSL
1932 does neither require nor verify certificate revocation lists (CRLs).
Christian Heimes2427b502013-11-23 11:24:32 +01001933 Available only with openssl version 0.9.8+.
Christian Heimes22587792013-11-21 23:56:13 +01001934
1935 .. versionadded:: 3.4
1936
Christian Heimes3aeacad2016-09-10 00:19:35 +02001937 .. versionchanged:: 3.6
1938 :attr:`SSLContext.verify_flags` returns :class:`VerifyFlags` flags:
1939
Marco Buttu7b2491a2017-04-13 16:17:59 +02001940 >>> ssl.create_default_context().verify_flags # doctest: +SKIP
Christian Heimes3aeacad2016-09-10 00:19:35 +02001941 <VerifyFlags.VERIFY_X509_TRUSTED_FIRST: 32768>
1942
Antoine Pitrou152efa22010-05-16 18:19:27 +00001943.. attribute:: SSLContext.verify_mode
1944
1945 Whether to try to verify other peers' certificates and how to behave
1946 if verification fails. This attribute must be one of
1947 :data:`CERT_NONE`, :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`.
1948
Christian Heimes3aeacad2016-09-10 00:19:35 +02001949 .. versionchanged:: 3.6
1950 :attr:`SSLContext.verify_mode` returns :class:`VerifyMode` enum:
1951
1952 >>> ssl.create_default_context().verify_mode
1953 <VerifyMode.CERT_REQUIRED: 2>
Antoine Pitrou152efa22010-05-16 18:19:27 +00001954
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001955.. index:: single: certificates
1956
1957.. index:: single: X509 certificate
1958
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001959.. _ssl-certificates:
1960
Thomas Woutersed03b412007-08-28 21:37:11 +00001961Certificates
1962------------
1963
Georg Brandl7f01a132009-09-16 15:58:14 +00001964Certificates in general are part of a public-key / private-key system. In this
1965system, each *principal*, (which may be a machine, or a person, or an
1966organization) is assigned a unique two-part encryption key. One part of the key
1967is public, and is called the *public key*; the other part is kept secret, and is
1968called the *private key*. The two parts are related, in that if you encrypt a
1969message with one of the parts, you can decrypt it with the other part, and
1970**only** with the other part.
Thomas Woutersed03b412007-08-28 21:37:11 +00001971
Georg Brandl7f01a132009-09-16 15:58:14 +00001972A certificate contains information about two principals. It contains the name
1973of a *subject*, and the subject's public key. It also contains a statement by a
1974second principal, the *issuer*, that the subject is who he claims to be, and
1975that this is indeed the subject's public key. The issuer's statement is signed
1976with the issuer's private key, which only the issuer knows. However, anyone can
1977verify the issuer's statement by finding the issuer's public key, decrypting the
1978statement with it, and comparing it to the other information in the certificate.
1979The certificate also contains information about the time period over which it is
1980valid. This is expressed as two fields, called "notBefore" and "notAfter".
Thomas Woutersed03b412007-08-28 21:37:11 +00001981
Georg Brandl7f01a132009-09-16 15:58:14 +00001982In the Python use of certificates, a client or server can use a certificate to
1983prove who they are. The other side of a network connection can also be required
1984to produce a certificate, and that certificate can be validated to the
1985satisfaction of the client or server that requires such validation. The
1986connection attempt can be set to raise an exception if the validation fails.
1987Validation is done automatically, by the underlying OpenSSL framework; the
1988application need not concern itself with its mechanics. But the application
1989does usually need to provide sets of certificates to allow this process to take
1990place.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001991
Georg Brandl7f01a132009-09-16 15:58:14 +00001992Python uses files to contain certificates. They should be formatted as "PEM"
1993(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
1994and a footer line::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001995
1996 -----BEGIN CERTIFICATE-----
1997 ... (certificate in base64 PEM encoding) ...
1998 -----END CERTIFICATE-----
1999
Antoine Pitrou152efa22010-05-16 18:19:27 +00002000Certificate chains
2001^^^^^^^^^^^^^^^^^^
2002
Georg Brandl7f01a132009-09-16 15:58:14 +00002003The Python files which contain certificates can contain a sequence of
2004certificates, sometimes called a *certificate chain*. This chain should start
2005with the specific certificate for the principal who "is" the client or server,
2006and then the certificate for the issuer of that certificate, and then the
2007certificate for the issuer of *that* certificate, and so on up the chain till
2008you get to a certificate which is *self-signed*, that is, a certificate which
2009has the same subject and issuer, sometimes called a *root certificate*. The
2010certificates should just be concatenated together in the certificate file. For
2011example, suppose we had a three certificate chain, from our server certificate
2012to the certificate of the certification authority that signed our server
2013certificate, to the root certificate of the agency which issued the
2014certification authority's certificate::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002015
2016 -----BEGIN CERTIFICATE-----
2017 ... (certificate for your server)...
2018 -----END CERTIFICATE-----
2019 -----BEGIN CERTIFICATE-----
2020 ... (the certificate for the CA)...
2021 -----END CERTIFICATE-----
2022 -----BEGIN CERTIFICATE-----
2023 ... (the root certificate for the CA's issuer)...
2024 -----END CERTIFICATE-----
2025
Antoine Pitrou152efa22010-05-16 18:19:27 +00002026CA certificates
2027^^^^^^^^^^^^^^^
2028
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002029If you are going to require validation of the other side of the connection's
2030certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandl7f01a132009-09-16 15:58:14 +00002031chains for each issuer you are willing to trust. Again, this file just contains
2032these chains concatenated together. For validation, Python will use the first
Donald Stufft41374652014-03-24 19:26:03 -04002033chain it finds in the file which matches. The platform's certificates file can
2034be used by calling :meth:`SSLContext.load_default_certs`, this is done
2035automatically with :func:`.create_default_context`.
Thomas Woutersed03b412007-08-28 21:37:11 +00002036
Antoine Pitrou152efa22010-05-16 18:19:27 +00002037Combined key and certificate
2038^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2039
2040Often the private key is stored in the same file as the certificate; in this
2041case, only the ``certfile`` parameter to :meth:`SSLContext.load_cert_chain`
2042and :func:`wrap_socket` needs to be passed. If the private key is stored
2043with the certificate, it should come before the first certificate in
2044the certificate chain::
2045
2046 -----BEGIN RSA PRIVATE KEY-----
2047 ... (private key in base64 encoding) ...
2048 -----END RSA PRIVATE KEY-----
2049 -----BEGIN CERTIFICATE-----
2050 ... (certificate in base64 PEM encoding) ...
2051 -----END CERTIFICATE-----
2052
2053Self-signed certificates
2054^^^^^^^^^^^^^^^^^^^^^^^^
2055
Georg Brandl7f01a132009-09-16 15:58:14 +00002056If you are going to create a server that provides SSL-encrypted connection
2057services, you will need to acquire a certificate for that service. There are
2058many ways of acquiring appropriate certificates, such as buying one from a
2059certification authority. Another common practice is to generate a self-signed
2060certificate. The simplest way to do this is with the OpenSSL package, using
2061something like the following::
Thomas Woutersed03b412007-08-28 21:37:11 +00002062
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002063 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
2064 Generating a 1024 bit RSA private key
2065 .......++++++
2066 .............................++++++
2067 writing new private key to 'cert.pem'
2068 -----
2069 You are about to be asked to enter information that will be incorporated
2070 into your certificate request.
2071 What you are about to enter is what is called a Distinguished Name or a DN.
2072 There are quite a few fields but you can leave some blank
2073 For some fields there will be a default value,
2074 If you enter '.', the field will be left blank.
2075 -----
2076 Country Name (2 letter code) [AU]:US
2077 State or Province Name (full name) [Some-State]:MyState
2078 Locality Name (eg, city) []:Some City
2079 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
2080 Organizational Unit Name (eg, section) []:My Group
2081 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
2082 Email Address []:ops@myserver.mygroup.myorganization.com
2083 %
Thomas Woutersed03b412007-08-28 21:37:11 +00002084
Georg Brandl7f01a132009-09-16 15:58:14 +00002085The disadvantage of a self-signed certificate is that it is its own root
2086certificate, and no one else will have it in their cache of known (and trusted)
2087root certificates.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002088
2089
Thomas Woutersed03b412007-08-28 21:37:11 +00002090Examples
2091--------
2092
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002093Testing for SSL support
2094^^^^^^^^^^^^^^^^^^^^^^^
2095
Georg Brandl7f01a132009-09-16 15:58:14 +00002096To test for the presence of SSL support in a Python installation, user code
2097should use the following idiom::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002098
2099 try:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002100 import ssl
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002101 except ImportError:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002102 pass
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002103 else:
Serhiy Storchakadba90392016-05-10 12:01:23 +03002104 ... # do something that requires SSL support
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002105
2106Client-side operation
2107^^^^^^^^^^^^^^^^^^^^^
2108
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002109This example creates a SSL context with the recommended security settings
2110for client sockets, including automatic certificate verification::
Thomas Woutersed03b412007-08-28 21:37:11 +00002111
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002112 >>> context = ssl.create_default_context()
Thomas Woutersed03b412007-08-28 21:37:11 +00002113
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002114If you prefer to tune security settings yourself, you might create
2115a context from scratch (but beware that you might not get the settings
2116right)::
Antoine Pitrou152efa22010-05-16 18:19:27 +00002117
Miss Islington (bot)e5d38de2018-02-20 22:02:18 -08002118 >>> context = ssl.SSLContext()
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002119 >>> context.verify_mode = ssl.CERT_REQUIRED
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002120 >>> context.check_hostname = True
Antoine Pitrou152efa22010-05-16 18:19:27 +00002121 >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
2122
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002123(this snippet assumes your operating system places a bundle of all CA
2124certificates in ``/etc/ssl/certs/ca-bundle.crt``; if not, you'll get an
2125error and have to adjust the location)
Antoine Pitrou152efa22010-05-16 18:19:27 +00002126
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002127When you use the context to connect to a server, :const:`CERT_REQUIRED`
Antoine Pitrou152efa22010-05-16 18:19:27 +00002128validates the server certificate: it ensures that the server certificate
2129was signed with one of the CA certificates, and checks the signature for
2130correctness::
2131
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002132 >>> conn = context.wrap_socket(socket.socket(socket.AF_INET),
2133 ... server_hostname="www.python.org")
2134 >>> conn.connect(("www.python.org", 443))
Antoine Pitrou152efa22010-05-16 18:19:27 +00002135
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002136You may then fetch the certificate::
Antoine Pitrou152efa22010-05-16 18:19:27 +00002137
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002138 >>> cert = conn.getpeercert()
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002139
2140Visual inspection shows that the certificate does identify the desired service
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002141(that is, the HTTPS host ``www.python.org``)::
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002142
2143 >>> pprint.pprint(cert)
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002144 {'OCSP': ('http://ocsp.digicert.com',),
2145 'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',),
2146 'crlDistributionPoints': ('http://crl3.digicert.com/sha2-ev-server-g1.crl',
2147 'http://crl4.digicert.com/sha2-ev-server-g1.crl'),
2148 'issuer': ((('countryName', 'US'),),
2149 (('organizationName', 'DigiCert Inc'),),
2150 (('organizationalUnitName', 'www.digicert.com'),),
2151 (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),)),
2152 'notAfter': 'Sep 9 12:00:00 2016 GMT',
2153 'notBefore': 'Sep 5 00:00:00 2014 GMT',
2154 'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26',
2155 'subject': ((('businessCategory', 'Private Organization'),),
2156 (('1.3.6.1.4.1.311.60.2.1.3', 'US'),),
2157 (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),),
2158 (('serialNumber', '3359300'),),
2159 (('streetAddress', '16 Allen Rd'),),
2160 (('postalCode', '03894-4801'),),
2161 (('countryName', 'US'),),
2162 (('stateOrProvinceName', 'NH'),),
2163 (('localityName', 'Wolfeboro,'),),
2164 (('organizationName', 'Python Software Foundation'),),
2165 (('commonName', 'www.python.org'),)),
2166 'subjectAltName': (('DNS', 'www.python.org'),
2167 ('DNS', 'python.org'),
Miss Islington (bot)51b2f6d2018-05-16 07:05:46 -07002168 ('DNS', 'pypi.org'),
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002169 ('DNS', 'docs.python.org'),
Miss Islington (bot)51b2f6d2018-05-16 07:05:46 -07002170 ('DNS', 'testpypi.org'),
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002171 ('DNS', 'bugs.python.org'),
2172 ('DNS', 'wiki.python.org'),
2173 ('DNS', 'hg.python.org'),
2174 ('DNS', 'mail.python.org'),
2175 ('DNS', 'packaging.python.org'),
2176 ('DNS', 'pythonhosted.org'),
2177 ('DNS', 'www.pythonhosted.org'),
2178 ('DNS', 'test.pythonhosted.org'),
2179 ('DNS', 'us.pycon.org'),
2180 ('DNS', 'id.python.org')),
Antoine Pitrou441ae042012-01-06 20:06:15 +01002181 'version': 3}
Antoine Pitrou152efa22010-05-16 18:19:27 +00002182
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002183Now the SSL channel is established and the certificate verified, you can
2184proceed to talk with the server::
Antoine Pitrou152efa22010-05-16 18:19:27 +00002185
Antoine Pitroudab64262010-09-19 13:31:06 +00002186 >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n")
2187 >>> pprint.pprint(conn.recv(1024).split(b"\r\n"))
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002188 [b'HTTP/1.1 200 OK',
2189 b'Date: Sat, 18 Oct 2014 18:27:20 GMT',
2190 b'Server: nginx',
2191 b'Content-Type: text/html; charset=utf-8',
2192 b'X-Frame-Options: SAMEORIGIN',
2193 b'Content-Length: 45679',
2194 b'Accept-Ranges: bytes',
2195 b'Via: 1.1 varnish',
2196 b'Age: 2188',
2197 b'X-Served-By: cache-lcy1134-LCY',
2198 b'X-Cache: HIT',
2199 b'X-Cache-Hits: 11',
2200 b'Vary: Cookie',
2201 b'Strict-Transport-Security: max-age=63072000; includeSubDomains',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002202 b'Connection: close',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002203 b'',
2204 b'']
2205
Antoine Pitrou152efa22010-05-16 18:19:27 +00002206See the discussion of :ref:`ssl-security` below.
2207
2208
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002209Server-side operation
2210^^^^^^^^^^^^^^^^^^^^^
2211
Antoine Pitrou152efa22010-05-16 18:19:27 +00002212For server operation, typically you'll need to have a server certificate, and
2213private key, each in a file. You'll first create a context holding the key
2214and the certificate, so that clients can check your authenticity. Then
2215you'll open a socket, bind it to a port, call :meth:`listen` on it, and start
2216waiting for clients to connect::
Thomas Woutersed03b412007-08-28 21:37:11 +00002217
2218 import socket, ssl
2219
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002220 context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
Antoine Pitrou152efa22010-05-16 18:19:27 +00002221 context.load_cert_chain(certfile="mycertfile", keyfile="mykeyfile")
2222
Thomas Woutersed03b412007-08-28 21:37:11 +00002223 bindsocket = socket.socket()
2224 bindsocket.bind(('myaddr.mydomain.com', 10023))
2225 bindsocket.listen(5)
2226
Antoine Pitrou152efa22010-05-16 18:19:27 +00002227When a client connects, you'll call :meth:`accept` on the socket to get the
2228new socket from the other end, and use the context's :meth:`SSLContext.wrap_socket`
2229method to create a server-side SSL socket for the connection::
Thomas Woutersed03b412007-08-28 21:37:11 +00002230
2231 while True:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002232 newsocket, fromaddr = bindsocket.accept()
2233 connstream = context.wrap_socket(newsocket, server_side=True)
2234 try:
2235 deal_with_client(connstream)
2236 finally:
Antoine Pitroub205d582011-01-02 22:09:27 +00002237 connstream.shutdown(socket.SHUT_RDWR)
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002238 connstream.close()
Thomas Woutersed03b412007-08-28 21:37:11 +00002239
Antoine Pitrou152efa22010-05-16 18:19:27 +00002240Then you'll read data from the ``connstream`` and do something with it till you
Georg Brandl7f01a132009-09-16 15:58:14 +00002241are finished with the client (or the client is finished with you)::
Thomas Woutersed03b412007-08-28 21:37:11 +00002242
2243 def deal_with_client(connstream):
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002244 data = connstream.recv(1024)
2245 # empty data means the client is finished with us
2246 while data:
2247 if not do_something(connstream, data):
2248 # we'll assume do_something returns False
2249 # when we're finished with client
2250 break
2251 data = connstream.recv(1024)
2252 # finished with client
Thomas Woutersed03b412007-08-28 21:37:11 +00002253
Antoine Pitrou152efa22010-05-16 18:19:27 +00002254And go back to listening for new client connections (of course, a real server
2255would probably handle each client connection in a separate thread, or put
Victor Stinner29611452014-10-10 12:52:43 +02002256the sockets in :ref:`non-blocking mode <ssl-nonblocking>` and use an event loop).
Antoine Pitrou152efa22010-05-16 18:19:27 +00002257
2258
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002259.. _ssl-nonblocking:
2260
2261Notes on non-blocking sockets
2262-----------------------------
2263
Antoine Pitroub4bebda2014-04-29 10:03:28 +02002264SSL sockets behave slightly different than regular sockets in
2265non-blocking mode. When working with non-blocking sockets, there are
2266thus several things you need to be aware of:
2267
2268- Most :class:`SSLSocket` methods will raise either
2269 :exc:`SSLWantWriteError` or :exc:`SSLWantReadError` instead of
2270 :exc:`BlockingIOError` if an I/O operation would
2271 block. :exc:`SSLWantReadError` will be raised if a read operation on
2272 the underlying socket is necessary, and :exc:`SSLWantWriteError` for
2273 a write operation on the underlying socket. Note that attempts to
2274 *write* to an SSL socket may require *reading* from the underlying
2275 socket first, and attempts to *read* from the SSL socket may require
2276 a prior *write* to the underlying socket.
2277
2278 .. versionchanged:: 3.5
2279
2280 In earlier Python versions, the :meth:`!SSLSocket.send` method
2281 returned zero instead of raising :exc:`SSLWantWriteError` or
2282 :exc:`SSLWantReadError`.
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002283
2284- Calling :func:`~select.select` tells you that the OS-level socket can be
2285 read from (or written to), but it does not imply that there is sufficient
2286 data at the upper SSL layer. For example, only part of an SSL frame might
2287 have arrived. Therefore, you must be ready to handle :meth:`SSLSocket.recv`
2288 and :meth:`SSLSocket.send` failures, and retry after another call to
2289 :func:`~select.select`.
2290
Antoine Pitrou75e03382014-05-18 00:55:13 +02002291- Conversely, since the SSL layer has its own framing, a SSL socket may
2292 still have data available for reading without :func:`~select.select`
2293 being aware of it. Therefore, you should first call
2294 :meth:`SSLSocket.recv` to drain any potentially available data, and then
2295 only block on a :func:`~select.select` call if still necessary.
2296
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002297 (of course, similar provisions apply when using other primitives such as
Antoine Pitrou75e03382014-05-18 00:55:13 +02002298 :func:`~select.poll`, or those in the :mod:`selectors` module)
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002299
2300- The SSL handshake itself will be non-blocking: the
2301 :meth:`SSLSocket.do_handshake` method has to be retried until it returns
2302 successfully. Here is a synopsis using :func:`~select.select` to wait for
2303 the socket's readiness::
2304
2305 while True:
2306 try:
2307 sock.do_handshake()
2308 break
Antoine Pitrou873bf262011-10-27 23:59:03 +02002309 except ssl.SSLWantReadError:
2310 select.select([sock], [], [])
2311 except ssl.SSLWantWriteError:
2312 select.select([], [sock], [])
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002313
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002314.. seealso::
2315
Victor Stinner29611452014-10-10 12:52:43 +02002316 The :mod:`asyncio` module supports :ref:`non-blocking SSL sockets
2317 <ssl-nonblocking>` and provides a
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002318 higher level API. It polls for events using the :mod:`selectors` module and
2319 handles :exc:`SSLWantWriteError`, :exc:`SSLWantReadError` and
2320 :exc:`BlockingIOError` exceptions. It runs the SSL handshake asynchronously
2321 as well.
2322
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002323
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002324Memory BIO Support
2325------------------
2326
2327.. versionadded:: 3.5
2328
2329Ever since the SSL module was introduced in Python 2.6, the :class:`SSLSocket`
2330class has provided two related but distinct areas of functionality:
2331
2332- SSL protocol handling
2333- Network IO
2334
2335The network IO API is identical to that provided by :class:`socket.socket`,
2336from which :class:`SSLSocket` also inherits. This allows an SSL socket to be
2337used as a drop-in replacement for a regular socket, making it very easy to add
2338SSL support to an existing application.
2339
2340Combining SSL protocol handling and network IO usually works well, but there
2341are some cases where it doesn't. An example is async IO frameworks that want to
2342use a different IO multiplexing model than the "select/poll on a file
2343descriptor" (readiness based) model that is assumed by :class:`socket.socket`
2344and by the internal OpenSSL socket IO routines. This is mostly relevant for
2345platforms like Windows where this model is not efficient. For this purpose, a
2346reduced scope variant of :class:`SSLSocket` called :class:`SSLObject` is
2347provided.
2348
2349.. class:: SSLObject
2350
2351 A reduced-scope variant of :class:`SSLSocket` representing an SSL protocol
Victor Stinner2debf152014-10-10 13:04:08 +02002352 instance that does not contain any network IO methods. This class is
2353 typically used by framework authors that want to implement asynchronous IO
2354 for SSL through memory buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002355
Victor Stinner2debf152014-10-10 13:04:08 +02002356 This class implements an interface on top of a low-level SSL object as
2357 implemented by OpenSSL. This object captures the state of an SSL connection
2358 but does not provide any network IO itself. IO needs to be performed through
2359 separate "BIO" objects which are OpenSSL's IO abstraction layer.
2360
Christian Heimes89c20512018-02-27 11:17:32 +01002361 This class has no public constructor. An :class:`SSLObject` instance
2362 must be created using the :meth:`~SSLContext.wrap_bio` method. This
2363 method will create the :class:`SSLObject` instance and bind it to a
2364 pair of BIOs. The *incoming* BIO is used to pass data from Python to the
2365 SSL protocol instance, while the *outgoing* BIO is used to pass data the
2366 other way around.
Victor Stinner2debf152014-10-10 13:04:08 +02002367
2368 The following methods are available:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002369
Victor Stinner805b2622014-10-10 12:49:08 +02002370 - :attr:`~SSLSocket.context`
2371 - :attr:`~SSLSocket.server_side`
2372 - :attr:`~SSLSocket.server_hostname`
Christian Heimes99a65702016-09-10 23:44:53 +02002373 - :attr:`~SSLSocket.session`
2374 - :attr:`~SSLSocket.session_reused`
Victor Stinner805b2622014-10-10 12:49:08 +02002375 - :meth:`~SSLSocket.read`
2376 - :meth:`~SSLSocket.write`
2377 - :meth:`~SSLSocket.getpeercert`
2378 - :meth:`~SSLSocket.selected_npn_protocol`
2379 - :meth:`~SSLSocket.cipher`
Benjamin Peterson4cb17812015-01-07 11:14:26 -06002380 - :meth:`~SSLSocket.shared_ciphers`
Victor Stinner805b2622014-10-10 12:49:08 +02002381 - :meth:`~SSLSocket.compression`
2382 - :meth:`~SSLSocket.pending`
2383 - :meth:`~SSLSocket.do_handshake`
2384 - :meth:`~SSLSocket.unwrap`
2385 - :meth:`~SSLSocket.get_channel_binding`
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002386
Victor Stinner2debf152014-10-10 13:04:08 +02002387 When compared to :class:`SSLSocket`, this object lacks the following
2388 features:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002389
Benjamin Petersonfdfca5f2017-06-11 00:24:38 -07002390 - Any form of network IO; ``recv()`` and ``send()`` read and write only to
2391 the underlying :class:`MemoryBIO` buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002392
Victor Stinner2debf152014-10-10 13:04:08 +02002393 - There is no *do_handshake_on_connect* machinery. You must always manually
2394 call :meth:`~SSLSocket.do_handshake` to start the handshake.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002395
Victor Stinner2debf152014-10-10 13:04:08 +02002396 - There is no handling of *suppress_ragged_eofs*. All end-of-file conditions
2397 that are in violation of the protocol are reported via the
2398 :exc:`SSLEOFError` exception.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002399
Victor Stinner2debf152014-10-10 13:04:08 +02002400 - The method :meth:`~SSLSocket.unwrap` call does not return anything,
2401 unlike for an SSL socket where it returns the underlying socket.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002402
Victor Stinner2debf152014-10-10 13:04:08 +02002403 - The *server_name_callback* callback passed to
2404 :meth:`SSLContext.set_servername_callback` will get an :class:`SSLObject`
2405 instance instead of a :class:`SSLSocket` instance as its first parameter.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002406
Victor Stinner2debf152014-10-10 13:04:08 +02002407 Some notes related to the use of :class:`SSLObject`:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002408
Victor Stinner2debf152014-10-10 13:04:08 +02002409 - All IO on an :class:`SSLObject` is :ref:`non-blocking <ssl-nonblocking>`.
2410 This means that for example :meth:`~SSLSocket.read` will raise an
2411 :exc:`SSLWantReadError` if it needs more data than the incoming BIO has
2412 available.
2413
2414 - There is no module-level ``wrap_bio()`` call like there is for
2415 :meth:`~SSLContext.wrap_socket`. An :class:`SSLObject` is always created
2416 via an :class:`SSLContext`.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002417
Christian Heimes89c20512018-02-27 11:17:32 +01002418 .. versionchanged:: 3.7
2419 :class:`SSLObject` instances must to created with
2420 :meth:`~SSLContext.wrap_bio`. In earlier versions, it was possible to
2421 create instances directly. This was never documented or officially
2422 supported.
2423
Victor Stinner805b2622014-10-10 12:49:08 +02002424An SSLObject communicates with the outside world using memory buffers. The
2425class :class:`MemoryBIO` provides a memory buffer that can be used for this
2426purpose. It wraps an OpenSSL memory BIO (Basic IO) object:
2427
2428.. class:: MemoryBIO
2429
2430 A memory buffer that can be used to pass data between Python and an SSL
2431 protocol instance.
2432
2433 .. attribute:: MemoryBIO.pending
2434
2435 Return the number of bytes currently in the memory buffer.
2436
2437 .. attribute:: MemoryBIO.eof
2438
2439 A boolean indicating whether the memory BIO is current at the end-of-file
2440 position.
2441
2442 .. method:: MemoryBIO.read(n=-1)
2443
2444 Read up to *n* bytes from the memory buffer. If *n* is not specified or
2445 negative, all bytes are returned.
2446
2447 .. method:: MemoryBIO.write(buf)
2448
2449 Write the bytes from *buf* to the memory BIO. The *buf* argument must be an
2450 object supporting the buffer protocol.
2451
2452 The return value is the number of bytes written, which is always equal to
2453 the length of *buf*.
2454
2455 .. method:: MemoryBIO.write_eof()
2456
2457 Write an EOF marker to the memory BIO. After this method has been called, it
2458 is illegal to call :meth:`~MemoryBIO.write`. The attribute :attr:`eof` will
2459 become true after all data currently in the buffer has been read.
2460
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002461
Christian Heimes99a65702016-09-10 23:44:53 +02002462SSL session
2463-----------
2464
2465.. versionadded:: 3.6
2466
2467.. class:: SSLSession
2468
2469 Session object used by :attr:`~SSLSocket.session`.
2470
2471 .. attribute:: id
2472 .. attribute:: time
2473 .. attribute:: timeout
2474 .. attribute:: ticket_lifetime_hint
2475 .. attribute:: has_ticket
2476
2477
Antoine Pitrou152efa22010-05-16 18:19:27 +00002478.. _ssl-security:
2479
2480Security considerations
2481-----------------------
2482
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002483Best defaults
2484^^^^^^^^^^^^^
Antoine Pitrou152efa22010-05-16 18:19:27 +00002485
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002486For **client use**, if you don't have any special requirements for your
2487security policy, it is highly recommended that you use the
2488:func:`create_default_context` function to create your SSL context.
2489It will load the system's trusted CA certificates, enable certificate
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002490validation and hostname checking, and try to choose reasonably secure
2491protocol and cipher settings.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002492
2493For example, here is how you would use the :class:`smtplib.SMTP` class to
2494create a trusted, secure connection to a SMTP server::
2495
2496 >>> import ssl, smtplib
2497 >>> smtp = smtplib.SMTP("mail.python.org", port=587)
2498 >>> context = ssl.create_default_context()
2499 >>> smtp.starttls(context=context)
2500 (220, b'2.0.0 Ready to start TLS')
2501
2502If a client certificate is needed for the connection, it can be added with
2503:meth:`SSLContext.load_cert_chain`.
2504
2505By contrast, if you create the SSL context by calling the :class:`SSLContext`
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002506constructor yourself, it will not have certificate validation nor hostname
2507checking enabled by default. If you do so, please read the paragraphs below
2508to achieve a good security level.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002509
2510Manual settings
2511^^^^^^^^^^^^^^^
2512
2513Verifying certificates
2514''''''''''''''''''''''
2515
Donald Stufft8b852f12014-05-20 12:58:38 -04002516When calling the :class:`SSLContext` constructor directly,
Antoine Pitrou152efa22010-05-16 18:19:27 +00002517:const:`CERT_NONE` is the default. Since it does not authenticate the other
2518peer, it can be insecure, especially in client mode where most of time you
2519would like to ensure the authenticity of the server you're talking to.
2520Therefore, when in client mode, it is highly recommended to use
2521:const:`CERT_REQUIRED`. However, it is in itself not sufficient; you also
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002522have to check that the server certificate, which can be obtained by calling
2523:meth:`SSLSocket.getpeercert`, matches the desired service. For many
2524protocols and applications, the service can be identified by the hostname;
Christian Heimes1aa9a752013-12-02 02:41:19 +01002525in this case, the :func:`match_hostname` function can be used. This common
2526check is automatically performed when :attr:`SSLContext.check_hostname` is
2527enabled.
Antoine Pitrou152efa22010-05-16 18:19:27 +00002528
Christian Heimes61d478c2018-01-27 15:51:38 +01002529.. versionchanged:: 3.7
2530 Hostname matchings is now performed by OpenSSL. Python no longer uses
2531 :func:`match_hostname`.
2532
Antoine Pitrou152efa22010-05-16 18:19:27 +00002533In server mode, if you want to authenticate your clients using the SSL layer
2534(rather than using a higher-level authentication mechanism), you'll also have
2535to specify :const:`CERT_REQUIRED` and similarly check the client certificate.
2536
2537 .. note::
2538
2539 In client mode, :const:`CERT_OPTIONAL` and :const:`CERT_REQUIRED` are
2540 equivalent unless anonymous ciphers are enabled (they are disabled
2541 by default).
Thomas Woutersed03b412007-08-28 21:37:11 +00002542
Antoine Pitroub5218772010-05-21 09:56:06 +00002543Protocol versions
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002544'''''''''''''''''
Antoine Pitroub5218772010-05-21 09:56:06 +00002545
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002546SSL versions 2 and 3 are considered insecure and are therefore dangerous to
2547use. If you want maximum compatibility between clients and servers, it is
Christian Heimes5fe668c2016-09-12 00:01:11 +02002548recommended to use :const:`PROTOCOL_TLS_CLIENT` or
2549:const:`PROTOCOL_TLS_SERVER` as the protocol version. SSLv2 and SSLv3 are
2550disabled by default.
Antoine Pitroub5218772010-05-21 09:56:06 +00002551
Marco Buttu7b2491a2017-04-13 16:17:59 +02002552::
2553
Christian Heimesc4d2e502016-09-12 01:14:35 +02002554 >>> client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
2555 >>> client_context.options |= ssl.OP_NO_TLSv1
2556 >>> client_context.options |= ssl.OP_NO_TLSv1_1
Christian Heimes5fe668c2016-09-12 00:01:11 +02002557
Antoine Pitroub5218772010-05-21 09:56:06 +00002558
Christian Heimes598894f2016-09-05 23:19:05 +02002559The SSL context created above will only allow TLSv1.2 and later (if
Christian Heimes5fe668c2016-09-12 00:01:11 +02002560supported by your system) connections to a server. :const:`PROTOCOL_TLS_CLIENT`
2561implies certificate validation and hostname checks by default. You have to
2562load certificates into the context.
2563
Antoine Pitroub5218772010-05-21 09:56:06 +00002564
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002565Cipher selection
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002566''''''''''''''''
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002567
2568If you have advanced security requirements, fine-tuning of the ciphers
2569enabled when negotiating a SSL session is possible through the
2570:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
2571ssl module disables certain weak ciphers by default, but you may want
Donald Stufft79ccaa22014-03-21 21:33:34 -04002572to further restrict the cipher choice. Be sure to read OpenSSL's documentation
Sanyam Khurana338cd832018-01-20 05:55:37 +05302573about the `cipher list format <https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-LIST-FORMAT>`_.
Christian Heimes5fe668c2016-09-12 00:01:11 +02002574If you want to check which ciphers are enabled by a given cipher list, use
2575:meth:`SSLContext.get_ciphers` or the ``openssl ciphers`` command on your
2576system.
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002577
Antoine Pitrou9eefe912013-11-17 15:35:33 +01002578Multi-processing
2579^^^^^^^^^^^^^^^^
2580
2581If using this module as part of a multi-processed application (using,
2582for example the :mod:`multiprocessing` or :mod:`concurrent.futures` modules),
2583be aware that OpenSSL's internal random number generator does not properly
2584handle forked processes. Applications must change the PRNG state of the
2585parent process if they use any SSL feature with :func:`os.fork`. Any
2586successful call of :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or
2587:func:`~ssl.RAND_pseudo_bytes` is sufficient.
2588
Georg Brandl48310cd2009-01-03 21:18:54 +00002589
Miss Islington (bot)01d9c232018-02-24 14:04:27 -08002590.. ssl-libressl:
2591
2592LibreSSL support
2593----------------
2594
2595LibreSSL is a fork of OpenSSL 1.0.1. The ssl module has limited support for
2596LibreSSL. Some features are not available when the ssl module is compiled
2597with LibreSSL.
2598
2599* LibreSSL >= 2.6.1 no longer supports NPN. The methods
2600 :meth:`SSLContext.set_npn_protocols` and
2601 :meth:`SSLSocket.selected_npn_protocol` are not available.
2602* :meth:`SSLContext.set_default_verify_paths` ignores the env vars
2603 :envvar:`SSL_CERT_FILE` and :envvar:`SSL_CERT_PATH` although
2604 :func:`get_default_verify_paths` still reports them.
2605
2606
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002607.. seealso::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002608
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002609 Class :class:`socket.socket`
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002610 Documentation of underlying :mod:`socket` class
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002611
Georg Brandl5d941342016-02-26 19:37:12 +01002612 `SSL/TLS Strong Encryption: An Introduction <https://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_
Miss Islington (bot)17b6c192018-03-10 17:21:27 -08002613 Intro from the Apache HTTP Server documentation
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002614
Georg Brandl5d941342016-02-26 19:37:12 +01002615 `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 +00002616 Steve Kent
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002617
Sanyam Khurana338cd832018-01-20 05:55:37 +05302618 `RFC 4086: Randomness Requirements for Security <https://datatracker.ietf.org/doc/rfc4086/>`_
Chandan Kumar63c2c8a2017-06-09 15:13:58 +05302619 Donald E., Jeffrey I. Schiller
Thomas Wouters89d996e2007-09-08 17:39:28 +00002620
Sanyam Khurana338cd832018-01-20 05:55:37 +05302621 `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 +05302622 D. Cooper
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002623
Georg Brandl5d941342016-02-26 19:37:12 +01002624 `RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 <https://tools.ietf.org/html/rfc5246>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002625 T. Dierks et. al.
2626
Georg Brandl5d941342016-02-26 19:37:12 +01002627 `RFC 6066: Transport Layer Security (TLS) Extensions <https://tools.ietf.org/html/rfc6066>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002628 D. Eastlake
2629
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002630 `IANA TLS: Transport Layer Security (TLS) Parameters <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002631 IANA
Christian Heimesad0ffa02017-09-06 16:19:56 -07002632
2633 `RFC 7525: Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) <https://tools.ietf.org/html/rfc7525>`_
2634 IETF
2635
2636 `Mozilla's Server Side TLS recommendations <https://wiki.mozilla.org/Security/Server_Side_TLS>`_
2637 Mozilla