blob: 4c44ffa23ac8d6d72cf32abf8c320f318bdeae9d [file] [log] [blame]
Antoine Pitroue1bc8982011-01-02 22:12:22 +00001:mod:`ssl` --- TLS/SSL wrapper for socket objects
2=================================================
Thomas Woutersed03b412007-08-28 21:37:11 +00003
4.. module:: ssl
Antoine Pitroue1bc8982011-01-02 22:12:22 +00005 :synopsis: TLS/SSL wrapper for socket objects
Thomas Wouters47b49bf2007-08-30 22:15:33 +00006
7.. moduleauthor:: Bill Janssen <bill.janssen@gmail.com>
Thomas Wouters47b49bf2007-08-30 22:15:33 +00008.. sectionauthor:: Bill Janssen <bill.janssen@gmail.com>
9
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040010**Source code:** :source:`Lib/ssl.py`
Thomas Woutersed03b412007-08-28 21:37:11 +000011
Thomas Wouters1b7f8912007-09-19 03:06:30 +000012.. index:: single: OpenSSL; (use in module ssl)
13
14.. index:: TLS, SSL, Transport Layer Security, Secure Sockets Layer
15
Raymond Hettinger469271d2011-01-27 20:38:46 +000016--------------
17
Georg Brandl7f01a132009-09-16 15:58:14 +000018This module provides access to Transport Layer Security (often known as "Secure
19Sockets Layer") encryption and peer authentication facilities for network
20sockets, both client-side and server-side. This module uses the OpenSSL
21library. It is available on all modern Unix systems, Windows, Mac OS X, and
22probably additional platforms, as long as OpenSSL is installed on that platform.
Thomas Woutersed03b412007-08-28 21:37:11 +000023
24.. note::
25
Georg Brandl7f01a132009-09-16 15:58:14 +000026 Some behavior may be platform dependent, since calls are made to the
27 operating system socket APIs. The installed version of OpenSSL may also
Antoine Pitrou2463e5f2013-03-28 22:24:43 +010028 cause variations in behavior. For example, TLSv1.1 and TLSv1.2 come with
29 openssl version 1.0.1.
Thomas Woutersed03b412007-08-28 21:37:11 +000030
Christian Heimes3046fe42013-10-29 21:08:56 +010031.. warning::
Antoine Pitrou9eefe912013-11-17 15:35:33 +010032 Don't use this module without reading the :ref:`ssl-security`. Doing so
33 may lead to a false sense of security, as the default settings of the
34 ssl module are not necessarily appropriate for your application.
Christian Heimes3046fe42013-10-29 21:08:56 +010035
Christian Heimes3046fe42013-10-29 21:08:56 +010036
Georg Brandl7f01a132009-09-16 15:58:14 +000037This section documents the objects and functions in the ``ssl`` module; for more
38general information about TLS, SSL, and certificates, the reader is referred to
39the documents in the "See Also" section at the bottom.
Thomas Woutersed03b412007-08-28 21:37:11 +000040
Georg Brandl7f01a132009-09-16 15:58:14 +000041This module provides a class, :class:`ssl.SSLSocket`, which is derived from the
42:class:`socket.socket` type, and provides a socket-like wrapper that also
43encrypts and decrypts the data going over the socket with SSL. It supports
Antoine Pitroudab64262010-09-19 13:31:06 +000044additional methods such as :meth:`getpeercert`, which retrieves the
45certificate of the other side of the connection, and :meth:`cipher`,which
46retrieves the cipher being used for the secure connection.
Thomas Woutersed03b412007-08-28 21:37:11 +000047
Antoine Pitrou152efa22010-05-16 18:19:27 +000048For more sophisticated applications, the :class:`ssl.SSLContext` class
49helps manage settings and certificates, which can then be inherited
50by SSL sockets created through the :meth:`SSLContext.wrap_socket` method.
51
Christian Heimes01113fa2016-09-05 23:23:24 +020052.. versionchanged:: 3.6
53
54 OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported.
55 In the future the ssl module will require at least OpenSSL 1.0.2 or
56 1.1.0.
57
Antoine Pitrou152efa22010-05-16 18:19:27 +000058
Thomas Wouters1b7f8912007-09-19 03:06:30 +000059Functions, Constants, and Exceptions
60------------------------------------
61
62.. exception:: SSLError
63
Antoine Pitrou59fdd672010-10-08 10:37:08 +000064 Raised to signal an error from the underlying SSL implementation
65 (currently provided by the OpenSSL library). This signifies some
66 problem in the higher-level encryption and authentication layer that's
67 superimposed on the underlying network connection. This error
Antoine Pitrou5574c302011-10-12 17:53:43 +020068 is a subtype of :exc:`OSError`. The error code and message of
69 :exc:`SSLError` instances are provided by the OpenSSL library.
70
71 .. versionchanged:: 3.3
72 :exc:`SSLError` used to be a subtype of :exc:`socket.error`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +000073
Antoine Pitrou3b36fb12012-06-22 21:11:52 +020074 .. attribute:: library
75
76 A string mnemonic designating the OpenSSL submodule in which the error
77 occurred, such as ``SSL``, ``PEM`` or ``X509``. The range of possible
78 values depends on the OpenSSL version.
79
80 .. versionadded:: 3.3
81
82 .. attribute:: reason
83
84 A string mnemonic designating the reason this error occurred, for
85 example ``CERTIFICATE_VERIFY_FAILED``. The range of possible
86 values depends on the OpenSSL version.
87
88 .. versionadded:: 3.3
89
Antoine Pitrou41032a62011-10-27 23:56:55 +020090.. exception:: SSLZeroReturnError
91
92 A subclass of :exc:`SSLError` raised when trying to read or write and
93 the SSL connection has been closed cleanly. Note that this doesn't
94 mean that the underlying transport (read TCP) has been closed.
95
96 .. versionadded:: 3.3
97
98.. exception:: SSLWantReadError
99
100 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
101 <ssl-nonblocking>` when trying to read or write data, but more data needs
102 to be received on the underlying TCP transport before the request can be
103 fulfilled.
104
105 .. versionadded:: 3.3
106
107.. exception:: SSLWantWriteError
108
109 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
110 <ssl-nonblocking>` when trying to read or write data, but more data needs
111 to be sent on the underlying TCP transport before the request can be
112 fulfilled.
113
114 .. versionadded:: 3.3
115
116.. exception:: SSLSyscallError
117
118 A subclass of :exc:`SSLError` raised when a system error was encountered
119 while trying to fulfill an operation on a SSL socket. Unfortunately,
120 there is no easy way to inspect the original errno number.
121
122 .. versionadded:: 3.3
123
124.. exception:: SSLEOFError
125
126 A subclass of :exc:`SSLError` raised when the SSL connection has been
Antoine Pitrouf3dc2d72011-10-28 00:01:03 +0200127 terminated abruptly. Generally, you shouldn't try to reuse the underlying
Antoine Pitrou41032a62011-10-27 23:56:55 +0200128 transport when this error is encountered.
129
130 .. versionadded:: 3.3
131
Christian Heimesb3ad0e52017-09-08 12:00:19 -0700132.. exception:: SSLCertVerificationError
133
134 A subclass of :exc:`SSLError` raised when certificate validation has
135 failed.
136
137 .. versionadded:: 3.7
138
139 .. attribute:: verify_code
140
141 A numeric error number that denotes the verification error.
142
143 .. attribute:: verify_message
144
145 A human readable string of the verification error.
146
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000147.. exception:: CertificateError
148
149 Raised to signal an error with a certificate (such as mismatching
150 hostname). Certificate errors detected by OpenSSL, though, raise
Christian Heimesb3ad0e52017-09-08 12:00:19 -0700151 an :exc:`SSLCertVerificationError`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000152
153
154Socket creation
155^^^^^^^^^^^^^^^
156
157The following function allows for standalone socket creation. Starting from
158Python 3.2, it can be more flexible to use :meth:`SSLContext.wrap_socket`
159instead.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000160
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000161.. function:: wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, ssl_version={see docs}, ca_certs=None, do_handshake_on_connect=True, suppress_ragged_eofs=True, ciphers=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000162
Georg Brandl7f01a132009-09-16 15:58:14 +0000163 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance
164 of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps
Antoine Pitrou3e86ba42013-12-28 17:26:33 +0100165 the underlying socket in an SSL context. ``sock`` must be a
166 :data:`~socket.SOCK_STREAM` socket; other socket types are unsupported.
167
168 For client-side sockets, the context construction is lazy; if the
169 underlying socket isn't connected yet, the context construction will be
170 performed after :meth:`connect` is called on the socket. For
171 server-side sockets, if the socket has no remote peer, it is assumed
172 to be a listening socket, and the server-side SSL wrapping is
173 automatically performed on client connections accepted via the
174 :meth:`accept` method. :func:`wrap_socket` may raise :exc:`SSLError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000175
Georg Brandl7f01a132009-09-16 15:58:14 +0000176 The ``keyfile`` and ``certfile`` parameters specify optional files which
177 contain a certificate to be used to identify the local side of the
178 connection. See the discussion of :ref:`ssl-certificates` for more
179 information on how the certificate is stored in the ``certfile``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000180
Georg Brandl7f01a132009-09-16 15:58:14 +0000181 The parameter ``server_side`` is a boolean which identifies whether
182 server-side or client-side behavior is desired from this socket.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000183
Georg Brandl7f01a132009-09-16 15:58:14 +0000184 The parameter ``cert_reqs`` specifies whether a certificate is required from
185 the other side of the connection, and whether it will be validated if
186 provided. It must be one of the three values :const:`CERT_NONE`
187 (certificates ignored), :const:`CERT_OPTIONAL` (not required, but validated
188 if provided), or :const:`CERT_REQUIRED` (required and validated). If the
189 value of this parameter is not :const:`CERT_NONE`, then the ``ca_certs``
190 parameter must point to a file of CA certificates.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000191
Georg Brandl7f01a132009-09-16 15:58:14 +0000192 The ``ca_certs`` file contains a set of concatenated "certification
193 authority" certificates, which are used to validate certificates passed from
194 the other end of the connection. See the discussion of
195 :ref:`ssl-certificates` for more information about how to arrange the
196 certificates in this file.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000197
Georg Brandl7f01a132009-09-16 15:58:14 +0000198 The parameter ``ssl_version`` specifies which version of the SSL protocol to
199 use. Typically, the server chooses a particular protocol version, and the
200 client must adapt to the server's choice. Most of the versions are not
Antoine Pitrou84a2edc2012-01-09 21:35:11 +0100201 interoperable with the other versions. If not specified, the default is
Christian Heimes598894f2016-09-05 23:19:05 +0200202 :data:`PROTOCOL_TLS`; it provides the most compatibility with other
Georg Brandl7f01a132009-09-16 15:58:14 +0000203 versions.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000204
Georg Brandl7f01a132009-09-16 15:58:14 +0000205 Here's a table showing which versions in a client (down the side) can connect
206 to which versions in a server (along the top):
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000207
208 .. table::
209
Christian Heimes17352ff2016-09-13 12:09:55 +0200210 ======================== ============ ============ ============= ========= =========== ===========
Christian Heimescb5b68a2017-09-07 18:07:00 -0700211 *client* / **server** **SSLv2** **SSLv3** **TLS** [3]_ **TLSv1** **TLSv1.1** **TLSv1.2**
Christian Heimes17352ff2016-09-13 12:09:55 +0200212 ------------------------ ------------ ------------ ------------- --------- ----------- -----------
213 *SSLv2* yes no no [1]_ no no no
214 *SSLv3* no yes no [2]_ no no no
Christian Heimescb5b68a2017-09-07 18:07:00 -0700215 *TLS* (*SSLv23*) [3]_ no [1]_ no [2]_ yes yes yes yes
Christian Heimes17352ff2016-09-13 12:09:55 +0200216 *TLSv1* no no yes yes no no
217 *TLSv1.1* no no yes no yes no
218 *TLSv1.2* no no yes no no yes
219 ======================== ============ ============ ============= ========= =========== ===========
220
221 .. rubric:: Footnotes
222 .. [1] :class:`SSLContext` disables SSLv2 with :data:`OP_NO_SSLv2` by default.
Christian Heimesed9c0702016-09-13 13:27:26 +0200223 .. [2] :class:`SSLContext` disables SSLv3 with :data:`OP_NO_SSLv3` by default.
Christian Heimescb5b68a2017-09-07 18:07:00 -0700224 .. [3] TLS 1.3 protocol will be available with :data:`PROTOCOL_TLS` in
225 OpenSSL >= 1.1.1. There is no dedicated PROTOCOL constant for just
226 TLS 1.3.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000227
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000228 .. note::
229
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000230 Which connections succeed will vary depending on the version of
Antoine Pitrou2b207ba2014-12-03 20:00:56 +0100231 OpenSSL. For example, before OpenSSL 1.0.0, an SSLv23 client
232 would always attempt SSLv2 connections.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000233
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000234 The *ciphers* parameter sets the available ciphers for this SSL object.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000235 It should be a string in the `OpenSSL cipher list format
Felipe19e4d932017-09-20 20:20:18 +0200236 <https://wiki.openssl.org/index.php/Manual:Ciphers(1)#CIPHER_LIST_FORMAT>`_.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000237
Bill Janssen48dc27c2007-12-05 03:38:10 +0000238 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
239 handshake automatically after doing a :meth:`socket.connect`, or whether the
Georg Brandl7f01a132009-09-16 15:58:14 +0000240 application program will call it explicitly, by invoking the
241 :meth:`SSLSocket.do_handshake` method. Calling
242 :meth:`SSLSocket.do_handshake` explicitly gives the program control over the
243 blocking behavior of the socket I/O involved in the handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000244
Georg Brandl7f01a132009-09-16 15:58:14 +0000245 The parameter ``suppress_ragged_eofs`` specifies how the
Antoine Pitroudab64262010-09-19 13:31:06 +0000246 :meth:`SSLSocket.recv` method should signal unexpected EOF from the other end
Georg Brandl7f01a132009-09-16 15:58:14 +0000247 of the connection. If specified as :const:`True` (the default), it returns a
Antoine Pitroudab64262010-09-19 13:31:06 +0000248 normal EOF (an empty bytes object) in response to unexpected EOF errors
249 raised from the underlying socket; if :const:`False`, it will raise the
250 exceptions back to the caller.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000251
Ezio Melotti4d5195b2010-04-20 10:57:44 +0000252 .. versionchanged:: 3.2
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000253 New optional argument *ciphers*.
254
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100255Context creation
256^^^^^^^^^^^^^^^^
257
258A convenience function helps create :class:`SSLContext` objects for common
259purposes.
260
261.. function:: create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, capath=None, cadata=None)
262
263 Return a new :class:`SSLContext` object with default settings for
264 the given *purpose*. The settings are chosen by the :mod:`ssl` module,
265 and usually represent a higher security level than when calling the
266 :class:`SSLContext` constructor directly.
267
268 *cafile*, *capath*, *cadata* represent optional CA certificates to
269 trust for certificate verification, as in
270 :meth:`SSLContext.load_verify_locations`. If all three are
271 :const:`None`, this function can choose to trust the system's default
272 CA certificates instead.
273
Christian Heimes598894f2016-09-05 23:19:05 +0200274 The settings are: :data:`PROTOCOL_TLS`, :data:`OP_NO_SSLv2`, and
Benjamin Peterson59c4eb72015-03-16 12:43:38 -0500275 :data:`OP_NO_SSLv3` with high encryption cipher suites without RC4 and
Donald Stufft6a2ba942014-03-23 19:05:28 -0400276 without unauthenticated cipher suites. Passing :data:`~Purpose.SERVER_AUTH`
277 as *purpose* sets :data:`~SSLContext.verify_mode` to :data:`CERT_REQUIRED`
278 and either loads CA certificates (when at least one of *cafile*, *capath* or
279 *cadata* is given) or uses :meth:`SSLContext.load_default_certs` to load
280 default CA certificates.
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100281
282 .. note::
283 The protocol, options, cipher and other settings may change to more
284 restrictive values anytime without prior deprecation. The values
285 represent a fair balance between compatibility and security.
286
287 If your application needs specific settings, you should create a
288 :class:`SSLContext` and apply the settings yourself.
289
Donald Stufft6a2ba942014-03-23 19:05:28 -0400290 .. note::
291 If you find that when certain older clients or servers attempt to connect
Benjamin Peterson6f362fa2015-04-08 11:11:00 -0400292 with a :class:`SSLContext` created by this function that they get an error
293 stating "Protocol or cipher suite mismatch", it may be that they only
294 support SSL3.0 which this function excludes using the
295 :data:`OP_NO_SSLv3`. SSL3.0 is widely considered to be `completely broken
296 <https://en.wikipedia.org/wiki/POODLE>`_. If you still wish to continue to
297 use this function but still allow SSL 3.0 connections you can re-enable
298 them using::
Donald Stufft6a2ba942014-03-23 19:05:28 -0400299
300 ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
301 ctx.options &= ~ssl.OP_NO_SSLv3
302
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100303 .. versionadded:: 3.4
304
Benjamin Peterson59c4eb72015-03-16 12:43:38 -0500305 .. versionchanged:: 3.4.4
306
307 RC4 was dropped from the default cipher string.
308
Christian Heimesac041c02016-09-06 20:07:58 +0200309 .. versionchanged:: 3.6
Christian Heimes03d13c02016-09-06 20:06:47 +0200310
311 ChaCha20/Poly1305 was added to the default cipher string.
312
313 3DES was dropped from the default cipher string.
314
Christian Heimescb5b68a2017-09-07 18:07:00 -0700315 .. versionchanged:: 3.7
316
317 TLS 1.3 cipher suites TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384,
318 and TLS_CHACHA20_POLY1305_SHA256 were added to the default cipher string.
319
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100320
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000321Random generation
322^^^^^^^^^^^^^^^^^
323
Victor Stinner99c8b162011-05-24 12:05:19 +0200324.. function:: RAND_bytes(num)
325
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400326 Return *num* cryptographically strong pseudo-random bytes. Raises an
Victor Stinnera6752062011-05-25 11:27:40 +0200327 :class:`SSLError` if the PRNG has not been seeded with enough data or if the
328 operation is not supported by the current RAND method. :func:`RAND_status`
329 can be used to check the status of the PRNG and :func:`RAND_add` can be used
330 to seed the PRNG.
Victor Stinner99c8b162011-05-24 12:05:19 +0200331
Berker Peksageb7a97c2015-04-10 16:19:13 +0300332 For almost all applications :func:`os.urandom` is preferable.
333
Victor Stinner19fb53c2011-05-24 21:32:40 +0200334 Read the Wikipedia article, `Cryptographically secure pseudorandom number
Victor Stinnera6752062011-05-25 11:27:40 +0200335 generator (CSPRNG)
Georg Brandl5d941342016-02-26 19:37:12 +0100336 <https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator>`_,
Victor Stinner19fb53c2011-05-24 21:32:40 +0200337 to get the requirements of a cryptographically generator.
338
Victor Stinner99c8b162011-05-24 12:05:19 +0200339 .. versionadded:: 3.3
340
341.. function:: RAND_pseudo_bytes(num)
342
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400343 Return (bytes, is_cryptographic): bytes are *num* pseudo-random bytes,
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200344 is_cryptographic is ``True`` if the bytes generated are cryptographically
Victor Stinnera6752062011-05-25 11:27:40 +0200345 strong. Raises an :class:`SSLError` if the operation is not supported by the
346 current RAND method.
Victor Stinner99c8b162011-05-24 12:05:19 +0200347
Victor Stinner19fb53c2011-05-24 21:32:40 +0200348 Generated pseudo-random byte sequences will be unique if they are of
349 sufficient length, but are not necessarily unpredictable. They can be used
350 for non-cryptographic purposes and for certain purposes in cryptographic
351 protocols, but usually not for key generation etc.
352
Berker Peksageb7a97c2015-04-10 16:19:13 +0300353 For almost all applications :func:`os.urandom` is preferable.
354
Victor Stinner99c8b162011-05-24 12:05:19 +0200355 .. versionadded:: 3.3
356
Christian Heimes01113fa2016-09-05 23:23:24 +0200357 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200358
359 OpenSSL has deprecated :func:`ssl.RAND_pseudo_bytes`, use
360 :func:`ssl.RAND_bytes` instead.
361
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000362.. function:: RAND_status()
363
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400364 Return ``True`` if the SSL pseudo-random number generator has been seeded
365 with 'enough' randomness, and ``False`` otherwise. You can use
366 :func:`ssl.RAND_egd` and :func:`ssl.RAND_add` to increase the randomness of
367 the pseudo-random number generator.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000368
369.. function:: RAND_egd(path)
370
Victor Stinner99c8b162011-05-24 12:05:19 +0200371 If you are running an entropy-gathering daemon (EGD) somewhere, and *path*
Georg Brandl7f01a132009-09-16 15:58:14 +0000372 is the pathname of a socket connection open to it, this will read 256 bytes
373 of randomness from the socket, and add it to the SSL pseudo-random number
374 generator to increase the security of generated secret keys. This is
375 typically only necessary on systems without better sources of randomness.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000376
Georg Brandl7f01a132009-09-16 15:58:14 +0000377 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources
378 of entropy-gathering daemons.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000379
Christian Heimes598894f2016-09-05 23:19:05 +0200380 Availability: not available with LibreSSL and OpenSSL > 1.1.0
Victor Stinner3ce67a92015-01-06 13:53:09 +0100381
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000382.. function:: RAND_add(bytes, entropy)
383
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400384 Mix the given *bytes* into the SSL pseudo-random number generator. The
Victor Stinner99c8b162011-05-24 12:05:19 +0200385 parameter *entropy* (a float) is a lower bound on the entropy contained in
Georg Brandl7f01a132009-09-16 15:58:14 +0000386 string (so you can always use :const:`0.0`). See :rfc:`1750` for more
387 information on sources of entropy.
Thomas Woutersed03b412007-08-28 21:37:11 +0000388
Georg Brandl8c16cb92016-02-25 20:17:45 +0100389 .. versionchanged:: 3.5
Serhiy Storchaka8490f5a2015-03-20 09:00:36 +0200390 Writable :term:`bytes-like object` is now accepted.
391
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000392Certificate handling
393^^^^^^^^^^^^^^^^^^^^
394
Marco Buttu7b2491a2017-04-13 16:17:59 +0200395.. testsetup::
396
397 import ssl
398
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000399.. function:: match_hostname(cert, hostname)
400
401 Verify that *cert* (in decoded format as returned by
402 :meth:`SSLSocket.getpeercert`) matches the given *hostname*. The rules
403 applied are those for checking the identity of HTTPS servers as outlined
Chandan Kumar63c2c8a2017-06-09 15:13:58 +0530404 in :rfc:`2818`, :rfc:`5280` and :rfc:`6125`. In addition to HTTPS, this
405 function should be suitable for checking the identity of servers in
406 various SSL-based protocols such as FTPS, IMAPS, POPS and others.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000407
408 :exc:`CertificateError` is raised on failure. On success, the function
409 returns nothing::
410
411 >>> cert = {'subject': ((('commonName', 'example.com'),),)}
412 >>> ssl.match_hostname(cert, "example.com")
413 >>> ssl.match_hostname(cert, "example.org")
414 Traceback (most recent call last):
415 File "<stdin>", line 1, in <module>
416 File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
417 ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
418
419 .. versionadded:: 3.2
420
Georg Brandl72c98d32013-10-27 07:16:53 +0100421 .. versionchanged:: 3.3.3
422 The function now follows :rfc:`6125`, section 6.4.3 and does neither
423 match multiple wildcards (e.g. ``*.*.com`` or ``*a*.example.org``) nor
424 a wildcard inside an internationalized domain names (IDN) fragment.
425 IDN A-labels such as ``www*.xn--pthon-kva.org`` are still supported,
426 but ``x*.python.org`` no longer matches ``xn--tda.python.org``.
427
Antoine Pitrouc481bfb2015-02-15 18:12:20 +0100428 .. versionchanged:: 3.5
429 Matching of IP addresses, when present in the subjectAltName field
430 of the certificate, is now supported.
431
Mandeep Singhede2ac92017-11-27 04:01:27 +0530432 .. versionchanged:: 3.7
433 Allow wildcard when it is the leftmost and the only character
434 in that segment.
435
Antoine Pitrouc695c952014-04-28 20:57:36 +0200436.. function:: cert_time_to_seconds(cert_time)
Thomas Woutersed03b412007-08-28 21:37:11 +0000437
Antoine Pitrouc695c952014-04-28 20:57:36 +0200438 Return the time in seconds since the Epoch, given the ``cert_time``
439 string representing the "notBefore" or "notAfter" date from a
440 certificate in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C
441 locale).
Thomas Woutersed03b412007-08-28 21:37:11 +0000442
Antoine Pitrouc695c952014-04-28 20:57:36 +0200443 Here's an example:
Thomas Woutersed03b412007-08-28 21:37:11 +0000444
Antoine Pitrouc695c952014-04-28 20:57:36 +0200445 .. doctest:: newcontext
446
447 >>> import ssl
448 >>> timestamp = ssl.cert_time_to_seconds("Jan 5 09:34:43 2018 GMT")
Marco Buttu7b2491a2017-04-13 16:17:59 +0200449 >>> timestamp # doctest: +SKIP
Antoine Pitrouc695c952014-04-28 20:57:36 +0200450 1515144883
451 >>> from datetime import datetime
Marco Buttu7b2491a2017-04-13 16:17:59 +0200452 >>> print(datetime.utcfromtimestamp(timestamp)) # doctest: +SKIP
Antoine Pitrouc695c952014-04-28 20:57:36 +0200453 2018-01-05 09:34:43
454
455 "notBefore" or "notAfter" dates must use GMT (:rfc:`5280`).
456
457 .. versionchanged:: 3.5
458 Interpret the input time as a time in UTC as specified by 'GMT'
459 timezone in the input string. Local timezone was used
460 previously. Return an integer (no fractions of a second in the
461 input format)
Thomas Woutersed03b412007-08-28 21:37:11 +0000462
Christian Heimes598894f2016-09-05 23:19:05 +0200463.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_TLS, ca_certs=None)
Thomas Woutersed03b412007-08-28 21:37:11 +0000464
Georg Brandl7f01a132009-09-16 15:58:14 +0000465 Given the address ``addr`` of an SSL-protected server, as a (*hostname*,
466 *port-number*) pair, fetches the server's certificate, and returns it as a
467 PEM-encoded string. If ``ssl_version`` is specified, uses that version of
468 the SSL protocol to attempt to connect to the server. If ``ca_certs`` is
469 specified, it should be a file containing a list of root certificates, the
470 same format as used for the same parameter in :func:`wrap_socket`. The call
471 will attempt to validate the server certificate against that set of root
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000472 certificates, and will fail if the validation attempt fails.
473
Antoine Pitrou15399c32011-04-28 19:23:55 +0200474 .. versionchanged:: 3.3
475 This function is now IPv6-compatible.
476
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200477 .. versionchanged:: 3.5
478 The default *ssl_version* is changed from :data:`PROTOCOL_SSLv3` to
Christian Heimes598894f2016-09-05 23:19:05 +0200479 :data:`PROTOCOL_TLS` for maximum compatibility with modern servers.
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200480
Georg Brandl7f01a132009-09-16 15:58:14 +0000481.. function:: DER_cert_to_PEM_cert(DER_cert_bytes)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000482
483 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
484 string version of the same certificate.
485
Georg Brandl7f01a132009-09-16 15:58:14 +0000486.. function:: PEM_cert_to_DER_cert(PEM_cert_string)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000487
Georg Brandl7f01a132009-09-16 15:58:14 +0000488 Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of
489 bytes for that same certificate.
Thomas Woutersed03b412007-08-28 21:37:11 +0000490
Christian Heimes6d7ad132013-06-09 18:02:55 +0200491.. function:: get_default_verify_paths()
492
493 Returns a named tuple with paths to OpenSSL's default cafile and capath.
494 The paths are the same as used by
495 :meth:`SSLContext.set_default_verify_paths`. The return value is a
496 :term:`named tuple` ``DefaultVerifyPaths``:
497
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300498 * :attr:`cafile` - resolved path to cafile or ``None`` if the file doesn't exist,
499 * :attr:`capath` - resolved path to capath or ``None`` if the directory doesn't exist,
Christian Heimes6d7ad132013-06-09 18:02:55 +0200500 * :attr:`openssl_cafile_env` - OpenSSL's environment key that points to a cafile,
501 * :attr:`openssl_cafile` - hard coded path to a cafile,
502 * :attr:`openssl_capath_env` - OpenSSL's environment key that points to a capath,
503 * :attr:`openssl_capath` - hard coded path to a capath directory
504
Christian Heimes598894f2016-09-05 23:19:05 +0200505 Availability: LibreSSL ignores the environment vars
506 :attr:`openssl_cafile_env` and :attr:`openssl_capath_env`
507
Christian Heimes6d7ad132013-06-09 18:02:55 +0200508 .. versionadded:: 3.4
509
Christian Heimes44109d72013-11-22 01:51:30 +0100510.. function:: enum_certificates(store_name)
Christian Heimes46bebee2013-06-09 19:03:31 +0200511
512 Retrieve certificates from Windows' system cert store. *store_name* may be
513 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
Christian Heimes44109d72013-11-22 01:51:30 +0100514 stores, too.
Christian Heimes46bebee2013-06-09 19:03:31 +0200515
Christian Heimes44109d72013-11-22 01:51:30 +0100516 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
517 The encoding_type specifies the encoding of cert_bytes. It is either
518 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
519 PKCS#7 ASN.1 data. Trust specifies the purpose of the certificate as a set
520 of OIDS or exactly ``True`` if the certificate is trustworthy for all
521 purposes.
522
523 Example::
524
525 >>> ssl.enum_certificates("CA")
526 [(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
527 (b'data...', 'x509_asn', True)]
Christian Heimes46bebee2013-06-09 19:03:31 +0200528
529 Availability: Windows.
530
531 .. versionadded:: 3.4
Christian Heimes6d7ad132013-06-09 18:02:55 +0200532
Christian Heimes44109d72013-11-22 01:51:30 +0100533.. function:: enum_crls(store_name)
534
535 Retrieve CRLs from Windows' system cert store. *store_name* may be
536 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
537 stores, too.
538
539 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
540 The encoding_type specifies the encoding of cert_bytes. It is either
541 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
542 PKCS#7 ASN.1 data.
543
544 Availability: Windows.
545
546 .. versionadded:: 3.4
547
548
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000549Constants
550^^^^^^^^^
551
Christian Heimes3aeacad2016-09-10 00:19:35 +0200552 All constants are now :class:`enum.IntEnum` or :class:`enum.IntFlag` collections.
553
554 .. versionadded:: 3.6
555
Thomas Woutersed03b412007-08-28 21:37:11 +0000556.. data:: CERT_NONE
557
Antoine Pitrou152efa22010-05-16 18:19:27 +0000558 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
559 parameter to :func:`wrap_socket`. In this mode (the default), no
560 certificates will be required from the other side of the socket connection.
561 If a certificate is received from the other end, no attempt to validate it
562 is made.
563
564 See the discussion of :ref:`ssl-security` below.
Thomas Woutersed03b412007-08-28 21:37:11 +0000565
566.. data:: CERT_OPTIONAL
567
Antoine Pitrou152efa22010-05-16 18:19:27 +0000568 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
569 parameter to :func:`wrap_socket`. In this mode no certificates will be
570 required from the other side of the socket connection; but if they
571 are provided, validation will be attempted and an :class:`SSLError`
572 will be raised on failure.
573
574 Use of this setting requires a valid set of CA certificates to
575 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
576 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000577
578.. data:: CERT_REQUIRED
579
Antoine Pitrou152efa22010-05-16 18:19:27 +0000580 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
581 parameter to :func:`wrap_socket`. In this mode, certificates are
582 required from the other side of the socket connection; an :class:`SSLError`
583 will be raised if no certificate is provided, or if its validation fails.
584
585 Use of this setting requires a valid set of CA certificates to
586 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
587 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000588
Christian Heimes3aeacad2016-09-10 00:19:35 +0200589.. class:: VerifyMode
590
591 :class:`enum.IntEnum` collection of CERT_* constants.
592
593 .. versionadded:: 3.6
594
Christian Heimes22587792013-11-21 23:56:13 +0100595.. data:: VERIFY_DEFAULT
596
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500597 Possible value for :attr:`SSLContext.verify_flags`. In this mode, certificate
598 revocation lists (CRLs) are not checked. By default OpenSSL does neither
599 require nor verify CRLs.
Christian Heimes22587792013-11-21 23:56:13 +0100600
601 .. versionadded:: 3.4
602
603.. data:: VERIFY_CRL_CHECK_LEAF
604
605 Possible value for :attr:`SSLContext.verify_flags`. In this mode, only the
606 peer cert is check but non of the intermediate CA certificates. The mode
607 requires a valid CRL that is signed by the peer cert's issuer (its direct
608 ancestor CA). If no proper has been loaded
609 :attr:`SSLContext.load_verify_locations`, validation will fail.
610
611 .. versionadded:: 3.4
612
613.. data:: VERIFY_CRL_CHECK_CHAIN
614
615 Possible value for :attr:`SSLContext.verify_flags`. In this mode, CRLs of
616 all certificates in the peer cert chain are checked.
617
618 .. versionadded:: 3.4
619
620.. data:: VERIFY_X509_STRICT
621
622 Possible value for :attr:`SSLContext.verify_flags` to disable workarounds
623 for broken X.509 certificates.
624
625 .. versionadded:: 3.4
626
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500627.. data:: VERIFY_X509_TRUSTED_FIRST
628
629 Possible value for :attr:`SSLContext.verify_flags`. It instructs OpenSSL to
630 prefer trusted certificates when building the trust chain to validate a
631 certificate. This flag is enabled by default.
632
Benjamin Petersonc8358272015-03-08 09:42:25 -0400633 .. versionadded:: 3.4.4
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500634
Christian Heimes3aeacad2016-09-10 00:19:35 +0200635.. class:: VerifyFlags
636
637 :class:`enum.IntFlag` collection of VERIFY_* constants.
638
639 .. versionadded:: 3.6
640
Christian Heimes598894f2016-09-05 23:19:05 +0200641.. data:: PROTOCOL_TLS
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200642
643 Selects the highest protocol version that both the client and server support.
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700644 Despite the name, this option can select both "SSL" and "TLS" protocols.
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200645
Christian Heimes01113fa2016-09-05 23:23:24 +0200646 .. versionadded:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200647
Christian Heimes5fe668c2016-09-12 00:01:11 +0200648.. data:: PROTOCOL_TLS_CLIENT
649
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700650 Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`,
Christian Heimes5fe668c2016-09-12 00:01:11 +0200651 but only support client-side :class:`SSLSocket` connections. The protocol
652 enables :data:`CERT_REQUIRED` and :attr:`~SSLContext.check_hostname` by
653 default.
654
655 .. versionadded:: 3.6
656
657.. data:: PROTOCOL_TLS_SERVER
658
Nathaniel J. Smithd4069de2017-05-01 22:43:31 -0700659 Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`,
Christian Heimes5fe668c2016-09-12 00:01:11 +0200660 but only support server-side :class:`SSLSocket` connections.
661
662 .. versionadded:: 3.6
663
Christian Heimes598894f2016-09-05 23:19:05 +0200664.. data:: PROTOCOL_SSLv23
665
666 Alias for data:`PROTOCOL_TLS`.
667
Christian Heimes01113fa2016-09-05 23:23:24 +0200668 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200669
Berker Peksagd93c4de2017-02-06 13:37:19 +0300670 Use :data:`PROTOCOL_TLS` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200671
Thomas Woutersed03b412007-08-28 21:37:11 +0000672.. data:: PROTOCOL_SSLv2
673
674 Selects SSL version 2 as the channel encryption protocol.
675
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500676 This protocol is not available if OpenSSL is compiled with the
677 ``OPENSSL_NO_SSL2`` flag.
Victor Stinner3de49192011-05-09 00:42:58 +0200678
Antoine Pitrou8eac60d2010-05-16 14:19:41 +0000679 .. warning::
680
681 SSL version 2 is insecure. Its use is highly discouraged.
682
Christian Heimes01113fa2016-09-05 23:23:24 +0200683 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200684
685 OpenSSL has removed support for SSLv2.
686
Thomas Woutersed03b412007-08-28 21:37:11 +0000687.. data:: PROTOCOL_SSLv3
688
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200689 Selects SSL version 3 as the channel encryption protocol.
690
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500691 This protocol is not be available if OpenSSL is compiled with the
692 ``OPENSSL_NO_SSLv3`` flag.
693
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200694 .. warning::
695
696 SSL version 3 is insecure. Its use is highly discouraged.
Thomas Woutersed03b412007-08-28 21:37:11 +0000697
Christian Heimes01113fa2016-09-05 23:23:24 +0200698 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200699
700 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300701 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200702
Thomas Woutersed03b412007-08-28 21:37:11 +0000703.. data:: PROTOCOL_TLSv1
704
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100705 Selects TLS version 1.0 as the channel encryption protocol.
706
Christian Heimes01113fa2016-09-05 23:23:24 +0200707 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200708
709 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300710 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200711
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100712.. data:: PROTOCOL_TLSv1_1
713
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100714 Selects TLS version 1.1 as the channel encryption protocol.
715 Available only with openssl version 1.0.1+.
716
717 .. versionadded:: 3.4
718
Christian Heimes01113fa2016-09-05 23:23:24 +0200719 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200720
721 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300722 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200723
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100724.. data:: PROTOCOL_TLSv1_2
725
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200726 Selects TLS version 1.2 as the channel encryption protocol. This is the
727 most modern version, and probably the best choice for maximum protection,
728 if both sides can speak it. Available only with openssl version 1.0.1+.
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100729
730 .. versionadded:: 3.4
Thomas Woutersed03b412007-08-28 21:37:11 +0000731
Christian Heimes01113fa2016-09-05 23:23:24 +0200732 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200733
734 OpenSSL has deprecated all version specific protocols. Use the default
Berker Peksagd93c4de2017-02-06 13:37:19 +0300735 protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead.
Christian Heimes598894f2016-09-05 23:19:05 +0200736
Antoine Pitroub5218772010-05-21 09:56:06 +0000737.. data:: OP_ALL
738
739 Enables workarounds for various bugs present in other SSL implementations.
Antoine Pitrou9f6b02e2012-01-27 10:02:55 +0100740 This option is set by default. It does not necessarily set the same
741 flags as OpenSSL's ``SSL_OP_ALL`` constant.
Antoine Pitroub5218772010-05-21 09:56:06 +0000742
743 .. versionadded:: 3.2
744
745.. data:: OP_NO_SSLv2
746
747 Prevents an SSLv2 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200748 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000749 choosing SSLv2 as the protocol version.
750
751 .. versionadded:: 3.2
752
Christian Heimes01113fa2016-09-05 23:23:24 +0200753 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200754
755 SSLv2 is deprecated
756
757
Antoine Pitroub5218772010-05-21 09:56:06 +0000758.. data:: OP_NO_SSLv3
759
760 Prevents an SSLv3 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200761 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000762 choosing SSLv3 as the protocol version.
763
764 .. versionadded:: 3.2
765
Christian Heimes01113fa2016-09-05 23:23:24 +0200766 .. deprecated:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +0200767
768 SSLv3 is deprecated
769
Antoine Pitroub5218772010-05-21 09:56:06 +0000770.. data:: OP_NO_TLSv1
771
772 Prevents a TLSv1 connection. This option is only applicable in
Christian Heimes598894f2016-09-05 23:19:05 +0200773 conjunction with :const:`PROTOCOL_TLS`. It prevents the peers from
Antoine Pitroub5218772010-05-21 09:56:06 +0000774 choosing TLSv1 as the protocol version.
775
776 .. versionadded:: 3.2
777
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100778.. data:: OP_NO_TLSv1_1
779
780 Prevents a TLSv1.1 connection. This option is only applicable in conjunction
Christian Heimes598894f2016-09-05 23:19:05 +0200781 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.1 as
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100782 the protocol version. Available only with openssl version 1.0.1+.
783
784 .. versionadded:: 3.4
785
786.. data:: OP_NO_TLSv1_2
787
788 Prevents a TLSv1.2 connection. This option is only applicable in conjunction
Christian Heimes598894f2016-09-05 23:19:05 +0200789 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.2 as
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100790 the protocol version. Available only with openssl version 1.0.1+.
791
792 .. versionadded:: 3.4
793
Christian Heimescb5b68a2017-09-07 18:07:00 -0700794.. data:: OP_NO_TLSv1_3
795
796 Prevents a TLSv1.3 connection. This option is only applicable in conjunction
797 with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.3 as
798 the protocol version. TLS 1.3 is available with OpenSSL 1.1.1 or later.
799 When Python has been compiled against an older version of OpenSSL, the
800 flag defaults to *0*.
801
802 .. versionadded:: 3.7
803
Antoine Pitrou6db49442011-12-19 13:27:11 +0100804.. data:: OP_CIPHER_SERVER_PREFERENCE
805
806 Use the server's cipher ordering preference, rather than the client's.
807 This option has no effect on client sockets and SSLv2 server sockets.
808
809 .. versionadded:: 3.3
810
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100811.. data:: OP_SINGLE_DH_USE
812
813 Prevents re-use of the same DH key for distinct SSL sessions. This
814 improves forward secrecy but requires more computational resources.
815 This option only applies to server sockets.
816
817 .. versionadded:: 3.3
818
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100819.. data:: OP_SINGLE_ECDH_USE
820
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100821 Prevents re-use of the same ECDH key for distinct SSL sessions. This
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100822 improves forward secrecy but requires more computational resources.
823 This option only applies to server sockets.
824
825 .. versionadded:: 3.3
826
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100827.. data:: OP_NO_COMPRESSION
828
829 Disable compression on the SSL channel. This is useful if the application
830 protocol supports its own compression scheme.
831
832 This option is only available with OpenSSL 1.0.0 and later.
833
834 .. versionadded:: 3.3
835
Christian Heimes3aeacad2016-09-10 00:19:35 +0200836.. class:: Options
837
838 :class:`enum.IntFlag` collection of OP_* constants.
839
Christian Heimes99a65702016-09-10 23:44:53 +0200840.. data:: OP_NO_TICKET
841
842 Prevent client side from requesting a session ticket.
843
Christian Heimes3aeacad2016-09-10 00:19:35 +0200844 .. versionadded:: 3.6
845
Benjamin Petersoncca27322015-01-23 16:35:37 -0500846.. data:: HAS_ALPN
847
848 Whether the OpenSSL library has built-in support for the *Application-Layer
849 Protocol Negotiation* TLS extension as described in :rfc:`7301`.
850
851 .. versionadded:: 3.5
852
Antoine Pitrou501da612011-12-21 09:27:41 +0100853.. data:: HAS_ECDH
854
855 Whether the OpenSSL library has built-in support for Elliptic Curve-based
856 Diffie-Hellman key exchange. This should be true unless the feature was
857 explicitly disabled by the distributor.
858
859 .. versionadded:: 3.3
860
Antoine Pitroud5323212010-10-22 18:19:07 +0000861.. data:: HAS_SNI
862
863 Whether the OpenSSL library has built-in support for the *Server Name
Chandan Kumar63c2c8a2017-06-09 15:13:58 +0530864 Indication* extension (as defined in :rfc:`6066`).
Antoine Pitroud5323212010-10-22 18:19:07 +0000865
866 .. versionadded:: 3.2
867
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100868.. data:: HAS_NPN
869
870 Whether the OpenSSL library has built-in support for *Next Protocol
Sanyam Khurana338cd832018-01-20 05:55:37 +0530871 Negotiation* as described in the `Application Layer Protocol
872 Negotiation <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_.
873 When true, you can use the :meth:`SSLContext.set_npn_protocols` method to advertise
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100874 which protocols you want to support.
875
876 .. versionadded:: 3.3
877
Christian Heimescb5b68a2017-09-07 18:07:00 -0700878.. data:: HAS_TLSv1_3
879
880 Whether the OpenSSL library has built-in support for the TLS 1.3 protocol.
881
882 .. versionadded:: 3.7
883
Antoine Pitroud6494802011-07-21 01:11:30 +0200884.. data:: CHANNEL_BINDING_TYPES
885
886 List of supported TLS channel binding types. Strings in this list
887 can be used as arguments to :meth:`SSLSocket.get_channel_binding`.
888
889 .. versionadded:: 3.3
890
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000891.. data:: OPENSSL_VERSION
892
893 The version string of the OpenSSL library loaded by the interpreter::
894
895 >>> ssl.OPENSSL_VERSION
Alex Gaynor275104e2017-03-02 05:23:19 -0500896 'OpenSSL 1.0.2k 26 Jan 2017'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000897
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000898 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000899
900.. data:: OPENSSL_VERSION_INFO
901
902 A tuple of five integers representing version information about the
903 OpenSSL library::
904
905 >>> ssl.OPENSSL_VERSION_INFO
Alex Gaynor275104e2017-03-02 05:23:19 -0500906 (1, 0, 2, 11, 15)
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000907
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000908 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000909
910.. data:: OPENSSL_VERSION_NUMBER
911
912 The raw version number of the OpenSSL library, as a single integer::
913
914 >>> ssl.OPENSSL_VERSION_NUMBER
Alex Gaynor275104e2017-03-02 05:23:19 -0500915 268443839
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000916 >>> hex(ssl.OPENSSL_VERSION_NUMBER)
Alex Gaynor275104e2017-03-02 05:23:19 -0500917 '0x100020bf'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000918
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000919 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000920
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100921.. data:: ALERT_DESCRIPTION_HANDSHAKE_FAILURE
922 ALERT_DESCRIPTION_INTERNAL_ERROR
923 ALERT_DESCRIPTION_*
924
925 Alert Descriptions from :rfc:`5246` and others. The `IANA TLS Alert Registry
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300926 <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100927 contains this list and references to the RFCs where their meaning is defined.
928
929 Used as the return value of the callback function in
930 :meth:`SSLContext.set_servername_callback`.
931
932 .. versionadded:: 3.4
933
Christian Heimes3aeacad2016-09-10 00:19:35 +0200934.. class:: AlertDescription
935
936 :class:`enum.IntEnum` collection of ALERT_DESCRIPTION_* constants.
937
938 .. versionadded:: 3.6
939
Christian Heimes72d28502013-11-23 13:56:58 +0100940.. data:: Purpose.SERVER_AUTH
941
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100942 Option for :func:`create_default_context` and
943 :meth:`SSLContext.load_default_certs`. This value indicates that the
944 context may be used to authenticate Web servers (therefore, it will
945 be used to create client-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100946
947 .. versionadded:: 3.4
948
Christian Heimes6b2ff982013-11-23 14:42:01 +0100949.. data:: Purpose.CLIENT_AUTH
Christian Heimes72d28502013-11-23 13:56:58 +0100950
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100951 Option for :func:`create_default_context` and
952 :meth:`SSLContext.load_default_certs`. This value indicates that the
953 context may be used to authenticate Web clients (therefore, it will
954 be used to create server-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100955
956 .. versionadded:: 3.4
957
Christian Heimes3aeacad2016-09-10 00:19:35 +0200958.. class:: SSLErrorNumber
959
960 :class:`enum.IntEnum` collection of SSL_ERROR_* constants.
961
962 .. versionadded:: 3.6
963
Thomas Woutersed03b412007-08-28 21:37:11 +0000964
Antoine Pitrou152efa22010-05-16 18:19:27 +0000965SSL Sockets
966-----------
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000967
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200968.. class:: SSLSocket(socket.socket)
Antoine Pitrou792ff3e2010-09-19 13:19:21 +0000969
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200970 SSL sockets provide the following methods of :ref:`socket-objects`:
Zachary Wareba9fb0d2014-06-11 15:02:25 -0500971
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200972 - :meth:`~socket.socket.accept()`
973 - :meth:`~socket.socket.bind()`
974 - :meth:`~socket.socket.close()`
975 - :meth:`~socket.socket.connect()`
976 - :meth:`~socket.socket.detach()`
977 - :meth:`~socket.socket.fileno()`
978 - :meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`
979 - :meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`
980 - :meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`,
981 :meth:`~socket.socket.setblocking()`
982 - :meth:`~socket.socket.listen()`
983 - :meth:`~socket.socket.makefile()`
984 - :meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()`
985 (but passing a non-zero ``flags`` argument is not allowed)
986 - :meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with
987 the same limitation)
Victor Stinner92127a52014-10-10 12:43:17 +0200988 - :meth:`~socket.socket.sendfile()` (but :mod:`os.sendfile` will be used
989 for plain-text sockets only, else :meth:`~socket.socket.send()` will be used)
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200990 - :meth:`~socket.socket.shutdown()`
Zachary Wareba9fb0d2014-06-11 15:02:25 -0500991
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200992 However, since the SSL (and TLS) protocol has its own framing atop
993 of TCP, the SSL sockets abstraction can, in certain respects, diverge from
994 the specification of normal, OS-level sockets. See especially the
995 :ref:`notes on non-blocking sockets <ssl-nonblocking>`.
Antoine Pitroue1f2f302010-09-19 13:56:11 +0000996
Victor Stinnerd28fe8c2014-10-10 12:07:19 +0200997 Usually, :class:`SSLSocket` are not created directly, but using the
Alex Gaynor1cf2a802017-02-28 22:26:56 -0500998 :meth:`SSLContext.wrap_socket` method.
Victor Stinnerd28fe8c2014-10-10 12:07:19 +0200999
Victor Stinner92127a52014-10-10 12:43:17 +02001000 .. versionchanged:: 3.5
1001 The :meth:`sendfile` method was added.
1002
Victor Stinner14690702015-04-06 22:46:13 +02001003 .. versionchanged:: 3.5
1004 The :meth:`shutdown` does not reset the socket timeout each time bytes
1005 are received or sent. The socket timeout is now to maximum total duration
1006 of the shutdown.
1007
Christian Heimesd0486372016-09-10 23:23:33 +02001008 .. deprecated:: 3.6
1009 It is deprecated to create a :class:`SSLSocket` instance directly, use
1010 :meth:`SSLContext.wrap_socket` to wrap a socket.
1011
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001012
1013SSL sockets also have the following additional methods and attributes:
Antoine Pitrou792ff3e2010-09-19 13:19:21 +00001014
Martin Panterf6b1d662016-03-28 00:22:09 +00001015.. method:: SSLSocket.read(len=1024, buffer=None)
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001016
1017 Read up to *len* bytes of data from the SSL socket and return the result as
1018 a ``bytes`` instance. If *buffer* is specified, then read into the buffer
1019 instead, and return the number of bytes read.
1020
Victor Stinner41f92c22014-10-10 12:05:56 +02001021 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001022 :ref:`non-blocking <ssl-nonblocking>` and the read would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001023
1024 As at any time a re-negotiation is possible, a call to :meth:`read` can also
1025 cause write operations.
1026
Victor Stinner14690702015-04-06 22:46:13 +02001027 .. versionchanged:: 3.5
1028 The socket timeout is no more reset each time bytes are received or sent.
1029 The socket timeout is now to maximum total duration to read up to *len*
1030 bytes.
1031
Christian Heimesd0486372016-09-10 23:23:33 +02001032 .. deprecated:: 3.6
1033 Use :meth:`~SSLSocket.recv` instead of :meth:`~SSLSocket.read`.
1034
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001035.. method:: SSLSocket.write(buf)
1036
1037 Write *buf* to the SSL socket and return the number of bytes written. The
1038 *buf* argument must be an object supporting the buffer interface.
1039
Victor Stinner41f92c22014-10-10 12:05:56 +02001040 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001041 :ref:`non-blocking <ssl-nonblocking>` and the write would block.
Victor Stinner41f92c22014-10-10 12:05:56 +02001042
1043 As at any time a re-negotiation is possible, a call to :meth:`write` can
1044 also cause read operations.
1045
Victor Stinner14690702015-04-06 22:46:13 +02001046 .. versionchanged:: 3.5
1047 The socket timeout is no more reset each time bytes are received or sent.
1048 The socket timeout is now to maximum total duration to write *buf*.
1049
Christian Heimesd0486372016-09-10 23:23:33 +02001050 .. deprecated:: 3.6
1051 Use :meth:`~SSLSocket.send` instead of :meth:`~SSLSocket.write`.
1052
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001053.. note::
1054
1055 The :meth:`~SSLSocket.read` and :meth:`~SSLSocket.write` methods are the
1056 low-level methods that read and write unencrypted, application-level data
Martin Panter1f1177d2015-10-31 11:48:53 +00001057 and decrypt/encrypt it to encrypted, wire-level data. These methods
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001058 require an active SSL connection, i.e. the handshake was completed and
1059 :meth:`SSLSocket.unwrap` was not called.
1060
1061 Normally you should use the socket API methods like
1062 :meth:`~socket.socket.recv` and :meth:`~socket.socket.send` instead of these
1063 methods.
1064
Bill Janssen48dc27c2007-12-05 03:38:10 +00001065.. method:: SSLSocket.do_handshake()
1066
Antoine Pitroub3593ca2011-07-11 01:39:19 +02001067 Perform the SSL setup handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +00001068
Christian Heimes1aa9a752013-12-02 02:41:19 +01001069 .. versionchanged:: 3.4
Zachary Ware88a19772014-07-25 13:30:50 -05001070 The handshake method also performs :func:`match_hostname` when the
Christian Heimes1aa9a752013-12-02 02:41:19 +01001071 :attr:`~SSLContext.check_hostname` attribute of the socket's
1072 :attr:`~SSLSocket.context` is true.
1073
Victor Stinner14690702015-04-06 22:46:13 +02001074 .. versionchanged:: 3.5
1075 The socket timeout is no more reset each time bytes are received or sent.
1076 The socket timeout is now to maximum total duration of the handshake.
1077
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001078.. method:: SSLSocket.getpeercert(binary_form=False)
1079
Georg Brandl7f01a132009-09-16 15:58:14 +00001080 If there is no certificate for the peer on the other end of the connection,
Antoine Pitrou20b85552013-09-29 19:50:53 +02001081 return ``None``. If the SSL handshake hasn't been done yet, raise
1082 :exc:`ValueError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001083
Antoine Pitroud34941a2013-04-16 20:27:17 +02001084 If the ``binary_form`` parameter is :const:`False`, and a certificate was
Georg Brandl7f01a132009-09-16 15:58:14 +00001085 received from the peer, this method returns a :class:`dict` instance. If the
1086 certificate was not validated, the dict is empty. If the certificate was
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001087 validated, it returns a dict with several keys, amongst them ``subject``
1088 (the principal for which the certificate was issued) and ``issuer``
1089 (the principal issuing the certificate). If a certificate contains an
1090 instance of the *Subject Alternative Name* extension (see :rfc:`3280`),
1091 there will also be a ``subjectAltName`` key in the dictionary.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001092
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001093 The ``subject`` and ``issuer`` fields are tuples containing the sequence
1094 of relative distinguished names (RDNs) given in the certificate's data
1095 structure for the respective fields, and each RDN is a sequence of
1096 name-value pairs. Here is a real-world example::
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001097
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001098 {'issuer': ((('countryName', 'IL'),),
1099 (('organizationName', 'StartCom Ltd.'),),
1100 (('organizationalUnitName',
1101 'Secure Digital Certificate Signing'),),
1102 (('commonName',
1103 'StartCom Class 2 Primary Intermediate Server CA'),)),
1104 'notAfter': 'Nov 22 08:15:19 2013 GMT',
1105 'notBefore': 'Nov 21 03:09:52 2011 GMT',
1106 'serialNumber': '95F0',
1107 'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),),
1108 (('countryName', 'US'),),
1109 (('stateOrProvinceName', 'California'),),
1110 (('localityName', 'San Francisco'),),
1111 (('organizationName', 'Electronic Frontier Foundation, Inc.'),),
1112 (('commonName', '*.eff.org'),),
1113 (('emailAddress', 'hostmaster@eff.org'),)),
1114 'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')),
1115 'version': 3}
1116
1117 .. note::
Larry Hastings3732ed22014-03-15 21:13:56 -07001118
Antoine Pitroub7c6c812012-08-16 22:14:43 +02001119 To validate a certificate for a particular service, you can use the
1120 :func:`match_hostname` function.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001121
Georg Brandl7f01a132009-09-16 15:58:14 +00001122 If the ``binary_form`` parameter is :const:`True`, and a certificate was
1123 provided, this method returns the DER-encoded form of the entire certificate
1124 as a sequence of bytes, or :const:`None` if the peer did not provide a
Antoine Pitroud34941a2013-04-16 20:27:17 +02001125 certificate. Whether the peer provides a certificate depends on the SSL
1126 socket's role:
1127
1128 * for a client SSL socket, the server will always provide a certificate,
1129 regardless of whether validation was required;
1130
1131 * for a server SSL socket, the client will only provide a certificate
1132 when requested by the server; therefore :meth:`getpeercert` will return
1133 :const:`None` if you used :const:`CERT_NONE` (rather than
1134 :const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`).
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001135
Antoine Pitroufb046912010-11-09 20:21:19 +00001136 .. versionchanged:: 3.2
1137 The returned dictionary includes additional items such as ``issuer``
1138 and ``notBefore``.
1139
Antoine Pitrou20b85552013-09-29 19:50:53 +02001140 .. versionchanged:: 3.4
1141 :exc:`ValueError` is raised when the handshake isn't done.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001142 The returned dictionary includes additional X509v3 extension items
Larry Hastings3732ed22014-03-15 21:13:56 -07001143 such as ``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs.
Christian Heimesbd3a7f92013-11-21 03:40:15 +01001144
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001145.. method:: SSLSocket.cipher()
1146
Georg Brandl7f01a132009-09-16 15:58:14 +00001147 Returns a three-value tuple containing the name of the cipher being used, the
1148 version of the SSL protocol that defines its use, and the number of secret
1149 bits being used. If no connection has been established, returns ``None``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001150
Benjamin Peterson4cb17812015-01-07 11:14:26 -06001151.. method:: SSLSocket.shared_ciphers()
1152
1153 Return the list of ciphers shared by the client during the handshake. Each
1154 entry of the returned list is a three-value tuple containing the name of the
1155 cipher, the version of the SSL protocol that defines its use, and the number
1156 of secret bits the cipher uses. :meth:`~SSLSocket.shared_ciphers` returns
1157 ``None`` if no connection has been established or the socket is a client
1158 socket.
1159
1160 .. versionadded:: 3.5
1161
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +01001162.. method:: SSLSocket.compression()
1163
1164 Return the compression algorithm being used as a string, or ``None``
1165 if the connection isn't compressed.
1166
1167 If the higher-level protocol supports its own compression mechanism,
1168 you can use :data:`OP_NO_COMPRESSION` to disable SSL-level compression.
1169
1170 .. versionadded:: 3.3
1171
Antoine Pitroud6494802011-07-21 01:11:30 +02001172.. method:: SSLSocket.get_channel_binding(cb_type="tls-unique")
1173
1174 Get channel binding data for current connection, as a bytes object. Returns
1175 ``None`` if not connected or the handshake has not been completed.
1176
1177 The *cb_type* parameter allow selection of the desired channel binding
1178 type. Valid channel binding types are listed in the
1179 :data:`CHANNEL_BINDING_TYPES` list. Currently only the 'tls-unique' channel
1180 binding, defined by :rfc:`5929`, is supported. :exc:`ValueError` will be
1181 raised if an unsupported channel binding type is requested.
1182
1183 .. versionadded:: 3.3
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001184
Benjamin Petersoncca27322015-01-23 16:35:37 -05001185.. method:: SSLSocket.selected_alpn_protocol()
1186
1187 Return the protocol that was selected during the TLS handshake. If
1188 :meth:`SSLContext.set_alpn_protocols` was not called, if the other party does
Benjamin Peterson88615022015-01-23 17:30:26 -05001189 not support ALPN, if this socket does not support any of the client's
1190 proposed protocols, or if the handshake has not happened yet, ``None`` is
Benjamin Petersoncca27322015-01-23 16:35:37 -05001191 returned.
1192
1193 .. versionadded:: 3.5
1194
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001195.. method:: SSLSocket.selected_npn_protocol()
1196
Benjamin Petersoncca27322015-01-23 16:35:37 -05001197 Return the higher-level protocol that was selected during the TLS/SSL
Antoine Pitrou47e40422014-09-04 21:00:10 +02001198 handshake. If :meth:`SSLContext.set_npn_protocols` was not called, or
1199 if the other party does not support NPN, or if the handshake has not yet
1200 happened, this will return ``None``.
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001201
1202 .. versionadded:: 3.3
1203
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001204.. method:: SSLSocket.unwrap()
1205
Georg Brandl7f01a132009-09-16 15:58:14 +00001206 Performs the SSL shutdown handshake, which removes the TLS layer from the
1207 underlying socket, and returns the underlying socket object. This can be
1208 used to go from encrypted operation over a connection to unencrypted. The
1209 returned socket should always be used for further communication with the
1210 other side of the connection, rather than the original socket.
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001211
Antoine Pitrou47e40422014-09-04 21:00:10 +02001212.. method:: SSLSocket.version()
1213
1214 Return the actual SSL protocol version negotiated by the connection
1215 as a string, or ``None`` is no secure connection is established.
1216 As of this writing, possible return values include ``"SSLv2"``,
1217 ``"SSLv3"``, ``"TLSv1"``, ``"TLSv1.1"`` and ``"TLSv1.2"``.
1218 Recent OpenSSL versions may define more return values.
1219
1220 .. versionadded:: 3.5
1221
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001222.. method:: SSLSocket.pending()
1223
1224 Returns the number of already decrypted bytes available for read, pending on
1225 the connection.
1226
Antoine Pitrouec883db2010-05-24 21:20:20 +00001227.. attribute:: SSLSocket.context
1228
1229 The :class:`SSLContext` object this SSL socket is tied to. If the SSL
1230 socket was created using the top-level :func:`wrap_socket` function
1231 (rather than :meth:`SSLContext.wrap_socket`), this is a custom context
1232 object created for this SSL socket.
1233
1234 .. versionadded:: 3.2
1235
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001236.. attribute:: SSLSocket.server_side
1237
1238 A boolean which is ``True`` for server-side sockets and ``False`` for
1239 client-side sockets.
1240
Victor Stinner41f92c22014-10-10 12:05:56 +02001241 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001242
1243.. attribute:: SSLSocket.server_hostname
1244
Victor Stinner41f92c22014-10-10 12:05:56 +02001245 Hostname of the server: :class:`str` type, or ``None`` for server-side
1246 socket or if the hostname was not specified in the constructor.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001247
Victor Stinner41f92c22014-10-10 12:05:56 +02001248 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001249
Christian Heimes99a65702016-09-10 23:44:53 +02001250.. attribute:: SSLSocket.session
1251
1252 The :class:`SSLSession` for this SSL connection. The session is available
1253 for client and server side sockets after the TLS handshake has been
1254 performed. For client sockets the session can be set before
1255 :meth:`~SSLSocket.do_handshake` has been called to reuse a session.
1256
1257 .. versionadded:: 3.6
1258
1259.. attribute:: SSLSocket.session_reused
1260
1261 .. versionadded:: 3.6
1262
Antoine Pitrouec883db2010-05-24 21:20:20 +00001263
Antoine Pitrou152efa22010-05-16 18:19:27 +00001264SSL Contexts
1265------------
1266
Antoine Pitroucafaad42010-05-24 15:58:43 +00001267.. versionadded:: 3.2
1268
Antoine Pitroub0182c82010-10-12 20:09:02 +00001269An SSL context holds various data longer-lived than single SSL connections,
1270such as SSL configuration options, certificate(s) and private key(s).
1271It also manages a cache of SSL sessions for server-side sockets, in order
1272to speed up repeated connections from the same clients.
1273
Christian Heimes598894f2016-09-05 23:19:05 +02001274.. class:: SSLContext(protocol=PROTOCOL_TLS)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001275
Christian Heimes598894f2016-09-05 23:19:05 +02001276 Create a new SSL context. You may pass *protocol* which must be one
Antoine Pitroub0182c82010-10-12 20:09:02 +00001277 of the ``PROTOCOL_*`` constants defined in this module.
Christian Heimes598894f2016-09-05 23:19:05 +02001278 :data:`PROTOCOL_TLS` is currently recommended for maximum
1279 interoperability and default value.
Antoine Pitrou5bef4102013-11-23 16:16:29 +01001280
1281 .. seealso::
1282 :func:`create_default_context` lets the :mod:`ssl` module choose
1283 security settings for a given purpose.
Antoine Pitroub0182c82010-10-12 20:09:02 +00001284
Christian Heimes01113fa2016-09-05 23:23:24 +02001285 .. versionchanged:: 3.6
Christian Heimes598894f2016-09-05 23:19:05 +02001286
Christian Heimes358cfd42016-09-10 22:43:48 +02001287 The context is created with secure default values. The options
1288 :data:`OP_NO_COMPRESSION`, :data:`OP_CIPHER_SERVER_PREFERENCE`,
1289 :data:`OP_SINGLE_DH_USE`, :data:`OP_SINGLE_ECDH_USE`,
1290 :data:`OP_NO_SSLv2` (except for :data:`PROTOCOL_SSLv2`),
1291 and :data:`OP_NO_SSLv3` (except for :data:`PROTOCOL_SSLv3`) are
1292 set by default. The initial cipher suite list contains only ``HIGH``
1293 ciphers, no ``NULL`` ciphers and no ``MD5`` ciphers (except for
1294 :data:`PROTOCOL_SSLv2`).
Christian Heimes598894f2016-09-05 23:19:05 +02001295
Antoine Pitrou152efa22010-05-16 18:19:27 +00001296
1297:class:`SSLContext` objects have the following methods and attributes:
1298
Christian Heimes9a5395a2013-06-17 15:44:12 +02001299.. method:: SSLContext.cert_store_stats()
1300
1301 Get statistics about quantities of loaded X.509 certificates, count of
1302 X.509 certificates flagged as CA certificates and certificate revocation
1303 lists as dictionary.
1304
1305 Example for a context with one CA cert and one other cert::
1306
1307 >>> context.cert_store_stats()
1308 {'crl': 0, 'x509_ca': 1, 'x509': 2}
1309
1310 .. versionadded:: 3.4
1311
Christian Heimesefff7062013-11-21 03:35:02 +01001312
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001313.. method:: SSLContext.load_cert_chain(certfile, keyfile=None, password=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001314
1315 Load a private key and the corresponding certificate. The *certfile*
1316 string must be the path to a single file in PEM format containing the
1317 certificate as well as any number of CA certificates needed to establish
1318 the certificate's authenticity. The *keyfile* string, if present, must
1319 point to a file containing the private key in. Otherwise the private
1320 key will be taken from *certfile* as well. See the discussion of
1321 :ref:`ssl-certificates` for more information on how the certificate
1322 is stored in the *certfile*.
1323
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001324 The *password* argument may be a function to call to get the password for
1325 decrypting the private key. It will only be called if the private key is
1326 encrypted and a password is necessary. It will be called with no arguments,
1327 and it should return a string, bytes, or bytearray. If the return value is
1328 a string it will be encoded as UTF-8 before using it to decrypt the key.
1329 Alternatively a string, bytes, or bytearray value may be supplied directly
1330 as the *password* argument. It will be ignored if the private key is not
1331 encrypted and no password is needed.
1332
1333 If the *password* argument is not specified and a password is required,
1334 OpenSSL's built-in password prompting mechanism will be used to
1335 interactively prompt the user for a password.
1336
Antoine Pitrou152efa22010-05-16 18:19:27 +00001337 An :class:`SSLError` is raised if the private key doesn't
1338 match with the certificate.
1339
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001340 .. versionchanged:: 3.3
1341 New optional argument *password*.
1342
Christian Heimes72d28502013-11-23 13:56:58 +01001343.. method:: SSLContext.load_default_certs(purpose=Purpose.SERVER_AUTH)
1344
1345 Load a set of default "certification authority" (CA) certificates from
1346 default locations. On Windows it loads CA certs from the ``CA`` and
1347 ``ROOT`` system stores. On other systems it calls
1348 :meth:`SSLContext.set_default_verify_paths`. In the future the method may
1349 load CA certificates from other locations, too.
1350
1351 The *purpose* flag specifies what kind of CA certificates are loaded. The
1352 default settings :data:`Purpose.SERVER_AUTH` loads certificates, that are
1353 flagged and trusted for TLS web server authentication (client side
Christian Heimes6b2ff982013-11-23 14:42:01 +01001354 sockets). :data:`Purpose.CLIENT_AUTH` loads CA certificates for client
Christian Heimes72d28502013-11-23 13:56:58 +01001355 certificate verification on the server side.
1356
1357 .. versionadded:: 3.4
1358
Christian Heimesefff7062013-11-21 03:35:02 +01001359.. method:: SSLContext.load_verify_locations(cafile=None, capath=None, cadata=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001360
1361 Load a set of "certification authority" (CA) certificates used to validate
1362 other peers' certificates when :data:`verify_mode` is other than
1363 :data:`CERT_NONE`. At least one of *cafile* or *capath* must be specified.
1364
Christian Heimes22587792013-11-21 23:56:13 +01001365 This method can also load certification revocation lists (CRLs) in PEM or
Donald Stufft8b852f12014-05-20 12:58:38 -04001366 DER format. In order to make use of CRLs, :attr:`SSLContext.verify_flags`
Christian Heimes22587792013-11-21 23:56:13 +01001367 must be configured properly.
1368
Christian Heimes3e738f92013-06-09 18:07:16 +02001369 The *cafile* string, if present, is the path to a file of concatenated
Antoine Pitrou152efa22010-05-16 18:19:27 +00001370 CA certificates in PEM format. See the discussion of
1371 :ref:`ssl-certificates` for more information about how to arrange the
1372 certificates in this file.
1373
1374 The *capath* string, if present, is
1375 the path to a directory containing several CA certificates in PEM format,
1376 following an `OpenSSL specific layout
Sanyam Khurana338cd832018-01-20 05:55:37 +05301377 <https://www.openssl.org/docs/manmaster/man3/SSL_CTX_load_verify_locations.html>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001378
Christian Heimesefff7062013-11-21 03:35:02 +01001379 The *cadata* object, if present, is either an ASCII string of one or more
Serhiy Storchakab757c832014-12-05 22:25:22 +02001380 PEM-encoded certificates or a :term:`bytes-like object` of DER-encoded
Christian Heimesefff7062013-11-21 03:35:02 +01001381 certificates. Like with *capath* extra lines around PEM-encoded
1382 certificates are ignored but at least one certificate must be present.
1383
1384 .. versionchanged:: 3.4
1385 New optional argument *cadata*
1386
Christian Heimes9a5395a2013-06-17 15:44:12 +02001387.. method:: SSLContext.get_ca_certs(binary_form=False)
1388
1389 Get a list of loaded "certification authority" (CA) certificates. If the
1390 ``binary_form`` parameter is :const:`False` each list
1391 entry is a dict like the output of :meth:`SSLSocket.getpeercert`. Otherwise
1392 the method returns a list of DER-encoded certificates. The returned list
1393 does not contain certificates from *capath* unless a certificate was
1394 requested and loaded by a SSL connection.
1395
Antoine Pitrou97aa9532015-04-13 21:06:15 +02001396 .. note::
1397 Certificates in a capath directory aren't loaded unless they have
1398 been used at least once.
1399
Larry Hastingsd36fc432013-08-03 02:49:53 -07001400 .. versionadded:: 3.4
Christian Heimes9a5395a2013-06-17 15:44:12 +02001401
Christian Heimes25bfcd52016-09-06 00:04:45 +02001402.. method:: SSLContext.get_ciphers()
1403
1404 Get a list of enabled ciphers. The list is in order of cipher priority.
1405 See :meth:`SSLContext.set_ciphers`.
1406
1407 Example::
1408
1409 >>> ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
1410 >>> ctx.set_ciphers('ECDHE+AESGCM:!ECDSA')
1411 >>> ctx.get_ciphers() # OpenSSL 1.0.x
1412 [{'alg_bits': 256,
1413 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA '
1414 'Enc=AESGCM(256) Mac=AEAD',
1415 'id': 50380848,
1416 'name': 'ECDHE-RSA-AES256-GCM-SHA384',
1417 'protocol': 'TLSv1/SSLv3',
1418 'strength_bits': 256},
1419 {'alg_bits': 128,
1420 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA '
1421 'Enc=AESGCM(128) Mac=AEAD',
1422 'id': 50380847,
1423 'name': 'ECDHE-RSA-AES128-GCM-SHA256',
1424 'protocol': 'TLSv1/SSLv3',
1425 'strength_bits': 128}]
1426
1427 On OpenSSL 1.1 and newer the cipher dict contains additional fields::
Marco Buttu7b2491a2017-04-13 16:17:59 +02001428
Christian Heimes25bfcd52016-09-06 00:04:45 +02001429 >>> ctx.get_ciphers() # OpenSSL 1.1+
1430 [{'aead': True,
1431 'alg_bits': 256,
1432 'auth': 'auth-rsa',
1433 'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA '
1434 'Enc=AESGCM(256) Mac=AEAD',
1435 'digest': None,
1436 'id': 50380848,
1437 'kea': 'kx-ecdhe',
1438 'name': 'ECDHE-RSA-AES256-GCM-SHA384',
1439 'protocol': 'TLSv1.2',
1440 'strength_bits': 256,
1441 'symmetric': 'aes-256-gcm'},
1442 {'aead': True,
1443 'alg_bits': 128,
1444 'auth': 'auth-rsa',
1445 'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA '
1446 'Enc=AESGCM(128) Mac=AEAD',
1447 'digest': None,
1448 'id': 50380847,
1449 'kea': 'kx-ecdhe',
1450 'name': 'ECDHE-RSA-AES128-GCM-SHA256',
1451 'protocol': 'TLSv1.2',
1452 'strength_bits': 128,
1453 'symmetric': 'aes-128-gcm'}]
1454
1455 Availability: OpenSSL 1.0.2+
1456
1457 .. versionadded:: 3.6
1458
Antoine Pitrou664c2d12010-11-17 20:29:42 +00001459.. method:: SSLContext.set_default_verify_paths()
1460
1461 Load a set of default "certification authority" (CA) certificates from
1462 a filesystem path defined when building the OpenSSL library. Unfortunately,
1463 there's no easy way to know whether this method succeeds: no error is
1464 returned if no certificates are to be found. When the OpenSSL library is
1465 provided as part of the operating system, though, it is likely to be
1466 configured properly.
1467
Antoine Pitrou152efa22010-05-16 18:19:27 +00001468.. method:: SSLContext.set_ciphers(ciphers)
1469
1470 Set the available ciphers for sockets created with this context.
1471 It should be a string in the `OpenSSL cipher list format
Felipe19e4d932017-09-20 20:20:18 +02001472 <https://wiki.openssl.org/index.php/Manual:Ciphers(1)#CIPHER_LIST_FORMAT>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001473 If no cipher can be selected (because compile-time options or other
1474 configuration forbids use of all the specified ciphers), an
1475 :class:`SSLError` will be raised.
1476
1477 .. note::
1478 when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will
1479 give the currently selected cipher.
1480
Benjamin Petersoncca27322015-01-23 16:35:37 -05001481.. method:: SSLContext.set_alpn_protocols(protocols)
1482
1483 Specify which protocols the socket should advertise during the SSL/TLS
1484 handshake. It should be a list of ASCII strings, like ``['http/1.1',
1485 'spdy/2']``, ordered by preference. The selection of a protocol will happen
1486 during the handshake, and will play out according to :rfc:`7301`. After a
1487 successful handshake, the :meth:`SSLSocket.selected_alpn_protocol` method will
1488 return the agreed-upon protocol.
1489
1490 This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is
1491 False.
1492
Christian Heimes7b40cb72017-08-15 10:33:43 +02001493 OpenSSL 1.1.0 to 1.1.0e will abort the handshake and raise :exc:`SSLError`
1494 when both sides support ALPN but cannot agree on a protocol. 1.1.0f+
1495 behaves like 1.0.2, :meth:`SSLSocket.selected_alpn_protocol` returns None.
Christian Heimes598894f2016-09-05 23:19:05 +02001496
Benjamin Petersoncca27322015-01-23 16:35:37 -05001497 .. versionadded:: 3.5
1498
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001499.. method:: SSLContext.set_npn_protocols(protocols)
1500
R David Murrayc7f75792013-06-26 15:11:12 -04001501 Specify which protocols the socket should advertise during the SSL/TLS
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001502 handshake. It should be a list of strings, like ``['http/1.1', 'spdy/2']``,
1503 ordered by preference. The selection of a protocol will happen during the
Sanyam Khurana338cd832018-01-20 05:55:37 +05301504 handshake, and will play out according to the `Application Layer Protocol Negotiation
1505 <https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation>`_. After a
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001506 successful handshake, the :meth:`SSLSocket.selected_npn_protocol` method will
1507 return the agreed-upon protocol.
1508
1509 This method will raise :exc:`NotImplementedError` if :data:`HAS_NPN` is
1510 False.
1511
1512 .. versionadded:: 3.3
1513
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001514.. method:: SSLContext.set_servername_callback(server_name_callback)
1515
1516 Register a callback function that will be called after the TLS Client Hello
1517 handshake message has been received by the SSL/TLS server when the TLS client
1518 specifies a server name indication. The server name indication mechanism
1519 is specified in :rfc:`6066` section 3 - Server Name Indication.
1520
1521 Only one callback can be set per ``SSLContext``. If *server_name_callback*
1522 is ``None`` then the callback is disabled. Calling this function a
1523 subsequent time will disable the previously registered callback.
1524
1525 The callback function, *server_name_callback*, will be called with three
1526 arguments; the first being the :class:`ssl.SSLSocket`, the second is a string
1527 that represents the server name that the client is intending to communicate
Antoine Pitrou50b24d02013-04-11 20:48:42 +02001528 (or :const:`None` if the TLS Client Hello does not contain a server name)
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001529 and the third argument is the original :class:`SSLContext`. The server name
1530 argument is the IDNA decoded server name.
1531
1532 A typical use of this callback is to change the :class:`ssl.SSLSocket`'s
1533 :attr:`SSLSocket.context` attribute to a new object of type
1534 :class:`SSLContext` representing a certificate chain that matches the server
1535 name.
1536
1537 Due to the early negotiation phase of the TLS connection, only limited
1538 methods and attributes are usable like
Benjamin Petersoncca27322015-01-23 16:35:37 -05001539 :meth:`SSLSocket.selected_alpn_protocol` and :attr:`SSLSocket.context`.
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001540 :meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.getpeercert`,
1541 :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compress` methods require that
1542 the TLS connection has progressed beyond the TLS Client Hello and therefore
1543 will not contain return meaningful values nor can they be called safely.
1544
1545 The *server_name_callback* function must return ``None`` to allow the
Terry Jan Reedy8e7586b2013-03-11 18:38:13 -04001546 TLS negotiation to continue. If a TLS failure is required, a constant
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001547 :const:`ALERT_DESCRIPTION_* <ALERT_DESCRIPTION_INTERNAL_ERROR>` can be
1548 returned. Other return values will result in a TLS fatal error with
1549 :const:`ALERT_DESCRIPTION_INTERNAL_ERROR`.
1550
Zachary Ware88a19772014-07-25 13:30:50 -05001551 If there is an IDNA decoding error on the server name, the TLS connection
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001552 will terminate with an :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` fatal TLS
1553 alert message to the client.
1554
1555 If an exception is raised from the *server_name_callback* function the TLS
1556 connection will terminate with a fatal TLS alert message
1557 :const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`.
1558
1559 This method will raise :exc:`NotImplementedError` if the OpenSSL library
1560 had OPENSSL_NO_TLSEXT defined when it was built.
1561
1562 .. versionadded:: 3.4
1563
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001564.. method:: SSLContext.load_dh_params(dhfile)
1565
1566 Load the key generation parameters for Diffie-Helman (DH) key exchange.
1567 Using DH key exchange improves forward secrecy at the expense of
1568 computational resources (both on the server and on the client).
1569 The *dhfile* parameter should be the path to a file containing DH
1570 parameters in PEM format.
1571
1572 This setting doesn't apply to client sockets. You can also use the
1573 :data:`OP_SINGLE_DH_USE` option to further improve security.
1574
1575 .. versionadded:: 3.3
1576
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001577.. method:: SSLContext.set_ecdh_curve(curve_name)
1578
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001579 Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH) key
1580 exchange. ECDH is significantly faster than regular DH while arguably
1581 as secure. The *curve_name* parameter should be a string describing
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001582 a well-known elliptic curve, for example ``prime256v1`` for a widely
1583 supported curve.
1584
1585 This setting doesn't apply to client sockets. You can also use the
1586 :data:`OP_SINGLE_ECDH_USE` option to further improve security.
1587
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +03001588 This method is not available if :data:`HAS_ECDH` is ``False``.
Antoine Pitrou501da612011-12-21 09:27:41 +01001589
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001590 .. versionadded:: 3.3
1591
1592 .. seealso::
Sanyam Khurana1b4587a2017-12-06 22:09:33 +05301593 `SSL/TLS & Perfect Forward Secrecy <https://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy>`_
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001594 Vincent Bernat.
1595
Antoine Pitroud5323212010-10-22 18:19:07 +00001596.. method:: SSLContext.wrap_socket(sock, server_side=False, \
1597 do_handshake_on_connect=True, suppress_ragged_eofs=True, \
Christian Heimes99a65702016-09-10 23:44:53 +02001598 server_hostname=None, session=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001599
Christian Heimes4df60f12017-09-15 20:26:05 +02001600 Wrap an existing Python socket *sock* and return an instance of
1601 :attr:`SSLContext.sslsocket_class` (default :class:`SSLSocket`).
1602 *sock* must be a :data:`~socket.SOCK_STREAM` socket; other socket
Antoine Pitrou3e86ba42013-12-28 17:26:33 +01001603 types are unsupported.
1604
1605 The returned SSL socket is tied to the context, its settings and
Antoine Pitrou152efa22010-05-16 18:19:27 +00001606 certificates. The parameters *server_side*, *do_handshake_on_connect*
1607 and *suppress_ragged_eofs* have the same meaning as in the top-level
1608 :func:`wrap_socket` function.
1609
Antoine Pitroud5323212010-10-22 18:19:07 +00001610 On client connections, the optional parameter *server_hostname* specifies
1611 the hostname of the service which we are connecting to. This allows a
1612 single server to host multiple SSL-based services with distinct certificates,
Benjamin Peterson7243b572014-11-23 17:04:34 -06001613 quite similarly to HTTP virtual hosts. Specifying *server_hostname* will
1614 raise a :exc:`ValueError` if *server_side* is true.
1615
Christian Heimes99a65702016-09-10 23:44:53 +02001616 *session*, see :attr:`~SSLSocket.session`.
1617
Benjamin Peterson7243b572014-11-23 17:04:34 -06001618 .. versionchanged:: 3.5
1619 Always allow a server_hostname to be passed, even if OpenSSL does not
1620 have SNI.
Antoine Pitroud5323212010-10-22 18:19:07 +00001621
Christian Heimes99a65702016-09-10 23:44:53 +02001622 .. versionchanged:: 3.6
1623 *session* argument was added.
1624
Christian Heimes4df60f12017-09-15 20:26:05 +02001625 .. versionchanged:: 3.7
1626 The method returns on instance of :attr:`SSLContext.sslsocket_class`
1627 instead of hard-coded :class:`SSLSocket`.
1628
1629.. attribute:: SSLContext.sslsocket_class
1630
1631 The return type of :meth:`SSLContext.wrap_sockets`, defaults to
1632 :class:`SSLSocket`. The attribute can be overridden on instance of class
1633 in order to return a custom subclass of :class:`SSLSocket`.
1634
1635 .. versionadded:: 3.7
1636
Victor Stinner805b2622014-10-10 12:49:08 +02001637.. method:: SSLContext.wrap_bio(incoming, outgoing, server_side=False, \
Christian Heimes99a65702016-09-10 23:44:53 +02001638 server_hostname=None, session=None)
Victor Stinner805b2622014-10-10 12:49:08 +02001639
Christian Heimes4df60f12017-09-15 20:26:05 +02001640 Wrap the BIO objects *incoming* and *outgoing* and return an instance of
1641 attr:`SSLContext.sslobject_class` (default :class:`SSLObject`). The SSL
1642 routines will read input data from the incoming BIO and write data to the
1643 outgoing BIO.
Victor Stinner805b2622014-10-10 12:49:08 +02001644
Christian Heimes99a65702016-09-10 23:44:53 +02001645 The *server_side*, *server_hostname* and *session* parameters have the
1646 same meaning as in :meth:`SSLContext.wrap_socket`.
1647
1648 .. versionchanged:: 3.6
1649 *session* argument was added.
Victor Stinner805b2622014-10-10 12:49:08 +02001650
Christian Heimes4df60f12017-09-15 20:26:05 +02001651 .. versionchanged:: 3.7
1652 The method returns on instance of :attr:`SSLContext.sslobject_class`
1653 instead of hard-coded :class:`SSLObject`.
1654
1655.. attribute:: SSLContext.sslobject_class
1656
1657 The return type of :meth:`SSLContext.wrap_bio`, defaults to
1658 :class:`SSLObject`. The attribute can be overridden on instance of class
1659 in order to return a custom subclass of :class:`SSLObject`.
1660
1661 .. versionadded:: 3.7
1662
Antoine Pitroub0182c82010-10-12 20:09:02 +00001663.. method:: SSLContext.session_stats()
1664
1665 Get statistics about the SSL sessions created or managed by this context.
Sanyam Khurana338cd832018-01-20 05:55:37 +05301666 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 +00001667 numeric values. For example, here is the total number of hits and misses
1668 in the session cache since the context was created::
1669
1670 >>> stats = context.session_stats()
1671 >>> stats['hits'], stats['misses']
1672 (0, 0)
1673
Christian Heimes1aa9a752013-12-02 02:41:19 +01001674.. attribute:: SSLContext.check_hostname
1675
Berker Peksag315e1042015-05-19 01:36:55 +03001676 Whether to match the peer cert's hostname with :func:`match_hostname` in
Christian Heimes1aa9a752013-12-02 02:41:19 +01001677 :meth:`SSLSocket.do_handshake`. The context's
1678 :attr:`~SSLContext.verify_mode` must be set to :data:`CERT_OPTIONAL` or
1679 :data:`CERT_REQUIRED`, and you must pass *server_hostname* to
Christian Heimese82c0342017-09-15 20:29:57 +02001680 :meth:`~SSLContext.wrap_socket` in order to match the hostname. Enabling
1681 hostname checking automatically sets :attr:`~SSLContext.verify_mode` from
1682 :data:`CERT_NONE` to :data:`CERT_REQUIRED`. It cannot be set back to
1683 :data:`CERT_NONE` as long as hostname checking is enabled.
Christian Heimes1aa9a752013-12-02 02:41:19 +01001684
1685 Example::
1686
1687 import socket, ssl
1688
1689 context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
1690 context.verify_mode = ssl.CERT_REQUIRED
1691 context.check_hostname = True
1692 context.load_default_certs()
1693
1694 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Berker Peksag38bf87c2014-07-17 05:00:36 +03001695 ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
1696 ssl_sock.connect(('www.verisign.com', 443))
Christian Heimes1aa9a752013-12-02 02:41:19 +01001697
1698 .. versionadded:: 3.4
1699
Christian Heimese82c0342017-09-15 20:29:57 +02001700 .. versionchanged:: 3.7
1701
1702 :attr:`~SSLContext.verify_mode` is now automatically changed
1703 to :data:`CERT_REQUIRED` when hostname checking is enabled and
1704 :attr:`~SSLContext.verify_mode` is :data:`CERT_NONE`. Previously
1705 the same operation would have failed with a :exc:`ValueError`.
1706
Christian Heimes1aa9a752013-12-02 02:41:19 +01001707 .. note::
1708
1709 This features requires OpenSSL 0.9.8f or newer.
1710
Antoine Pitroub5218772010-05-21 09:56:06 +00001711.. attribute:: SSLContext.options
1712
1713 An integer representing the set of SSL options enabled on this context.
1714 The default value is :data:`OP_ALL`, but you can specify other options
1715 such as :data:`OP_NO_SSLv2` by ORing them together.
1716
1717 .. note::
1718 With versions of OpenSSL older than 0.9.8m, it is only possible
1719 to set options, not to clear them. Attempting to clear an option
1720 (by resetting the corresponding bits) will raise a ``ValueError``.
1721
Christian Heimes3aeacad2016-09-10 00:19:35 +02001722 .. versionchanged:: 3.6
1723 :attr:`SSLContext.options` returns :class:`Options` flags:
1724
Marco Buttu7b2491a2017-04-13 16:17:59 +02001725 >>> ssl.create_default_context().options # doctest: +SKIP
Christian Heimes3aeacad2016-09-10 00:19:35 +02001726 <Options.OP_ALL|OP_NO_SSLv3|OP_NO_SSLv2|OP_NO_COMPRESSION: 2197947391>
1727
Antoine Pitrou152efa22010-05-16 18:19:27 +00001728.. attribute:: SSLContext.protocol
1729
1730 The protocol version chosen when constructing the context. This attribute
1731 is read-only.
1732
Christian Heimes22587792013-11-21 23:56:13 +01001733.. attribute:: SSLContext.verify_flags
1734
1735 The flags for certificate verification operations. You can set flags like
1736 :data:`VERIFY_CRL_CHECK_LEAF` by ORing them together. By default OpenSSL
1737 does neither require nor verify certificate revocation lists (CRLs).
Christian Heimes2427b502013-11-23 11:24:32 +01001738 Available only with openssl version 0.9.8+.
Christian Heimes22587792013-11-21 23:56:13 +01001739
1740 .. versionadded:: 3.4
1741
Christian Heimes3aeacad2016-09-10 00:19:35 +02001742 .. versionchanged:: 3.6
1743 :attr:`SSLContext.verify_flags` returns :class:`VerifyFlags` flags:
1744
Marco Buttu7b2491a2017-04-13 16:17:59 +02001745 >>> ssl.create_default_context().verify_flags # doctest: +SKIP
Christian Heimes3aeacad2016-09-10 00:19:35 +02001746 <VerifyFlags.VERIFY_X509_TRUSTED_FIRST: 32768>
1747
Antoine Pitrou152efa22010-05-16 18:19:27 +00001748.. attribute:: SSLContext.verify_mode
1749
1750 Whether to try to verify other peers' certificates and how to behave
1751 if verification fails. This attribute must be one of
1752 :data:`CERT_NONE`, :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`.
1753
Christian Heimes3aeacad2016-09-10 00:19:35 +02001754 .. versionchanged:: 3.6
1755 :attr:`SSLContext.verify_mode` returns :class:`VerifyMode` enum:
1756
1757 >>> ssl.create_default_context().verify_mode
1758 <VerifyMode.CERT_REQUIRED: 2>
Antoine Pitrou152efa22010-05-16 18:19:27 +00001759
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001760.. index:: single: certificates
1761
1762.. index:: single: X509 certificate
1763
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001764.. _ssl-certificates:
1765
Thomas Woutersed03b412007-08-28 21:37:11 +00001766Certificates
1767------------
1768
Georg Brandl7f01a132009-09-16 15:58:14 +00001769Certificates in general are part of a public-key / private-key system. In this
1770system, each *principal*, (which may be a machine, or a person, or an
1771organization) is assigned a unique two-part encryption key. One part of the key
1772is public, and is called the *public key*; the other part is kept secret, and is
1773called the *private key*. The two parts are related, in that if you encrypt a
1774message with one of the parts, you can decrypt it with the other part, and
1775**only** with the other part.
Thomas Woutersed03b412007-08-28 21:37:11 +00001776
Georg Brandl7f01a132009-09-16 15:58:14 +00001777A certificate contains information about two principals. It contains the name
1778of a *subject*, and the subject's public key. It also contains a statement by a
1779second principal, the *issuer*, that the subject is who he claims to be, and
1780that this is indeed the subject's public key. The issuer's statement is signed
1781with the issuer's private key, which only the issuer knows. However, anyone can
1782verify the issuer's statement by finding the issuer's public key, decrypting the
1783statement with it, and comparing it to the other information in the certificate.
1784The certificate also contains information about the time period over which it is
1785valid. This is expressed as two fields, called "notBefore" and "notAfter".
Thomas Woutersed03b412007-08-28 21:37:11 +00001786
Georg Brandl7f01a132009-09-16 15:58:14 +00001787In the Python use of certificates, a client or server can use a certificate to
1788prove who they are. The other side of a network connection can also be required
1789to produce a certificate, and that certificate can be validated to the
1790satisfaction of the client or server that requires such validation. The
1791connection attempt can be set to raise an exception if the validation fails.
1792Validation is done automatically, by the underlying OpenSSL framework; the
1793application need not concern itself with its mechanics. But the application
1794does usually need to provide sets of certificates to allow this process to take
1795place.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001796
Georg Brandl7f01a132009-09-16 15:58:14 +00001797Python uses files to contain certificates. They should be formatted as "PEM"
1798(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
1799and a footer line::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001800
1801 -----BEGIN CERTIFICATE-----
1802 ... (certificate in base64 PEM encoding) ...
1803 -----END CERTIFICATE-----
1804
Antoine Pitrou152efa22010-05-16 18:19:27 +00001805Certificate chains
1806^^^^^^^^^^^^^^^^^^
1807
Georg Brandl7f01a132009-09-16 15:58:14 +00001808The Python files which contain certificates can contain a sequence of
1809certificates, sometimes called a *certificate chain*. This chain should start
1810with the specific certificate for the principal who "is" the client or server,
1811and then the certificate for the issuer of that certificate, and then the
1812certificate for the issuer of *that* certificate, and so on up the chain till
1813you get to a certificate which is *self-signed*, that is, a certificate which
1814has the same subject and issuer, sometimes called a *root certificate*. The
1815certificates should just be concatenated together in the certificate file. For
1816example, suppose we had a three certificate chain, from our server certificate
1817to the certificate of the certification authority that signed our server
1818certificate, to the root certificate of the agency which issued the
1819certification authority's certificate::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001820
1821 -----BEGIN CERTIFICATE-----
1822 ... (certificate for your server)...
1823 -----END CERTIFICATE-----
1824 -----BEGIN CERTIFICATE-----
1825 ... (the certificate for the CA)...
1826 -----END CERTIFICATE-----
1827 -----BEGIN CERTIFICATE-----
1828 ... (the root certificate for the CA's issuer)...
1829 -----END CERTIFICATE-----
1830
Antoine Pitrou152efa22010-05-16 18:19:27 +00001831CA certificates
1832^^^^^^^^^^^^^^^
1833
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001834If you are going to require validation of the other side of the connection's
1835certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandl7f01a132009-09-16 15:58:14 +00001836chains for each issuer you are willing to trust. Again, this file just contains
1837these chains concatenated together. For validation, Python will use the first
Donald Stufft41374652014-03-24 19:26:03 -04001838chain it finds in the file which matches. The platform's certificates file can
1839be used by calling :meth:`SSLContext.load_default_certs`, this is done
1840automatically with :func:`.create_default_context`.
Thomas Woutersed03b412007-08-28 21:37:11 +00001841
Antoine Pitrou152efa22010-05-16 18:19:27 +00001842Combined key and certificate
1843^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1844
1845Often the private key is stored in the same file as the certificate; in this
1846case, only the ``certfile`` parameter to :meth:`SSLContext.load_cert_chain`
1847and :func:`wrap_socket` needs to be passed. If the private key is stored
1848with the certificate, it should come before the first certificate in
1849the certificate chain::
1850
1851 -----BEGIN RSA PRIVATE KEY-----
1852 ... (private key in base64 encoding) ...
1853 -----END RSA PRIVATE KEY-----
1854 -----BEGIN CERTIFICATE-----
1855 ... (certificate in base64 PEM encoding) ...
1856 -----END CERTIFICATE-----
1857
1858Self-signed certificates
1859^^^^^^^^^^^^^^^^^^^^^^^^
1860
Georg Brandl7f01a132009-09-16 15:58:14 +00001861If you are going to create a server that provides SSL-encrypted connection
1862services, you will need to acquire a certificate for that service. There are
1863many ways of acquiring appropriate certificates, such as buying one from a
1864certification authority. Another common practice is to generate a self-signed
1865certificate. The simplest way to do this is with the OpenSSL package, using
1866something like the following::
Thomas Woutersed03b412007-08-28 21:37:11 +00001867
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001868 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
1869 Generating a 1024 bit RSA private key
1870 .......++++++
1871 .............................++++++
1872 writing new private key to 'cert.pem'
1873 -----
1874 You are about to be asked to enter information that will be incorporated
1875 into your certificate request.
1876 What you are about to enter is what is called a Distinguished Name or a DN.
1877 There are quite a few fields but you can leave some blank
1878 For some fields there will be a default value,
1879 If you enter '.', the field will be left blank.
1880 -----
1881 Country Name (2 letter code) [AU]:US
1882 State or Province Name (full name) [Some-State]:MyState
1883 Locality Name (eg, city) []:Some City
1884 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
1885 Organizational Unit Name (eg, section) []:My Group
1886 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
1887 Email Address []:ops@myserver.mygroup.myorganization.com
1888 %
Thomas Woutersed03b412007-08-28 21:37:11 +00001889
Georg Brandl7f01a132009-09-16 15:58:14 +00001890The disadvantage of a self-signed certificate is that it is its own root
1891certificate, and no one else will have it in their cache of known (and trusted)
1892root certificates.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001893
1894
Thomas Woutersed03b412007-08-28 21:37:11 +00001895Examples
1896--------
1897
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001898Testing for SSL support
1899^^^^^^^^^^^^^^^^^^^^^^^
1900
Georg Brandl7f01a132009-09-16 15:58:14 +00001901To test for the presence of SSL support in a Python installation, user code
1902should use the following idiom::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001903
1904 try:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001905 import ssl
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001906 except ImportError:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001907 pass
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001908 else:
Serhiy Storchakadba90392016-05-10 12:01:23 +03001909 ... # do something that requires SSL support
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001910
1911Client-side operation
1912^^^^^^^^^^^^^^^^^^^^^
1913
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001914This example creates a SSL context with the recommended security settings
1915for client sockets, including automatic certificate verification::
Thomas Woutersed03b412007-08-28 21:37:11 +00001916
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001917 >>> context = ssl.create_default_context()
Thomas Woutersed03b412007-08-28 21:37:11 +00001918
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001919If you prefer to tune security settings yourself, you might create
1920a context from scratch (but beware that you might not get the settings
1921right)::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001922
Christian Heimes598894f2016-09-05 23:19:05 +02001923 >>> context = ssl.SSLContext(ssl.PROTOCOL_TLS)
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001924 >>> context.verify_mode = ssl.CERT_REQUIRED
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001925 >>> context.check_hostname = True
Antoine Pitrou152efa22010-05-16 18:19:27 +00001926 >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
1927
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001928(this snippet assumes your operating system places a bundle of all CA
1929certificates in ``/etc/ssl/certs/ca-bundle.crt``; if not, you'll get an
1930error and have to adjust the location)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001931
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001932When you use the context to connect to a server, :const:`CERT_REQUIRED`
Antoine Pitrou152efa22010-05-16 18:19:27 +00001933validates the server certificate: it ensures that the server certificate
1934was signed with one of the CA certificates, and checks the signature for
1935correctness::
1936
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001937 >>> conn = context.wrap_socket(socket.socket(socket.AF_INET),
1938 ... server_hostname="www.python.org")
1939 >>> conn.connect(("www.python.org", 443))
Antoine Pitrou152efa22010-05-16 18:19:27 +00001940
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001941You may then fetch the certificate::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001942
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001943 >>> cert = conn.getpeercert()
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001944
1945Visual inspection shows that the certificate does identify the desired service
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001946(that is, the HTTPS host ``www.python.org``)::
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001947
1948 >>> pprint.pprint(cert)
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001949 {'OCSP': ('http://ocsp.digicert.com',),
1950 'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',),
1951 'crlDistributionPoints': ('http://crl3.digicert.com/sha2-ev-server-g1.crl',
1952 'http://crl4.digicert.com/sha2-ev-server-g1.crl'),
1953 'issuer': ((('countryName', 'US'),),
1954 (('organizationName', 'DigiCert Inc'),),
1955 (('organizationalUnitName', 'www.digicert.com'),),
1956 (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),)),
1957 'notAfter': 'Sep 9 12:00:00 2016 GMT',
1958 'notBefore': 'Sep 5 00:00:00 2014 GMT',
1959 'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26',
1960 'subject': ((('businessCategory', 'Private Organization'),),
1961 (('1.3.6.1.4.1.311.60.2.1.3', 'US'),),
1962 (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),),
1963 (('serialNumber', '3359300'),),
1964 (('streetAddress', '16 Allen Rd'),),
1965 (('postalCode', '03894-4801'),),
1966 (('countryName', 'US'),),
1967 (('stateOrProvinceName', 'NH'),),
1968 (('localityName', 'Wolfeboro,'),),
1969 (('organizationName', 'Python Software Foundation'),),
1970 (('commonName', 'www.python.org'),)),
1971 'subjectAltName': (('DNS', 'www.python.org'),
1972 ('DNS', 'python.org'),
1973 ('DNS', 'pypi.python.org'),
1974 ('DNS', 'docs.python.org'),
1975 ('DNS', 'testpypi.python.org'),
1976 ('DNS', 'bugs.python.org'),
1977 ('DNS', 'wiki.python.org'),
1978 ('DNS', 'hg.python.org'),
1979 ('DNS', 'mail.python.org'),
1980 ('DNS', 'packaging.python.org'),
1981 ('DNS', 'pythonhosted.org'),
1982 ('DNS', 'www.pythonhosted.org'),
1983 ('DNS', 'test.pythonhosted.org'),
1984 ('DNS', 'us.pycon.org'),
1985 ('DNS', 'id.python.org')),
Antoine Pitrou441ae042012-01-06 20:06:15 +01001986 'version': 3}
Antoine Pitrou152efa22010-05-16 18:19:27 +00001987
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001988Now the SSL channel is established and the certificate verified, you can
1989proceed to talk with the server::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001990
Antoine Pitroudab64262010-09-19 13:31:06 +00001991 >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n")
1992 >>> pprint.pprint(conn.recv(1024).split(b"\r\n"))
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001993 [b'HTTP/1.1 200 OK',
1994 b'Date: Sat, 18 Oct 2014 18:27:20 GMT',
1995 b'Server: nginx',
1996 b'Content-Type: text/html; charset=utf-8',
1997 b'X-Frame-Options: SAMEORIGIN',
1998 b'Content-Length: 45679',
1999 b'Accept-Ranges: bytes',
2000 b'Via: 1.1 varnish',
2001 b'Age: 2188',
2002 b'X-Served-By: cache-lcy1134-LCY',
2003 b'X-Cache: HIT',
2004 b'X-Cache-Hits: 11',
2005 b'Vary: Cookie',
2006 b'Strict-Transport-Security: max-age=63072000; includeSubDomains',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002007 b'Connection: close',
Antoine Pitrou152efa22010-05-16 18:19:27 +00002008 b'',
2009 b'']
2010
Antoine Pitrou152efa22010-05-16 18:19:27 +00002011See the discussion of :ref:`ssl-security` below.
2012
2013
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002014Server-side operation
2015^^^^^^^^^^^^^^^^^^^^^
2016
Antoine Pitrou152efa22010-05-16 18:19:27 +00002017For server operation, typically you'll need to have a server certificate, and
2018private key, each in a file. You'll first create a context holding the key
2019and the certificate, so that clients can check your authenticity. Then
2020you'll open a socket, bind it to a port, call :meth:`listen` on it, and start
2021waiting for clients to connect::
Thomas Woutersed03b412007-08-28 21:37:11 +00002022
2023 import socket, ssl
2024
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002025 context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
Antoine Pitrou152efa22010-05-16 18:19:27 +00002026 context.load_cert_chain(certfile="mycertfile", keyfile="mykeyfile")
2027
Thomas Woutersed03b412007-08-28 21:37:11 +00002028 bindsocket = socket.socket()
2029 bindsocket.bind(('myaddr.mydomain.com', 10023))
2030 bindsocket.listen(5)
2031
Antoine Pitrou152efa22010-05-16 18:19:27 +00002032When a client connects, you'll call :meth:`accept` on the socket to get the
2033new socket from the other end, and use the context's :meth:`SSLContext.wrap_socket`
2034method to create a server-side SSL socket for the connection::
Thomas Woutersed03b412007-08-28 21:37:11 +00002035
2036 while True:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002037 newsocket, fromaddr = bindsocket.accept()
2038 connstream = context.wrap_socket(newsocket, server_side=True)
2039 try:
2040 deal_with_client(connstream)
2041 finally:
Antoine Pitroub205d582011-01-02 22:09:27 +00002042 connstream.shutdown(socket.SHUT_RDWR)
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002043 connstream.close()
Thomas Woutersed03b412007-08-28 21:37:11 +00002044
Antoine Pitrou152efa22010-05-16 18:19:27 +00002045Then you'll read data from the ``connstream`` and do something with it till you
Georg Brandl7f01a132009-09-16 15:58:14 +00002046are finished with the client (or the client is finished with you)::
Thomas Woutersed03b412007-08-28 21:37:11 +00002047
2048 def deal_with_client(connstream):
Georg Brandl8a7e5da2011-01-02 19:07:51 +00002049 data = connstream.recv(1024)
2050 # empty data means the client is finished with us
2051 while data:
2052 if not do_something(connstream, data):
2053 # we'll assume do_something returns False
2054 # when we're finished with client
2055 break
2056 data = connstream.recv(1024)
2057 # finished with client
Thomas Woutersed03b412007-08-28 21:37:11 +00002058
Antoine Pitrou152efa22010-05-16 18:19:27 +00002059And go back to listening for new client connections (of course, a real server
2060would probably handle each client connection in a separate thread, or put
Victor Stinner29611452014-10-10 12:52:43 +02002061the sockets in :ref:`non-blocking mode <ssl-nonblocking>` and use an event loop).
Antoine Pitrou152efa22010-05-16 18:19:27 +00002062
2063
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002064.. _ssl-nonblocking:
2065
2066Notes on non-blocking sockets
2067-----------------------------
2068
Antoine Pitroub4bebda2014-04-29 10:03:28 +02002069SSL sockets behave slightly different than regular sockets in
2070non-blocking mode. When working with non-blocking sockets, there are
2071thus several things you need to be aware of:
2072
2073- Most :class:`SSLSocket` methods will raise either
2074 :exc:`SSLWantWriteError` or :exc:`SSLWantReadError` instead of
2075 :exc:`BlockingIOError` if an I/O operation would
2076 block. :exc:`SSLWantReadError` will be raised if a read operation on
2077 the underlying socket is necessary, and :exc:`SSLWantWriteError` for
2078 a write operation on the underlying socket. Note that attempts to
2079 *write* to an SSL socket may require *reading* from the underlying
2080 socket first, and attempts to *read* from the SSL socket may require
2081 a prior *write* to the underlying socket.
2082
2083 .. versionchanged:: 3.5
2084
2085 In earlier Python versions, the :meth:`!SSLSocket.send` method
2086 returned zero instead of raising :exc:`SSLWantWriteError` or
2087 :exc:`SSLWantReadError`.
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002088
2089- Calling :func:`~select.select` tells you that the OS-level socket can be
2090 read from (or written to), but it does not imply that there is sufficient
2091 data at the upper SSL layer. For example, only part of an SSL frame might
2092 have arrived. Therefore, you must be ready to handle :meth:`SSLSocket.recv`
2093 and :meth:`SSLSocket.send` failures, and retry after another call to
2094 :func:`~select.select`.
2095
Antoine Pitrou75e03382014-05-18 00:55:13 +02002096- Conversely, since the SSL layer has its own framing, a SSL socket may
2097 still have data available for reading without :func:`~select.select`
2098 being aware of it. Therefore, you should first call
2099 :meth:`SSLSocket.recv` to drain any potentially available data, and then
2100 only block on a :func:`~select.select` call if still necessary.
2101
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002102 (of course, similar provisions apply when using other primitives such as
Antoine Pitrou75e03382014-05-18 00:55:13 +02002103 :func:`~select.poll`, or those in the :mod:`selectors` module)
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002104
2105- The SSL handshake itself will be non-blocking: the
2106 :meth:`SSLSocket.do_handshake` method has to be retried until it returns
2107 successfully. Here is a synopsis using :func:`~select.select` to wait for
2108 the socket's readiness::
2109
2110 while True:
2111 try:
2112 sock.do_handshake()
2113 break
Antoine Pitrou873bf262011-10-27 23:59:03 +02002114 except ssl.SSLWantReadError:
2115 select.select([sock], [], [])
2116 except ssl.SSLWantWriteError:
2117 select.select([], [sock], [])
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002118
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002119.. seealso::
2120
Victor Stinner29611452014-10-10 12:52:43 +02002121 The :mod:`asyncio` module supports :ref:`non-blocking SSL sockets
2122 <ssl-nonblocking>` and provides a
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02002123 higher level API. It polls for events using the :mod:`selectors` module and
2124 handles :exc:`SSLWantWriteError`, :exc:`SSLWantReadError` and
2125 :exc:`BlockingIOError` exceptions. It runs the SSL handshake asynchronously
2126 as well.
2127
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02002128
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002129Memory BIO Support
2130------------------
2131
2132.. versionadded:: 3.5
2133
2134Ever since the SSL module was introduced in Python 2.6, the :class:`SSLSocket`
2135class has provided two related but distinct areas of functionality:
2136
2137- SSL protocol handling
2138- Network IO
2139
2140The network IO API is identical to that provided by :class:`socket.socket`,
2141from which :class:`SSLSocket` also inherits. This allows an SSL socket to be
2142used as a drop-in replacement for a regular socket, making it very easy to add
2143SSL support to an existing application.
2144
2145Combining SSL protocol handling and network IO usually works well, but there
2146are some cases where it doesn't. An example is async IO frameworks that want to
2147use a different IO multiplexing model than the "select/poll on a file
2148descriptor" (readiness based) model that is assumed by :class:`socket.socket`
2149and by the internal OpenSSL socket IO routines. This is mostly relevant for
2150platforms like Windows where this model is not efficient. For this purpose, a
2151reduced scope variant of :class:`SSLSocket` called :class:`SSLObject` is
2152provided.
2153
2154.. class:: SSLObject
2155
2156 A reduced-scope variant of :class:`SSLSocket` representing an SSL protocol
Victor Stinner2debf152014-10-10 13:04:08 +02002157 instance that does not contain any network IO methods. This class is
2158 typically used by framework authors that want to implement asynchronous IO
2159 for SSL through memory buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002160
Victor Stinner2debf152014-10-10 13:04:08 +02002161 This class implements an interface on top of a low-level SSL object as
2162 implemented by OpenSSL. This object captures the state of an SSL connection
2163 but does not provide any network IO itself. IO needs to be performed through
2164 separate "BIO" objects which are OpenSSL's IO abstraction layer.
2165
2166 An :class:`SSLObject` instance can be created using the
2167 :meth:`~SSLContext.wrap_bio` method. This method will create the
2168 :class:`SSLObject` instance and bind it to a pair of BIOs. The *incoming*
2169 BIO is used to pass data from Python to the SSL protocol instance, while the
2170 *outgoing* BIO is used to pass data the other way around.
2171
2172 The following methods are available:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002173
Victor Stinner805b2622014-10-10 12:49:08 +02002174 - :attr:`~SSLSocket.context`
2175 - :attr:`~SSLSocket.server_side`
2176 - :attr:`~SSLSocket.server_hostname`
Christian Heimes99a65702016-09-10 23:44:53 +02002177 - :attr:`~SSLSocket.session`
2178 - :attr:`~SSLSocket.session_reused`
Victor Stinner805b2622014-10-10 12:49:08 +02002179 - :meth:`~SSLSocket.read`
2180 - :meth:`~SSLSocket.write`
2181 - :meth:`~SSLSocket.getpeercert`
2182 - :meth:`~SSLSocket.selected_npn_protocol`
2183 - :meth:`~SSLSocket.cipher`
Benjamin Peterson4cb17812015-01-07 11:14:26 -06002184 - :meth:`~SSLSocket.shared_ciphers`
Victor Stinner805b2622014-10-10 12:49:08 +02002185 - :meth:`~SSLSocket.compression`
2186 - :meth:`~SSLSocket.pending`
2187 - :meth:`~SSLSocket.do_handshake`
2188 - :meth:`~SSLSocket.unwrap`
2189 - :meth:`~SSLSocket.get_channel_binding`
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002190
Victor Stinner2debf152014-10-10 13:04:08 +02002191 When compared to :class:`SSLSocket`, this object lacks the following
2192 features:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002193
Benjamin Petersonfdfca5f2017-06-11 00:24:38 -07002194 - Any form of network IO; ``recv()`` and ``send()`` read and write only to
2195 the underlying :class:`MemoryBIO` buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002196
Victor Stinner2debf152014-10-10 13:04:08 +02002197 - There is no *do_handshake_on_connect* machinery. You must always manually
2198 call :meth:`~SSLSocket.do_handshake` to start the handshake.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002199
Victor Stinner2debf152014-10-10 13:04:08 +02002200 - There is no handling of *suppress_ragged_eofs*. All end-of-file conditions
2201 that are in violation of the protocol are reported via the
2202 :exc:`SSLEOFError` exception.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002203
Victor Stinner2debf152014-10-10 13:04:08 +02002204 - The method :meth:`~SSLSocket.unwrap` call does not return anything,
2205 unlike for an SSL socket where it returns the underlying socket.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002206
Victor Stinner2debf152014-10-10 13:04:08 +02002207 - The *server_name_callback* callback passed to
2208 :meth:`SSLContext.set_servername_callback` will get an :class:`SSLObject`
2209 instance instead of a :class:`SSLSocket` instance as its first parameter.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002210
Victor Stinner2debf152014-10-10 13:04:08 +02002211 Some notes related to the use of :class:`SSLObject`:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002212
Victor Stinner2debf152014-10-10 13:04:08 +02002213 - All IO on an :class:`SSLObject` is :ref:`non-blocking <ssl-nonblocking>`.
2214 This means that for example :meth:`~SSLSocket.read` will raise an
2215 :exc:`SSLWantReadError` if it needs more data than the incoming BIO has
2216 available.
2217
2218 - There is no module-level ``wrap_bio()`` call like there is for
2219 :meth:`~SSLContext.wrap_socket`. An :class:`SSLObject` is always created
2220 via an :class:`SSLContext`.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002221
Victor Stinner805b2622014-10-10 12:49:08 +02002222An SSLObject communicates with the outside world using memory buffers. The
2223class :class:`MemoryBIO` provides a memory buffer that can be used for this
2224purpose. It wraps an OpenSSL memory BIO (Basic IO) object:
2225
2226.. class:: MemoryBIO
2227
2228 A memory buffer that can be used to pass data between Python and an SSL
2229 protocol instance.
2230
2231 .. attribute:: MemoryBIO.pending
2232
2233 Return the number of bytes currently in the memory buffer.
2234
2235 .. attribute:: MemoryBIO.eof
2236
2237 A boolean indicating whether the memory BIO is current at the end-of-file
2238 position.
2239
2240 .. method:: MemoryBIO.read(n=-1)
2241
2242 Read up to *n* bytes from the memory buffer. If *n* is not specified or
2243 negative, all bytes are returned.
2244
2245 .. method:: MemoryBIO.write(buf)
2246
2247 Write the bytes from *buf* to the memory BIO. The *buf* argument must be an
2248 object supporting the buffer protocol.
2249
2250 The return value is the number of bytes written, which is always equal to
2251 the length of *buf*.
2252
2253 .. method:: MemoryBIO.write_eof()
2254
2255 Write an EOF marker to the memory BIO. After this method has been called, it
2256 is illegal to call :meth:`~MemoryBIO.write`. The attribute :attr:`eof` will
2257 become true after all data currently in the buffer has been read.
2258
Antoine Pitroub1fdf472014-10-05 20:41:53 +02002259
Christian Heimes99a65702016-09-10 23:44:53 +02002260SSL session
2261-----------
2262
2263.. versionadded:: 3.6
2264
2265.. class:: SSLSession
2266
2267 Session object used by :attr:`~SSLSocket.session`.
2268
2269 .. attribute:: id
2270 .. attribute:: time
2271 .. attribute:: timeout
2272 .. attribute:: ticket_lifetime_hint
2273 .. attribute:: has_ticket
2274
2275
Antoine Pitrou152efa22010-05-16 18:19:27 +00002276.. _ssl-security:
2277
2278Security considerations
2279-----------------------
2280
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002281Best defaults
2282^^^^^^^^^^^^^
Antoine Pitrou152efa22010-05-16 18:19:27 +00002283
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002284For **client use**, if you don't have any special requirements for your
2285security policy, it is highly recommended that you use the
2286:func:`create_default_context` function to create your SSL context.
2287It will load the system's trusted CA certificates, enable certificate
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002288validation and hostname checking, and try to choose reasonably secure
2289protocol and cipher settings.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002290
2291For example, here is how you would use the :class:`smtplib.SMTP` class to
2292create a trusted, secure connection to a SMTP server::
2293
2294 >>> import ssl, smtplib
2295 >>> smtp = smtplib.SMTP("mail.python.org", port=587)
2296 >>> context = ssl.create_default_context()
2297 >>> smtp.starttls(context=context)
2298 (220, b'2.0.0 Ready to start TLS')
2299
2300If a client certificate is needed for the connection, it can be added with
2301:meth:`SSLContext.load_cert_chain`.
2302
2303By contrast, if you create the SSL context by calling the :class:`SSLContext`
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01002304constructor yourself, it will not have certificate validation nor hostname
2305checking enabled by default. If you do so, please read the paragraphs below
2306to achieve a good security level.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002307
2308Manual settings
2309^^^^^^^^^^^^^^^
2310
2311Verifying certificates
2312''''''''''''''''''''''
2313
Donald Stufft8b852f12014-05-20 12:58:38 -04002314When calling the :class:`SSLContext` constructor directly,
Antoine Pitrou152efa22010-05-16 18:19:27 +00002315:const:`CERT_NONE` is the default. Since it does not authenticate the other
2316peer, it can be insecure, especially in client mode where most of time you
2317would like to ensure the authenticity of the server you're talking to.
2318Therefore, when in client mode, it is highly recommended to use
2319:const:`CERT_REQUIRED`. However, it is in itself not sufficient; you also
Antoine Pitrou59fdd672010-10-08 10:37:08 +00002320have to check that the server certificate, which can be obtained by calling
2321:meth:`SSLSocket.getpeercert`, matches the desired service. For many
2322protocols and applications, the service can be identified by the hostname;
Christian Heimes1aa9a752013-12-02 02:41:19 +01002323in this case, the :func:`match_hostname` function can be used. This common
2324check is automatically performed when :attr:`SSLContext.check_hostname` is
2325enabled.
Antoine Pitrou152efa22010-05-16 18:19:27 +00002326
2327In server mode, if you want to authenticate your clients using the SSL layer
2328(rather than using a higher-level authentication mechanism), you'll also have
2329to specify :const:`CERT_REQUIRED` and similarly check the client certificate.
2330
2331 .. note::
2332
2333 In client mode, :const:`CERT_OPTIONAL` and :const:`CERT_REQUIRED` are
2334 equivalent unless anonymous ciphers are enabled (they are disabled
2335 by default).
Thomas Woutersed03b412007-08-28 21:37:11 +00002336
Antoine Pitroub5218772010-05-21 09:56:06 +00002337Protocol versions
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002338'''''''''''''''''
Antoine Pitroub5218772010-05-21 09:56:06 +00002339
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002340SSL versions 2 and 3 are considered insecure and are therefore dangerous to
2341use. If you want maximum compatibility between clients and servers, it is
Christian Heimes5fe668c2016-09-12 00:01:11 +02002342recommended to use :const:`PROTOCOL_TLS_CLIENT` or
2343:const:`PROTOCOL_TLS_SERVER` as the protocol version. SSLv2 and SSLv3 are
2344disabled by default.
Antoine Pitroub5218772010-05-21 09:56:06 +00002345
Marco Buttu7b2491a2017-04-13 16:17:59 +02002346::
2347
Christian Heimesc4d2e502016-09-12 01:14:35 +02002348 >>> client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
2349 >>> client_context.options |= ssl.OP_NO_TLSv1
2350 >>> client_context.options |= ssl.OP_NO_TLSv1_1
Christian Heimes5fe668c2016-09-12 00:01:11 +02002351
Antoine Pitroub5218772010-05-21 09:56:06 +00002352
Christian Heimes598894f2016-09-05 23:19:05 +02002353The SSL context created above will only allow TLSv1.2 and later (if
Christian Heimes5fe668c2016-09-12 00:01:11 +02002354supported by your system) connections to a server. :const:`PROTOCOL_TLS_CLIENT`
2355implies certificate validation and hostname checks by default. You have to
2356load certificates into the context.
2357
Antoine Pitroub5218772010-05-21 09:56:06 +00002358
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002359Cipher selection
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002360''''''''''''''''
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002361
2362If you have advanced security requirements, fine-tuning of the ciphers
2363enabled when negotiating a SSL session is possible through the
2364:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
2365ssl module disables certain weak ciphers by default, but you may want
Donald Stufft79ccaa22014-03-21 21:33:34 -04002366to further restrict the cipher choice. Be sure to read OpenSSL's documentation
Sanyam Khurana338cd832018-01-20 05:55:37 +05302367about the `cipher list format <https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-LIST-FORMAT>`_.
Christian Heimes5fe668c2016-09-12 00:01:11 +02002368If you want to check which ciphers are enabled by a given cipher list, use
2369:meth:`SSLContext.get_ciphers` or the ``openssl ciphers`` command on your
2370system.
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002371
Antoine Pitrou9eefe912013-11-17 15:35:33 +01002372Multi-processing
2373^^^^^^^^^^^^^^^^
2374
2375If using this module as part of a multi-processed application (using,
2376for example the :mod:`multiprocessing` or :mod:`concurrent.futures` modules),
2377be aware that OpenSSL's internal random number generator does not properly
2378handle forked processes. Applications must change the PRNG state of the
2379parent process if they use any SSL feature with :func:`os.fork`. Any
2380successful call of :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or
2381:func:`~ssl.RAND_pseudo_bytes` is sufficient.
2382
Georg Brandl48310cd2009-01-03 21:18:54 +00002383
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002384.. seealso::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002385
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002386 Class :class:`socket.socket`
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002387 Documentation of underlying :mod:`socket` class
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002388
Georg Brandl5d941342016-02-26 19:37:12 +01002389 `SSL/TLS Strong Encryption: An Introduction <https://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002390 Intro from the Apache webserver documentation
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002391
Georg Brandl5d941342016-02-26 19:37:12 +01002392 `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 +00002393 Steve Kent
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002394
Sanyam Khurana338cd832018-01-20 05:55:37 +05302395 `RFC 4086: Randomness Requirements for Security <https://datatracker.ietf.org/doc/rfc4086/>`_
Chandan Kumar63c2c8a2017-06-09 15:13:58 +05302396 Donald E., Jeffrey I. Schiller
Thomas Wouters89d996e2007-09-08 17:39:28 +00002397
Sanyam Khurana338cd832018-01-20 05:55:37 +05302398 `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 +05302399 D. Cooper
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002400
Georg Brandl5d941342016-02-26 19:37:12 +01002401 `RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 <https://tools.ietf.org/html/rfc5246>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002402 T. Dierks et. al.
2403
Georg Brandl5d941342016-02-26 19:37:12 +01002404 `RFC 6066: Transport Layer Security (TLS) Extensions <https://tools.ietf.org/html/rfc6066>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002405 D. Eastlake
2406
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002407 `IANA TLS: Transport Layer Security (TLS) Parameters <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002408 IANA
Christian Heimesad0ffa02017-09-06 16:19:56 -07002409
2410 `RFC 7525: Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) <https://tools.ietf.org/html/rfc7525>`_
2411 IETF
2412
2413 `Mozilla's Server Side TLS recommendations <https://wiki.mozilla.org/Security/Server_Side_TLS>`_
2414 Mozilla