blob: 5792d0d407ba224bc4b42c78af613630f341ff51 [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
52
Thomas Wouters1b7f8912007-09-19 03:06:30 +000053Functions, Constants, and Exceptions
54------------------------------------
55
56.. exception:: SSLError
57
Antoine Pitrou59fdd672010-10-08 10:37:08 +000058 Raised to signal an error from the underlying SSL implementation
59 (currently provided by the OpenSSL library). This signifies some
60 problem in the higher-level encryption and authentication layer that's
61 superimposed on the underlying network connection. This error
Antoine Pitrou5574c302011-10-12 17:53:43 +020062 is a subtype of :exc:`OSError`. The error code and message of
63 :exc:`SSLError` instances are provided by the OpenSSL library.
64
65 .. versionchanged:: 3.3
66 :exc:`SSLError` used to be a subtype of :exc:`socket.error`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +000067
Antoine Pitrou3b36fb12012-06-22 21:11:52 +020068 .. attribute:: library
69
70 A string mnemonic designating the OpenSSL submodule in which the error
71 occurred, such as ``SSL``, ``PEM`` or ``X509``. The range of possible
72 values depends on the OpenSSL version.
73
74 .. versionadded:: 3.3
75
76 .. attribute:: reason
77
78 A string mnemonic designating the reason this error occurred, for
79 example ``CERTIFICATE_VERIFY_FAILED``. The range of possible
80 values depends on the OpenSSL version.
81
82 .. versionadded:: 3.3
83
Antoine Pitrou41032a62011-10-27 23:56:55 +020084.. exception:: SSLZeroReturnError
85
86 A subclass of :exc:`SSLError` raised when trying to read or write and
87 the SSL connection has been closed cleanly. Note that this doesn't
88 mean that the underlying transport (read TCP) has been closed.
89
90 .. versionadded:: 3.3
91
92.. exception:: SSLWantReadError
93
94 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
95 <ssl-nonblocking>` when trying to read or write data, but more data needs
96 to be received on the underlying TCP transport before the request can be
97 fulfilled.
98
99 .. versionadded:: 3.3
100
101.. exception:: SSLWantWriteError
102
103 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
104 <ssl-nonblocking>` when trying to read or write data, but more data needs
105 to be sent on the underlying TCP transport before the request can be
106 fulfilled.
107
108 .. versionadded:: 3.3
109
110.. exception:: SSLSyscallError
111
112 A subclass of :exc:`SSLError` raised when a system error was encountered
113 while trying to fulfill an operation on a SSL socket. Unfortunately,
114 there is no easy way to inspect the original errno number.
115
116 .. versionadded:: 3.3
117
118.. exception:: SSLEOFError
119
120 A subclass of :exc:`SSLError` raised when the SSL connection has been
Antoine Pitrouf3dc2d72011-10-28 00:01:03 +0200121 terminated abruptly. Generally, you shouldn't try to reuse the underlying
Antoine Pitrou41032a62011-10-27 23:56:55 +0200122 transport when this error is encountered.
123
124 .. versionadded:: 3.3
125
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000126.. exception:: CertificateError
127
128 Raised to signal an error with a certificate (such as mismatching
129 hostname). Certificate errors detected by OpenSSL, though, raise
130 an :exc:`SSLError`.
131
132
133Socket creation
134^^^^^^^^^^^^^^^
135
136The following function allows for standalone socket creation. Starting from
137Python 3.2, it can be more flexible to use :meth:`SSLContext.wrap_socket`
138instead.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000139
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000140.. 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 +0000141
Georg Brandl7f01a132009-09-16 15:58:14 +0000142 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance
143 of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps
Antoine Pitrou3e86ba42013-12-28 17:26:33 +0100144 the underlying socket in an SSL context. ``sock`` must be a
145 :data:`~socket.SOCK_STREAM` socket; other socket types are unsupported.
146
147 For client-side sockets, the context construction is lazy; if the
148 underlying socket isn't connected yet, the context construction will be
149 performed after :meth:`connect` is called on the socket. For
150 server-side sockets, if the socket has no remote peer, it is assumed
151 to be a listening socket, and the server-side SSL wrapping is
152 automatically performed on client connections accepted via the
153 :meth:`accept` method. :func:`wrap_socket` may raise :exc:`SSLError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000154
Georg Brandl7f01a132009-09-16 15:58:14 +0000155 The ``keyfile`` and ``certfile`` parameters specify optional files which
156 contain a certificate to be used to identify the local side of the
157 connection. See the discussion of :ref:`ssl-certificates` for more
158 information on how the certificate is stored in the ``certfile``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000159
Georg Brandl7f01a132009-09-16 15:58:14 +0000160 The parameter ``server_side`` is a boolean which identifies whether
161 server-side or client-side behavior is desired from this socket.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000162
Georg Brandl7f01a132009-09-16 15:58:14 +0000163 The parameter ``cert_reqs`` specifies whether a certificate is required from
164 the other side of the connection, and whether it will be validated if
165 provided. It must be one of the three values :const:`CERT_NONE`
166 (certificates ignored), :const:`CERT_OPTIONAL` (not required, but validated
167 if provided), or :const:`CERT_REQUIRED` (required and validated). If the
168 value of this parameter is not :const:`CERT_NONE`, then the ``ca_certs``
169 parameter must point to a file of CA certificates.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000170
Georg Brandl7f01a132009-09-16 15:58:14 +0000171 The ``ca_certs`` file contains a set of concatenated "certification
172 authority" certificates, which are used to validate certificates passed from
173 the other end of the connection. See the discussion of
174 :ref:`ssl-certificates` for more information about how to arrange the
175 certificates in this file.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000176
Georg Brandl7f01a132009-09-16 15:58:14 +0000177 The parameter ``ssl_version`` specifies which version of the SSL protocol to
178 use. Typically, the server chooses a particular protocol version, and the
179 client must adapt to the server's choice. Most of the versions are not
Antoine Pitrou84a2edc2012-01-09 21:35:11 +0100180 interoperable with the other versions. If not specified, the default is
181 :data:`PROTOCOL_SSLv23`; it provides the most compatibility with other
Georg Brandl7f01a132009-09-16 15:58:14 +0000182 versions.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000183
Georg Brandl7f01a132009-09-16 15:58:14 +0000184 Here's a table showing which versions in a client (down the side) can connect
185 to which versions in a server (along the top):
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000186
187 .. table::
188
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100189 ======================== ========= ========= ========== ========= =========== ===========
190 *client* / **server** **SSLv2** **SSLv3** **SSLv23** **TLSv1** **TLSv1.1** **TLSv1.2**
191 ------------------------ --------- --------- ---------- --------- ----------- -----------
192 *SSLv2* yes no yes no no no
193 *SSLv3* no yes yes no no no
Antoine Pitrou2b207ba2014-12-03 20:00:56 +0100194 *SSLv23* no yes yes yes yes yes
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100195 *TLSv1* no no yes yes no no
196 *TLSv1.1* no no yes no yes no
197 *TLSv1.2* no no yes no no yes
198 ======================== ========= ========= ========== ========= =========== ===========
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000199
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000200 .. note::
201
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000202 Which connections succeed will vary depending on the version of
Antoine Pitrou2b207ba2014-12-03 20:00:56 +0100203 OpenSSL. For example, before OpenSSL 1.0.0, an SSLv23 client
204 would always attempt SSLv2 connections.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000205
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000206 The *ciphers* parameter sets the available ciphers for this SSL object.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000207 It should be a string in the `OpenSSL cipher list format
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300208 <https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT>`_.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000209
Bill Janssen48dc27c2007-12-05 03:38:10 +0000210 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
211 handshake automatically after doing a :meth:`socket.connect`, or whether the
Georg Brandl7f01a132009-09-16 15:58:14 +0000212 application program will call it explicitly, by invoking the
213 :meth:`SSLSocket.do_handshake` method. Calling
214 :meth:`SSLSocket.do_handshake` explicitly gives the program control over the
215 blocking behavior of the socket I/O involved in the handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000216
Georg Brandl7f01a132009-09-16 15:58:14 +0000217 The parameter ``suppress_ragged_eofs`` specifies how the
Antoine Pitroudab64262010-09-19 13:31:06 +0000218 :meth:`SSLSocket.recv` method should signal unexpected EOF from the other end
Georg Brandl7f01a132009-09-16 15:58:14 +0000219 of the connection. If specified as :const:`True` (the default), it returns a
Antoine Pitroudab64262010-09-19 13:31:06 +0000220 normal EOF (an empty bytes object) in response to unexpected EOF errors
221 raised from the underlying socket; if :const:`False`, it will raise the
222 exceptions back to the caller.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000223
Ezio Melotti4d5195b2010-04-20 10:57:44 +0000224 .. versionchanged:: 3.2
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000225 New optional argument *ciphers*.
226
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100227
228Context creation
229^^^^^^^^^^^^^^^^
230
231A convenience function helps create :class:`SSLContext` objects for common
232purposes.
233
234.. function:: create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, capath=None, cadata=None)
235
236 Return a new :class:`SSLContext` object with default settings for
237 the given *purpose*. The settings are chosen by the :mod:`ssl` module,
238 and usually represent a higher security level than when calling the
239 :class:`SSLContext` constructor directly.
240
241 *cafile*, *capath*, *cadata* represent optional CA certificates to
242 trust for certificate verification, as in
243 :meth:`SSLContext.load_verify_locations`. If all three are
244 :const:`None`, this function can choose to trust the system's default
245 CA certificates instead.
246
Benjamin Peterson59c4eb72015-03-16 12:43:38 -0500247 The settings are: :data:`PROTOCOL_SSLv23`, :data:`OP_NO_SSLv2`, and
248 :data:`OP_NO_SSLv3` with high encryption cipher suites without RC4 and
Donald Stufft6a2ba942014-03-23 19:05:28 -0400249 without unauthenticated cipher suites. Passing :data:`~Purpose.SERVER_AUTH`
250 as *purpose* sets :data:`~SSLContext.verify_mode` to :data:`CERT_REQUIRED`
251 and either loads CA certificates (when at least one of *cafile*, *capath* or
252 *cadata* is given) or uses :meth:`SSLContext.load_default_certs` to load
253 default CA certificates.
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100254
255 .. note::
256 The protocol, options, cipher and other settings may change to more
257 restrictive values anytime without prior deprecation. The values
258 represent a fair balance between compatibility and security.
259
260 If your application needs specific settings, you should create a
261 :class:`SSLContext` and apply the settings yourself.
262
Donald Stufft6a2ba942014-03-23 19:05:28 -0400263 .. note::
264 If you find that when certain older clients or servers attempt to connect
Benjamin Peterson6f362fa2015-04-08 11:11:00 -0400265 with a :class:`SSLContext` created by this function that they get an error
266 stating "Protocol or cipher suite mismatch", it may be that they only
267 support SSL3.0 which this function excludes using the
268 :data:`OP_NO_SSLv3`. SSL3.0 is widely considered to be `completely broken
269 <https://en.wikipedia.org/wiki/POODLE>`_. If you still wish to continue to
270 use this function but still allow SSL 3.0 connections you can re-enable
271 them using::
Donald Stufft6a2ba942014-03-23 19:05:28 -0400272
273 ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
274 ctx.options &= ~ssl.OP_NO_SSLv3
275
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100276 .. versionadded:: 3.4
277
Benjamin Peterson59c4eb72015-03-16 12:43:38 -0500278 .. versionchanged:: 3.4.4
279
280 RC4 was dropped from the default cipher string.
281
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100282
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000283Random generation
284^^^^^^^^^^^^^^^^^
285
Victor Stinner99c8b162011-05-24 12:05:19 +0200286.. function:: RAND_bytes(num)
287
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400288 Return *num* cryptographically strong pseudo-random bytes. Raises an
Victor Stinnera6752062011-05-25 11:27:40 +0200289 :class:`SSLError` if the PRNG has not been seeded with enough data or if the
290 operation is not supported by the current RAND method. :func:`RAND_status`
291 can be used to check the status of the PRNG and :func:`RAND_add` can be used
292 to seed the PRNG.
Victor Stinner99c8b162011-05-24 12:05:19 +0200293
Berker Peksageb7a97c2015-04-10 16:19:13 +0300294 For almost all applications :func:`os.urandom` is preferable.
295
Victor Stinner19fb53c2011-05-24 21:32:40 +0200296 Read the Wikipedia article, `Cryptographically secure pseudorandom number
Victor Stinnera6752062011-05-25 11:27:40 +0200297 generator (CSPRNG)
Georg Brandl5d941342016-02-26 19:37:12 +0100298 <https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator>`_,
Victor Stinner19fb53c2011-05-24 21:32:40 +0200299 to get the requirements of a cryptographically generator.
300
Victor Stinner99c8b162011-05-24 12:05:19 +0200301 .. versionadded:: 3.3
302
303.. function:: RAND_pseudo_bytes(num)
304
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400305 Return (bytes, is_cryptographic): bytes are *num* pseudo-random bytes,
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200306 is_cryptographic is ``True`` if the bytes generated are cryptographically
Victor Stinnera6752062011-05-25 11:27:40 +0200307 strong. Raises an :class:`SSLError` if the operation is not supported by the
308 current RAND method.
Victor Stinner99c8b162011-05-24 12:05:19 +0200309
Victor Stinner19fb53c2011-05-24 21:32:40 +0200310 Generated pseudo-random byte sequences will be unique if they are of
311 sufficient length, but are not necessarily unpredictable. They can be used
312 for non-cryptographic purposes and for certain purposes in cryptographic
313 protocols, but usually not for key generation etc.
314
Berker Peksageb7a97c2015-04-10 16:19:13 +0300315 For almost all applications :func:`os.urandom` is preferable.
316
Victor Stinner99c8b162011-05-24 12:05:19 +0200317 .. versionadded:: 3.3
318
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000319.. function:: RAND_status()
320
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400321 Return ``True`` if the SSL pseudo-random number generator has been seeded
322 with 'enough' randomness, and ``False`` otherwise. You can use
323 :func:`ssl.RAND_egd` and :func:`ssl.RAND_add` to increase the randomness of
324 the pseudo-random number generator.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000325
326.. function:: RAND_egd(path)
327
Victor Stinner99c8b162011-05-24 12:05:19 +0200328 If you are running an entropy-gathering daemon (EGD) somewhere, and *path*
Georg Brandl7f01a132009-09-16 15:58:14 +0000329 is the pathname of a socket connection open to it, this will read 256 bytes
330 of randomness from the socket, and add it to the SSL pseudo-random number
331 generator to increase the security of generated secret keys. This is
332 typically only necessary on systems without better sources of randomness.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000333
Georg Brandl7f01a132009-09-16 15:58:14 +0000334 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources
335 of entropy-gathering daemons.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000336
Victor Stinner3ce67a92015-01-06 13:53:09 +0100337 Availability: not available with LibreSSL.
338
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000339.. function:: RAND_add(bytes, entropy)
340
Benjamin Peterson1c69c3e2015-04-11 07:42:42 -0400341 Mix the given *bytes* into the SSL pseudo-random number generator. The
Victor Stinner99c8b162011-05-24 12:05:19 +0200342 parameter *entropy* (a float) is a lower bound on the entropy contained in
Georg Brandl7f01a132009-09-16 15:58:14 +0000343 string (so you can always use :const:`0.0`). See :rfc:`1750` for more
344 information on sources of entropy.
Thomas Woutersed03b412007-08-28 21:37:11 +0000345
Georg Brandl8c16cb92016-02-25 20:17:45 +0100346 .. versionchanged:: 3.5
Serhiy Storchaka8490f5a2015-03-20 09:00:36 +0200347 Writable :term:`bytes-like object` is now accepted.
348
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000349Certificate handling
350^^^^^^^^^^^^^^^^^^^^
351
352.. function:: match_hostname(cert, hostname)
353
354 Verify that *cert* (in decoded format as returned by
355 :meth:`SSLSocket.getpeercert`) matches the given *hostname*. The rules
356 applied are those for checking the identity of HTTPS servers as outlined
Antoine Pitrouc481bfb2015-02-15 18:12:20 +0100357 in :rfc:`2818` and :rfc:`6125`. In addition to HTTPS, this function
358 should be suitable for checking the identity of servers in various
359 SSL-based protocols such as FTPS, IMAPS, POPS and others.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000360
361 :exc:`CertificateError` is raised on failure. On success, the function
362 returns nothing::
363
364 >>> cert = {'subject': ((('commonName', 'example.com'),),)}
365 >>> ssl.match_hostname(cert, "example.com")
366 >>> ssl.match_hostname(cert, "example.org")
367 Traceback (most recent call last):
368 File "<stdin>", line 1, in <module>
369 File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
370 ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
371
372 .. versionadded:: 3.2
373
Georg Brandl72c98d32013-10-27 07:16:53 +0100374 .. versionchanged:: 3.3.3
375 The function now follows :rfc:`6125`, section 6.4.3 and does neither
376 match multiple wildcards (e.g. ``*.*.com`` or ``*a*.example.org``) nor
377 a wildcard inside an internationalized domain names (IDN) fragment.
378 IDN A-labels such as ``www*.xn--pthon-kva.org`` are still supported,
379 but ``x*.python.org`` no longer matches ``xn--tda.python.org``.
380
Antoine Pitrouc481bfb2015-02-15 18:12:20 +0100381 .. versionchanged:: 3.5
382 Matching of IP addresses, when present in the subjectAltName field
383 of the certificate, is now supported.
384
Antoine Pitrouc695c952014-04-28 20:57:36 +0200385.. function:: cert_time_to_seconds(cert_time)
Thomas Woutersed03b412007-08-28 21:37:11 +0000386
Antoine Pitrouc695c952014-04-28 20:57:36 +0200387 Return the time in seconds since the Epoch, given the ``cert_time``
388 string representing the "notBefore" or "notAfter" date from a
389 certificate in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C
390 locale).
Thomas Woutersed03b412007-08-28 21:37:11 +0000391
Antoine Pitrouc695c952014-04-28 20:57:36 +0200392 Here's an example:
Thomas Woutersed03b412007-08-28 21:37:11 +0000393
Antoine Pitrouc695c952014-04-28 20:57:36 +0200394 .. doctest:: newcontext
395
396 >>> import ssl
397 >>> timestamp = ssl.cert_time_to_seconds("Jan 5 09:34:43 2018 GMT")
398 >>> timestamp
399 1515144883
400 >>> from datetime import datetime
401 >>> print(datetime.utcfromtimestamp(timestamp))
402 2018-01-05 09:34:43
403
404 "notBefore" or "notAfter" dates must use GMT (:rfc:`5280`).
405
406 .. versionchanged:: 3.5
407 Interpret the input time as a time in UTC as specified by 'GMT'
408 timezone in the input string. Local timezone was used
409 previously. Return an integer (no fractions of a second in the
410 input format)
Thomas Woutersed03b412007-08-28 21:37:11 +0000411
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200412.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None)
Thomas Woutersed03b412007-08-28 21:37:11 +0000413
Georg Brandl7f01a132009-09-16 15:58:14 +0000414 Given the address ``addr`` of an SSL-protected server, as a (*hostname*,
415 *port-number*) pair, fetches the server's certificate, and returns it as a
416 PEM-encoded string. If ``ssl_version`` is specified, uses that version of
417 the SSL protocol to attempt to connect to the server. If ``ca_certs`` is
418 specified, it should be a file containing a list of root certificates, the
419 same format as used for the same parameter in :func:`wrap_socket`. The call
420 will attempt to validate the server certificate against that set of root
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000421 certificates, and will fail if the validation attempt fails.
422
Antoine Pitrou15399c32011-04-28 19:23:55 +0200423 .. versionchanged:: 3.3
424 This function is now IPv6-compatible.
425
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200426 .. versionchanged:: 3.5
427 The default *ssl_version* is changed from :data:`PROTOCOL_SSLv3` to
428 :data:`PROTOCOL_SSLv23` for maximum compatibility with modern servers.
429
Georg Brandl7f01a132009-09-16 15:58:14 +0000430.. function:: DER_cert_to_PEM_cert(DER_cert_bytes)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000431
432 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
433 string version of the same certificate.
434
Georg Brandl7f01a132009-09-16 15:58:14 +0000435.. function:: PEM_cert_to_DER_cert(PEM_cert_string)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000436
Georg Brandl7f01a132009-09-16 15:58:14 +0000437 Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of
438 bytes for that same certificate.
Thomas Woutersed03b412007-08-28 21:37:11 +0000439
Christian Heimes6d7ad132013-06-09 18:02:55 +0200440.. function:: get_default_verify_paths()
441
442 Returns a named tuple with paths to OpenSSL's default cafile and capath.
443 The paths are the same as used by
444 :meth:`SSLContext.set_default_verify_paths`. The return value is a
445 :term:`named tuple` ``DefaultVerifyPaths``:
446
447 * :attr:`cafile` - resolved path to cafile or None if the file doesn't exist,
448 * :attr:`capath` - resolved path to capath or None if the directory doesn't exist,
449 * :attr:`openssl_cafile_env` - OpenSSL's environment key that points to a cafile,
450 * :attr:`openssl_cafile` - hard coded path to a cafile,
451 * :attr:`openssl_capath_env` - OpenSSL's environment key that points to a capath,
452 * :attr:`openssl_capath` - hard coded path to a capath directory
453
454 .. versionadded:: 3.4
455
Christian Heimes44109d72013-11-22 01:51:30 +0100456.. function:: enum_certificates(store_name)
Christian Heimes46bebee2013-06-09 19:03:31 +0200457
458 Retrieve certificates from Windows' system cert store. *store_name* may be
459 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
Christian Heimes44109d72013-11-22 01:51:30 +0100460 stores, too.
Christian Heimes46bebee2013-06-09 19:03:31 +0200461
Christian Heimes44109d72013-11-22 01:51:30 +0100462 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
463 The encoding_type specifies the encoding of cert_bytes. It is either
464 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
465 PKCS#7 ASN.1 data. Trust specifies the purpose of the certificate as a set
466 of OIDS or exactly ``True`` if the certificate is trustworthy for all
467 purposes.
468
469 Example::
470
471 >>> ssl.enum_certificates("CA")
472 [(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
473 (b'data...', 'x509_asn', True)]
Christian Heimes46bebee2013-06-09 19:03:31 +0200474
475 Availability: Windows.
476
477 .. versionadded:: 3.4
Christian Heimes6d7ad132013-06-09 18:02:55 +0200478
Christian Heimes44109d72013-11-22 01:51:30 +0100479.. function:: enum_crls(store_name)
480
481 Retrieve CRLs from Windows' system cert store. *store_name* may be
482 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
483 stores, too.
484
485 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
486 The encoding_type specifies the encoding of cert_bytes. It is either
487 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
488 PKCS#7 ASN.1 data.
489
490 Availability: Windows.
491
492 .. versionadded:: 3.4
493
494
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000495Constants
496^^^^^^^^^
497
Thomas Woutersed03b412007-08-28 21:37:11 +0000498.. data:: CERT_NONE
499
Antoine Pitrou152efa22010-05-16 18:19:27 +0000500 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
501 parameter to :func:`wrap_socket`. In this mode (the default), no
502 certificates will be required from the other side of the socket connection.
503 If a certificate is received from the other end, no attempt to validate it
504 is made.
505
506 See the discussion of :ref:`ssl-security` below.
Thomas Woutersed03b412007-08-28 21:37:11 +0000507
508.. data:: CERT_OPTIONAL
509
Antoine Pitrou152efa22010-05-16 18:19:27 +0000510 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
511 parameter to :func:`wrap_socket`. In this mode no certificates will be
512 required from the other side of the socket connection; but if they
513 are provided, validation will be attempted and an :class:`SSLError`
514 will be raised on failure.
515
516 Use of this setting requires a valid set of CA certificates to
517 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
518 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000519
520.. data:: CERT_REQUIRED
521
Antoine Pitrou152efa22010-05-16 18:19:27 +0000522 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
523 parameter to :func:`wrap_socket`. In this mode, certificates are
524 required from the other side of the socket connection; an :class:`SSLError`
525 will be raised if no certificate is provided, or if its validation fails.
526
527 Use of this setting requires a valid set of CA certificates to
528 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
529 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000530
Christian Heimes22587792013-11-21 23:56:13 +0100531.. data:: VERIFY_DEFAULT
532
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500533 Possible value for :attr:`SSLContext.verify_flags`. In this mode, certificate
534 revocation lists (CRLs) are not checked. By default OpenSSL does neither
535 require nor verify CRLs.
Christian Heimes22587792013-11-21 23:56:13 +0100536
537 .. versionadded:: 3.4
538
539.. data:: VERIFY_CRL_CHECK_LEAF
540
541 Possible value for :attr:`SSLContext.verify_flags`. In this mode, only the
542 peer cert is check but non of the intermediate CA certificates. The mode
543 requires a valid CRL that is signed by the peer cert's issuer (its direct
544 ancestor CA). If no proper has been loaded
545 :attr:`SSLContext.load_verify_locations`, validation will fail.
546
547 .. versionadded:: 3.4
548
549.. data:: VERIFY_CRL_CHECK_CHAIN
550
551 Possible value for :attr:`SSLContext.verify_flags`. In this mode, CRLs of
552 all certificates in the peer cert chain are checked.
553
554 .. versionadded:: 3.4
555
556.. data:: VERIFY_X509_STRICT
557
558 Possible value for :attr:`SSLContext.verify_flags` to disable workarounds
559 for broken X.509 certificates.
560
561 .. versionadded:: 3.4
562
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500563.. data:: VERIFY_X509_TRUSTED_FIRST
564
565 Possible value for :attr:`SSLContext.verify_flags`. It instructs OpenSSL to
566 prefer trusted certificates when building the trust chain to validate a
567 certificate. This flag is enabled by default.
568
Benjamin Petersonc8358272015-03-08 09:42:25 -0400569 .. versionadded:: 3.4.4
Benjamin Peterson990fcaa2015-03-04 22:49:41 -0500570
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200571.. data:: PROTOCOL_SSLv23
572
573 Selects the highest protocol version that both the client and server support.
574 Despite the name, this option can select "TLS" protocols as well as "SSL".
575
Thomas Woutersed03b412007-08-28 21:37:11 +0000576.. data:: PROTOCOL_SSLv2
577
578 Selects SSL version 2 as the channel encryption protocol.
579
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500580 This protocol is not available if OpenSSL is compiled with the
581 ``OPENSSL_NO_SSL2`` flag.
Victor Stinner3de49192011-05-09 00:42:58 +0200582
Antoine Pitrou8eac60d2010-05-16 14:19:41 +0000583 .. warning::
584
585 SSL version 2 is insecure. Its use is highly discouraged.
586
Thomas Woutersed03b412007-08-28 21:37:11 +0000587.. data:: PROTOCOL_SSLv3
588
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200589 Selects SSL version 3 as the channel encryption protocol.
590
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500591 This protocol is not be available if OpenSSL is compiled with the
592 ``OPENSSL_NO_SSLv3`` flag.
593
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200594 .. warning::
595
596 SSL version 3 is insecure. Its use is highly discouraged.
Thomas Woutersed03b412007-08-28 21:37:11 +0000597
598.. data:: PROTOCOL_TLSv1
599
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100600 Selects TLS version 1.0 as the channel encryption protocol.
601
602.. data:: PROTOCOL_TLSv1_1
603
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100604 Selects TLS version 1.1 as the channel encryption protocol.
605 Available only with openssl version 1.0.1+.
606
607 .. versionadded:: 3.4
608
609.. data:: PROTOCOL_TLSv1_2
610
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200611 Selects TLS version 1.2 as the channel encryption protocol. This is the
612 most modern version, and probably the best choice for maximum protection,
613 if both sides can speak it. Available only with openssl version 1.0.1+.
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100614
615 .. versionadded:: 3.4
Thomas Woutersed03b412007-08-28 21:37:11 +0000616
Antoine Pitroub5218772010-05-21 09:56:06 +0000617.. data:: OP_ALL
618
619 Enables workarounds for various bugs present in other SSL implementations.
Antoine Pitrou9f6b02e2012-01-27 10:02:55 +0100620 This option is set by default. It does not necessarily set the same
621 flags as OpenSSL's ``SSL_OP_ALL`` constant.
Antoine Pitroub5218772010-05-21 09:56:06 +0000622
623 .. versionadded:: 3.2
624
625.. data:: OP_NO_SSLv2
626
627 Prevents an SSLv2 connection. This option is only applicable in
628 conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from
629 choosing SSLv2 as the protocol version.
630
631 .. versionadded:: 3.2
632
633.. data:: OP_NO_SSLv3
634
635 Prevents an SSLv3 connection. This option is only applicable in
636 conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from
637 choosing SSLv3 as the protocol version.
638
639 .. versionadded:: 3.2
640
641.. data:: OP_NO_TLSv1
642
643 Prevents a TLSv1 connection. This option is only applicable in
644 conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from
645 choosing TLSv1 as the protocol version.
646
647 .. versionadded:: 3.2
648
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100649.. data:: OP_NO_TLSv1_1
650
651 Prevents a TLSv1.1 connection. This option is only applicable in conjunction
652 with :const:`PROTOCOL_SSLv23`. It prevents the peers from choosing TLSv1.1 as
653 the protocol version. Available only with openssl version 1.0.1+.
654
655 .. versionadded:: 3.4
656
657.. data:: OP_NO_TLSv1_2
658
659 Prevents a TLSv1.2 connection. This option is only applicable in conjunction
660 with :const:`PROTOCOL_SSLv23`. It prevents the peers from choosing TLSv1.2 as
661 the protocol version. Available only with openssl version 1.0.1+.
662
663 .. versionadded:: 3.4
664
Antoine Pitrou6db49442011-12-19 13:27:11 +0100665.. data:: OP_CIPHER_SERVER_PREFERENCE
666
667 Use the server's cipher ordering preference, rather than the client's.
668 This option has no effect on client sockets and SSLv2 server sockets.
669
670 .. versionadded:: 3.3
671
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100672.. data:: OP_SINGLE_DH_USE
673
674 Prevents re-use of the same DH key for distinct SSL sessions. This
675 improves forward secrecy but requires more computational resources.
676 This option only applies to server sockets.
677
678 .. versionadded:: 3.3
679
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100680.. data:: OP_SINGLE_ECDH_USE
681
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100682 Prevents re-use of the same ECDH key for distinct SSL sessions. This
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100683 improves forward secrecy but requires more computational resources.
684 This option only applies to server sockets.
685
686 .. versionadded:: 3.3
687
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100688.. data:: OP_NO_COMPRESSION
689
690 Disable compression on the SSL channel. This is useful if the application
691 protocol supports its own compression scheme.
692
693 This option is only available with OpenSSL 1.0.0 and later.
694
695 .. versionadded:: 3.3
696
Benjamin Petersoncca27322015-01-23 16:35:37 -0500697.. data:: HAS_ALPN
698
699 Whether the OpenSSL library has built-in support for the *Application-Layer
700 Protocol Negotiation* TLS extension as described in :rfc:`7301`.
701
702 .. versionadded:: 3.5
703
Antoine Pitrou501da612011-12-21 09:27:41 +0100704.. data:: HAS_ECDH
705
706 Whether the OpenSSL library has built-in support for Elliptic Curve-based
707 Diffie-Hellman key exchange. This should be true unless the feature was
708 explicitly disabled by the distributor.
709
710 .. versionadded:: 3.3
711
Antoine Pitroud5323212010-10-22 18:19:07 +0000712.. data:: HAS_SNI
713
714 Whether the OpenSSL library has built-in support for the *Server Name
Benjamin Peterson7243b572014-11-23 17:04:34 -0600715 Indication* extension (as defined in :rfc:`4366`).
Antoine Pitroud5323212010-10-22 18:19:07 +0000716
717 .. versionadded:: 3.2
718
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100719.. data:: HAS_NPN
720
721 Whether the OpenSSL library has built-in support for *Next Protocol
722 Negotiation* as described in the `NPN draft specification
Georg Brandl5d941342016-02-26 19:37:12 +0100723 <https://tools.ietf.org/html/draft-agl-tls-nextprotoneg>`_. When true,
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100724 you can use the :meth:`SSLContext.set_npn_protocols` method to advertise
725 which protocols you want to support.
726
727 .. versionadded:: 3.3
728
Antoine Pitroud6494802011-07-21 01:11:30 +0200729.. data:: CHANNEL_BINDING_TYPES
730
731 List of supported TLS channel binding types. Strings in this list
732 can be used as arguments to :meth:`SSLSocket.get_channel_binding`.
733
734 .. versionadded:: 3.3
735
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000736.. data:: OPENSSL_VERSION
737
738 The version string of the OpenSSL library loaded by the interpreter::
739
740 >>> ssl.OPENSSL_VERSION
741 'OpenSSL 0.9.8k 25 Mar 2009'
742
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000743 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000744
745.. data:: OPENSSL_VERSION_INFO
746
747 A tuple of five integers representing version information about the
748 OpenSSL library::
749
750 >>> ssl.OPENSSL_VERSION_INFO
751 (0, 9, 8, 11, 15)
752
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000753 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000754
755.. data:: OPENSSL_VERSION_NUMBER
756
757 The raw version number of the OpenSSL library, as a single integer::
758
759 >>> ssl.OPENSSL_VERSION_NUMBER
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000760 9470143
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000761 >>> hex(ssl.OPENSSL_VERSION_NUMBER)
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000762 '0x9080bf'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000763
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000764 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000765
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100766.. data:: ALERT_DESCRIPTION_HANDSHAKE_FAILURE
767 ALERT_DESCRIPTION_INTERNAL_ERROR
768 ALERT_DESCRIPTION_*
769
770 Alert Descriptions from :rfc:`5246` and others. The `IANA TLS Alert Registry
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300771 <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100772 contains this list and references to the RFCs where their meaning is defined.
773
774 Used as the return value of the callback function in
775 :meth:`SSLContext.set_servername_callback`.
776
777 .. versionadded:: 3.4
778
Christian Heimes72d28502013-11-23 13:56:58 +0100779.. data:: Purpose.SERVER_AUTH
780
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100781 Option for :func:`create_default_context` and
782 :meth:`SSLContext.load_default_certs`. This value indicates that the
783 context may be used to authenticate Web servers (therefore, it will
784 be used to create client-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100785
786 .. versionadded:: 3.4
787
Christian Heimes6b2ff982013-11-23 14:42:01 +0100788.. data:: Purpose.CLIENT_AUTH
Christian Heimes72d28502013-11-23 13:56:58 +0100789
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100790 Option for :func:`create_default_context` and
791 :meth:`SSLContext.load_default_certs`. This value indicates that the
792 context may be used to authenticate Web clients (therefore, it will
793 be used to create server-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100794
795 .. versionadded:: 3.4
796
Thomas Woutersed03b412007-08-28 21:37:11 +0000797
Antoine Pitrou152efa22010-05-16 18:19:27 +0000798SSL Sockets
799-----------
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000800
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200801.. class:: SSLSocket(socket.socket)
Antoine Pitrou792ff3e2010-09-19 13:19:21 +0000802
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200803 SSL sockets provide the following methods of :ref:`socket-objects`:
Zachary Wareba9fb0d2014-06-11 15:02:25 -0500804
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200805 - :meth:`~socket.socket.accept()`
806 - :meth:`~socket.socket.bind()`
807 - :meth:`~socket.socket.close()`
808 - :meth:`~socket.socket.connect()`
809 - :meth:`~socket.socket.detach()`
810 - :meth:`~socket.socket.fileno()`
811 - :meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`
812 - :meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`
813 - :meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`,
814 :meth:`~socket.socket.setblocking()`
815 - :meth:`~socket.socket.listen()`
816 - :meth:`~socket.socket.makefile()`
817 - :meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()`
818 (but passing a non-zero ``flags`` argument is not allowed)
819 - :meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with
820 the same limitation)
Victor Stinner92127a52014-10-10 12:43:17 +0200821 - :meth:`~socket.socket.sendfile()` (but :mod:`os.sendfile` will be used
822 for plain-text sockets only, else :meth:`~socket.socket.send()` will be used)
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200823 - :meth:`~socket.socket.shutdown()`
Zachary Wareba9fb0d2014-06-11 15:02:25 -0500824
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200825 However, since the SSL (and TLS) protocol has its own framing atop
826 of TCP, the SSL sockets abstraction can, in certain respects, diverge from
827 the specification of normal, OS-level sockets. See especially the
828 :ref:`notes on non-blocking sockets <ssl-nonblocking>`.
Antoine Pitroue1f2f302010-09-19 13:56:11 +0000829
Victor Stinnerd28fe8c2014-10-10 12:07:19 +0200830 Usually, :class:`SSLSocket` are not created directly, but using the
831 :func:`wrap_socket` function or the :meth:`SSLContext.wrap_socket` method.
832
Victor Stinner92127a52014-10-10 12:43:17 +0200833 .. versionchanged:: 3.5
834 The :meth:`sendfile` method was added.
835
Victor Stinner14690702015-04-06 22:46:13 +0200836 .. versionchanged:: 3.5
837 The :meth:`shutdown` does not reset the socket timeout each time bytes
838 are received or sent. The socket timeout is now to maximum total duration
839 of the shutdown.
840
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +0200841
842SSL sockets also have the following additional methods and attributes:
Antoine Pitrou792ff3e2010-09-19 13:19:21 +0000843
Martin Panterf6b1d662016-03-28 00:22:09 +0000844.. method:: SSLSocket.read(len=1024, buffer=None)
Antoine Pitroub1fdf472014-10-05 20:41:53 +0200845
846 Read up to *len* bytes of data from the SSL socket and return the result as
847 a ``bytes`` instance. If *buffer* is specified, then read into the buffer
848 instead, and return the number of bytes read.
849
Victor Stinner41f92c22014-10-10 12:05:56 +0200850 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +0200851 :ref:`non-blocking <ssl-nonblocking>` and the read would block.
Victor Stinner41f92c22014-10-10 12:05:56 +0200852
853 As at any time a re-negotiation is possible, a call to :meth:`read` can also
854 cause write operations.
855
Victor Stinner14690702015-04-06 22:46:13 +0200856 .. versionchanged:: 3.5
857 The socket timeout is no more reset each time bytes are received or sent.
858 The socket timeout is now to maximum total duration to read up to *len*
859 bytes.
860
Antoine Pitroub1fdf472014-10-05 20:41:53 +0200861.. method:: SSLSocket.write(buf)
862
863 Write *buf* to the SSL socket and return the number of bytes written. The
864 *buf* argument must be an object supporting the buffer interface.
865
Victor Stinner41f92c22014-10-10 12:05:56 +0200866 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +0200867 :ref:`non-blocking <ssl-nonblocking>` and the write would block.
Victor Stinner41f92c22014-10-10 12:05:56 +0200868
869 As at any time a re-negotiation is possible, a call to :meth:`write` can
870 also cause read operations.
871
Victor Stinner14690702015-04-06 22:46:13 +0200872 .. versionchanged:: 3.5
873 The socket timeout is no more reset each time bytes are received or sent.
874 The socket timeout is now to maximum total duration to write *buf*.
875
Antoine Pitroub1fdf472014-10-05 20:41:53 +0200876.. note::
877
878 The :meth:`~SSLSocket.read` and :meth:`~SSLSocket.write` methods are the
879 low-level methods that read and write unencrypted, application-level data
Martin Panter1f1177d2015-10-31 11:48:53 +0000880 and decrypt/encrypt it to encrypted, wire-level data. These methods
Antoine Pitroub1fdf472014-10-05 20:41:53 +0200881 require an active SSL connection, i.e. the handshake was completed and
882 :meth:`SSLSocket.unwrap` was not called.
883
884 Normally you should use the socket API methods like
885 :meth:`~socket.socket.recv` and :meth:`~socket.socket.send` instead of these
886 methods.
887
Bill Janssen48dc27c2007-12-05 03:38:10 +0000888.. method:: SSLSocket.do_handshake()
889
Antoine Pitroub3593ca2011-07-11 01:39:19 +0200890 Perform the SSL setup handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000891
Christian Heimes1aa9a752013-12-02 02:41:19 +0100892 .. versionchanged:: 3.4
Zachary Ware88a19772014-07-25 13:30:50 -0500893 The handshake method also performs :func:`match_hostname` when the
Christian Heimes1aa9a752013-12-02 02:41:19 +0100894 :attr:`~SSLContext.check_hostname` attribute of the socket's
895 :attr:`~SSLSocket.context` is true.
896
Victor Stinner14690702015-04-06 22:46:13 +0200897 .. versionchanged:: 3.5
898 The socket timeout is no more reset each time bytes are received or sent.
899 The socket timeout is now to maximum total duration of the handshake.
900
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000901.. method:: SSLSocket.getpeercert(binary_form=False)
902
Georg Brandl7f01a132009-09-16 15:58:14 +0000903 If there is no certificate for the peer on the other end of the connection,
Antoine Pitrou20b85552013-09-29 19:50:53 +0200904 return ``None``. If the SSL handshake hasn't been done yet, raise
905 :exc:`ValueError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000906
Antoine Pitroud34941a2013-04-16 20:27:17 +0200907 If the ``binary_form`` parameter is :const:`False`, and a certificate was
Georg Brandl7f01a132009-09-16 15:58:14 +0000908 received from the peer, this method returns a :class:`dict` instance. If the
909 certificate was not validated, the dict is empty. If the certificate was
Antoine Pitroub7c6c812012-08-16 22:14:43 +0200910 validated, it returns a dict with several keys, amongst them ``subject``
911 (the principal for which the certificate was issued) and ``issuer``
912 (the principal issuing the certificate). If a certificate contains an
913 instance of the *Subject Alternative Name* extension (see :rfc:`3280`),
914 there will also be a ``subjectAltName`` key in the dictionary.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000915
Antoine Pitroub7c6c812012-08-16 22:14:43 +0200916 The ``subject`` and ``issuer`` fields are tuples containing the sequence
917 of relative distinguished names (RDNs) given in the certificate's data
918 structure for the respective fields, and each RDN is a sequence of
919 name-value pairs. Here is a real-world example::
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000920
Antoine Pitroub7c6c812012-08-16 22:14:43 +0200921 {'issuer': ((('countryName', 'IL'),),
922 (('organizationName', 'StartCom Ltd.'),),
923 (('organizationalUnitName',
924 'Secure Digital Certificate Signing'),),
925 (('commonName',
926 'StartCom Class 2 Primary Intermediate Server CA'),)),
927 'notAfter': 'Nov 22 08:15:19 2013 GMT',
928 'notBefore': 'Nov 21 03:09:52 2011 GMT',
929 'serialNumber': '95F0',
930 'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),),
931 (('countryName', 'US'),),
932 (('stateOrProvinceName', 'California'),),
933 (('localityName', 'San Francisco'),),
934 (('organizationName', 'Electronic Frontier Foundation, Inc.'),),
935 (('commonName', '*.eff.org'),),
936 (('emailAddress', 'hostmaster@eff.org'),)),
937 'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')),
938 'version': 3}
939
940 .. note::
Larry Hastings3732ed22014-03-15 21:13:56 -0700941
Antoine Pitroub7c6c812012-08-16 22:14:43 +0200942 To validate a certificate for a particular service, you can use the
943 :func:`match_hostname` function.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000944
Georg Brandl7f01a132009-09-16 15:58:14 +0000945 If the ``binary_form`` parameter is :const:`True`, and a certificate was
946 provided, this method returns the DER-encoded form of the entire certificate
947 as a sequence of bytes, or :const:`None` if the peer did not provide a
Antoine Pitroud34941a2013-04-16 20:27:17 +0200948 certificate. Whether the peer provides a certificate depends on the SSL
949 socket's role:
950
951 * for a client SSL socket, the server will always provide a certificate,
952 regardless of whether validation was required;
953
954 * for a server SSL socket, the client will only provide a certificate
955 when requested by the server; therefore :meth:`getpeercert` will return
956 :const:`None` if you used :const:`CERT_NONE` (rather than
957 :const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`).
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000958
Antoine Pitroufb046912010-11-09 20:21:19 +0000959 .. versionchanged:: 3.2
960 The returned dictionary includes additional items such as ``issuer``
961 and ``notBefore``.
962
Antoine Pitrou20b85552013-09-29 19:50:53 +0200963 .. versionchanged:: 3.4
964 :exc:`ValueError` is raised when the handshake isn't done.
Christian Heimesbd3a7f92013-11-21 03:40:15 +0100965 The returned dictionary includes additional X509v3 extension items
Larry Hastings3732ed22014-03-15 21:13:56 -0700966 such as ``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs.
Christian Heimesbd3a7f92013-11-21 03:40:15 +0100967
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000968.. method:: SSLSocket.cipher()
969
Georg Brandl7f01a132009-09-16 15:58:14 +0000970 Returns a three-value tuple containing the name of the cipher being used, the
971 version of the SSL protocol that defines its use, and the number of secret
972 bits being used. If no connection has been established, returns ``None``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000973
Benjamin Peterson4cb17812015-01-07 11:14:26 -0600974.. method:: SSLSocket.shared_ciphers()
975
976 Return the list of ciphers shared by the client during the handshake. Each
977 entry of the returned list is a three-value tuple containing the name of the
978 cipher, the version of the SSL protocol that defines its use, and the number
979 of secret bits the cipher uses. :meth:`~SSLSocket.shared_ciphers` returns
980 ``None`` if no connection has been established or the socket is a client
981 socket.
982
983 .. versionadded:: 3.5
984
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100985.. method:: SSLSocket.compression()
986
987 Return the compression algorithm being used as a string, or ``None``
988 if the connection isn't compressed.
989
990 If the higher-level protocol supports its own compression mechanism,
991 you can use :data:`OP_NO_COMPRESSION` to disable SSL-level compression.
992
993 .. versionadded:: 3.3
994
Antoine Pitroud6494802011-07-21 01:11:30 +0200995.. method:: SSLSocket.get_channel_binding(cb_type="tls-unique")
996
997 Get channel binding data for current connection, as a bytes object. Returns
998 ``None`` if not connected or the handshake has not been completed.
999
1000 The *cb_type* parameter allow selection of the desired channel binding
1001 type. Valid channel binding types are listed in the
1002 :data:`CHANNEL_BINDING_TYPES` list. Currently only the 'tls-unique' channel
1003 binding, defined by :rfc:`5929`, is supported. :exc:`ValueError` will be
1004 raised if an unsupported channel binding type is requested.
1005
1006 .. versionadded:: 3.3
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001007
Benjamin Petersoncca27322015-01-23 16:35:37 -05001008.. method:: SSLSocket.selected_alpn_protocol()
1009
1010 Return the protocol that was selected during the TLS handshake. If
1011 :meth:`SSLContext.set_alpn_protocols` was not called, if the other party does
Benjamin Peterson88615022015-01-23 17:30:26 -05001012 not support ALPN, if this socket does not support any of the client's
1013 proposed protocols, or if the handshake has not happened yet, ``None`` is
Benjamin Petersoncca27322015-01-23 16:35:37 -05001014 returned.
1015
1016 .. versionadded:: 3.5
1017
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001018.. method:: SSLSocket.selected_npn_protocol()
1019
Benjamin Petersoncca27322015-01-23 16:35:37 -05001020 Return the higher-level protocol that was selected during the TLS/SSL
Antoine Pitrou47e40422014-09-04 21:00:10 +02001021 handshake. If :meth:`SSLContext.set_npn_protocols` was not called, or
1022 if the other party does not support NPN, or if the handshake has not yet
1023 happened, this will return ``None``.
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001024
1025 .. versionadded:: 3.3
1026
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001027.. method:: SSLSocket.unwrap()
1028
Georg Brandl7f01a132009-09-16 15:58:14 +00001029 Performs the SSL shutdown handshake, which removes the TLS layer from the
1030 underlying socket, and returns the underlying socket object. This can be
1031 used to go from encrypted operation over a connection to unencrypted. The
1032 returned socket should always be used for further communication with the
1033 other side of the connection, rather than the original socket.
Benjamin Peterson4aeec042008-08-19 21:42:13 +00001034
Antoine Pitrou47e40422014-09-04 21:00:10 +02001035.. method:: SSLSocket.version()
1036
1037 Return the actual SSL protocol version negotiated by the connection
1038 as a string, or ``None`` is no secure connection is established.
1039 As of this writing, possible return values include ``"SSLv2"``,
1040 ``"SSLv3"``, ``"TLSv1"``, ``"TLSv1.1"`` and ``"TLSv1.2"``.
1041 Recent OpenSSL versions may define more return values.
1042
1043 .. versionadded:: 3.5
1044
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001045.. method:: SSLSocket.pending()
1046
1047 Returns the number of already decrypted bytes available for read, pending on
1048 the connection.
1049
Antoine Pitrouec883db2010-05-24 21:20:20 +00001050.. attribute:: SSLSocket.context
1051
1052 The :class:`SSLContext` object this SSL socket is tied to. If the SSL
1053 socket was created using the top-level :func:`wrap_socket` function
1054 (rather than :meth:`SSLContext.wrap_socket`), this is a custom context
1055 object created for this SSL socket.
1056
1057 .. versionadded:: 3.2
1058
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001059.. attribute:: SSLSocket.server_side
1060
1061 A boolean which is ``True`` for server-side sockets and ``False`` for
1062 client-side sockets.
1063
Victor Stinner41f92c22014-10-10 12:05:56 +02001064 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001065
1066.. attribute:: SSLSocket.server_hostname
1067
Victor Stinner41f92c22014-10-10 12:05:56 +02001068 Hostname of the server: :class:`str` type, or ``None`` for server-side
1069 socket or if the hostname was not specified in the constructor.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001070
Victor Stinner41f92c22014-10-10 12:05:56 +02001071 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001072
Antoine Pitrouec883db2010-05-24 21:20:20 +00001073
Antoine Pitrou152efa22010-05-16 18:19:27 +00001074SSL Contexts
1075------------
1076
Antoine Pitroucafaad42010-05-24 15:58:43 +00001077.. versionadded:: 3.2
1078
Antoine Pitroub0182c82010-10-12 20:09:02 +00001079An SSL context holds various data longer-lived than single SSL connections,
1080such as SSL configuration options, certificate(s) and private key(s).
1081It also manages a cache of SSL sessions for server-side sockets, in order
1082to speed up repeated connections from the same clients.
1083
Antoine Pitrou152efa22010-05-16 18:19:27 +00001084.. class:: SSLContext(protocol)
1085
Antoine Pitroub0182c82010-10-12 20:09:02 +00001086 Create a new SSL context. You must pass *protocol* which must be one
1087 of the ``PROTOCOL_*`` constants defined in this module.
Antoine Pitrou5bef4102013-11-23 16:16:29 +01001088 :data:`PROTOCOL_SSLv23` is currently recommended for maximum
1089 interoperability.
1090
1091 .. seealso::
1092 :func:`create_default_context` lets the :mod:`ssl` module choose
1093 security settings for a given purpose.
Antoine Pitroub0182c82010-10-12 20:09:02 +00001094
Antoine Pitrou152efa22010-05-16 18:19:27 +00001095
1096:class:`SSLContext` objects have the following methods and attributes:
1097
Christian Heimes9a5395a2013-06-17 15:44:12 +02001098.. method:: SSLContext.cert_store_stats()
1099
1100 Get statistics about quantities of loaded X.509 certificates, count of
1101 X.509 certificates flagged as CA certificates and certificate revocation
1102 lists as dictionary.
1103
1104 Example for a context with one CA cert and one other cert::
1105
1106 >>> context.cert_store_stats()
1107 {'crl': 0, 'x509_ca': 1, 'x509': 2}
1108
1109 .. versionadded:: 3.4
1110
Christian Heimesefff7062013-11-21 03:35:02 +01001111
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001112.. method:: SSLContext.load_cert_chain(certfile, keyfile=None, password=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001113
1114 Load a private key and the corresponding certificate. The *certfile*
1115 string must be the path to a single file in PEM format containing the
1116 certificate as well as any number of CA certificates needed to establish
1117 the certificate's authenticity. The *keyfile* string, if present, must
1118 point to a file containing the private key in. Otherwise the private
1119 key will be taken from *certfile* as well. See the discussion of
1120 :ref:`ssl-certificates` for more information on how the certificate
1121 is stored in the *certfile*.
1122
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001123 The *password* argument may be a function to call to get the password for
1124 decrypting the private key. It will only be called if the private key is
1125 encrypted and a password is necessary. It will be called with no arguments,
1126 and it should return a string, bytes, or bytearray. If the return value is
1127 a string it will be encoded as UTF-8 before using it to decrypt the key.
1128 Alternatively a string, bytes, or bytearray value may be supplied directly
1129 as the *password* argument. It will be ignored if the private key is not
1130 encrypted and no password is needed.
1131
1132 If the *password* argument is not specified and a password is required,
1133 OpenSSL's built-in password prompting mechanism will be used to
1134 interactively prompt the user for a password.
1135
Antoine Pitrou152efa22010-05-16 18:19:27 +00001136 An :class:`SSLError` is raised if the private key doesn't
1137 match with the certificate.
1138
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001139 .. versionchanged:: 3.3
1140 New optional argument *password*.
1141
Christian Heimes72d28502013-11-23 13:56:58 +01001142.. method:: SSLContext.load_default_certs(purpose=Purpose.SERVER_AUTH)
1143
1144 Load a set of default "certification authority" (CA) certificates from
1145 default locations. On Windows it loads CA certs from the ``CA`` and
1146 ``ROOT`` system stores. On other systems it calls
1147 :meth:`SSLContext.set_default_verify_paths`. In the future the method may
1148 load CA certificates from other locations, too.
1149
1150 The *purpose* flag specifies what kind of CA certificates are loaded. The
1151 default settings :data:`Purpose.SERVER_AUTH` loads certificates, that are
1152 flagged and trusted for TLS web server authentication (client side
Christian Heimes6b2ff982013-11-23 14:42:01 +01001153 sockets). :data:`Purpose.CLIENT_AUTH` loads CA certificates for client
Christian Heimes72d28502013-11-23 13:56:58 +01001154 certificate verification on the server side.
1155
1156 .. versionadded:: 3.4
1157
Christian Heimesefff7062013-11-21 03:35:02 +01001158.. method:: SSLContext.load_verify_locations(cafile=None, capath=None, cadata=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001159
1160 Load a set of "certification authority" (CA) certificates used to validate
1161 other peers' certificates when :data:`verify_mode` is other than
1162 :data:`CERT_NONE`. At least one of *cafile* or *capath* must be specified.
1163
Christian Heimes22587792013-11-21 23:56:13 +01001164 This method can also load certification revocation lists (CRLs) in PEM or
Donald Stufft8b852f12014-05-20 12:58:38 -04001165 DER format. In order to make use of CRLs, :attr:`SSLContext.verify_flags`
Christian Heimes22587792013-11-21 23:56:13 +01001166 must be configured properly.
1167
Christian Heimes3e738f92013-06-09 18:07:16 +02001168 The *cafile* string, if present, is the path to a file of concatenated
Antoine Pitrou152efa22010-05-16 18:19:27 +00001169 CA certificates in PEM format. See the discussion of
1170 :ref:`ssl-certificates` for more information about how to arrange the
1171 certificates in this file.
1172
1173 The *capath* string, if present, is
1174 the path to a directory containing several CA certificates in PEM format,
1175 following an `OpenSSL specific layout
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03001176 <https://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001177
Christian Heimesefff7062013-11-21 03:35:02 +01001178 The *cadata* object, if present, is either an ASCII string of one or more
Serhiy Storchakab757c832014-12-05 22:25:22 +02001179 PEM-encoded certificates or a :term:`bytes-like object` of DER-encoded
Christian Heimesefff7062013-11-21 03:35:02 +01001180 certificates. Like with *capath* extra lines around PEM-encoded
1181 certificates are ignored but at least one certificate must be present.
1182
1183 .. versionchanged:: 3.4
1184 New optional argument *cadata*
1185
Christian Heimes9a5395a2013-06-17 15:44:12 +02001186.. method:: SSLContext.get_ca_certs(binary_form=False)
1187
1188 Get a list of loaded "certification authority" (CA) certificates. If the
1189 ``binary_form`` parameter is :const:`False` each list
1190 entry is a dict like the output of :meth:`SSLSocket.getpeercert`. Otherwise
1191 the method returns a list of DER-encoded certificates. The returned list
1192 does not contain certificates from *capath* unless a certificate was
1193 requested and loaded by a SSL connection.
1194
Antoine Pitrou97aa9532015-04-13 21:06:15 +02001195 .. note::
1196 Certificates in a capath directory aren't loaded unless they have
1197 been used at least once.
1198
Larry Hastingsd36fc432013-08-03 02:49:53 -07001199 .. versionadded:: 3.4
Christian Heimes9a5395a2013-06-17 15:44:12 +02001200
Antoine Pitrou664c2d12010-11-17 20:29:42 +00001201.. method:: SSLContext.set_default_verify_paths()
1202
1203 Load a set of default "certification authority" (CA) certificates from
1204 a filesystem path defined when building the OpenSSL library. Unfortunately,
1205 there's no easy way to know whether this method succeeds: no error is
1206 returned if no certificates are to be found. When the OpenSSL library is
1207 provided as part of the operating system, though, it is likely to be
1208 configured properly.
1209
Antoine Pitrou152efa22010-05-16 18:19:27 +00001210.. method:: SSLContext.set_ciphers(ciphers)
1211
1212 Set the available ciphers for sockets created with this context.
1213 It should be a string in the `OpenSSL cipher list format
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03001214 <https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT>`_.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001215 If no cipher can be selected (because compile-time options or other
1216 configuration forbids use of all the specified ciphers), an
1217 :class:`SSLError` will be raised.
1218
1219 .. note::
1220 when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will
1221 give the currently selected cipher.
1222
Benjamin Petersoncca27322015-01-23 16:35:37 -05001223.. method:: SSLContext.set_alpn_protocols(protocols)
1224
1225 Specify which protocols the socket should advertise during the SSL/TLS
1226 handshake. It should be a list of ASCII strings, like ``['http/1.1',
1227 'spdy/2']``, ordered by preference. The selection of a protocol will happen
1228 during the handshake, and will play out according to :rfc:`7301`. After a
1229 successful handshake, the :meth:`SSLSocket.selected_alpn_protocol` method will
1230 return the agreed-upon protocol.
1231
1232 This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is
1233 False.
1234
1235 .. versionadded:: 3.5
1236
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001237.. method:: SSLContext.set_npn_protocols(protocols)
1238
R David Murrayc7f75792013-06-26 15:11:12 -04001239 Specify which protocols the socket should advertise during the SSL/TLS
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001240 handshake. It should be a list of strings, like ``['http/1.1', 'spdy/2']``,
1241 ordered by preference. The selection of a protocol will happen during the
1242 handshake, and will play out according to the `NPN draft specification
Georg Brandl5d941342016-02-26 19:37:12 +01001243 <https://tools.ietf.org/html/draft-agl-tls-nextprotoneg>`_. After a
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001244 successful handshake, the :meth:`SSLSocket.selected_npn_protocol` method will
1245 return the agreed-upon protocol.
1246
1247 This method will raise :exc:`NotImplementedError` if :data:`HAS_NPN` is
1248 False.
1249
1250 .. versionadded:: 3.3
1251
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001252.. method:: SSLContext.set_servername_callback(server_name_callback)
1253
1254 Register a callback function that will be called after the TLS Client Hello
1255 handshake message has been received by the SSL/TLS server when the TLS client
1256 specifies a server name indication. The server name indication mechanism
1257 is specified in :rfc:`6066` section 3 - Server Name Indication.
1258
1259 Only one callback can be set per ``SSLContext``. If *server_name_callback*
1260 is ``None`` then the callback is disabled. Calling this function a
1261 subsequent time will disable the previously registered callback.
1262
1263 The callback function, *server_name_callback*, will be called with three
1264 arguments; the first being the :class:`ssl.SSLSocket`, the second is a string
1265 that represents the server name that the client is intending to communicate
Antoine Pitrou50b24d02013-04-11 20:48:42 +02001266 (or :const:`None` if the TLS Client Hello does not contain a server name)
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001267 and the third argument is the original :class:`SSLContext`. The server name
1268 argument is the IDNA decoded server name.
1269
1270 A typical use of this callback is to change the :class:`ssl.SSLSocket`'s
1271 :attr:`SSLSocket.context` attribute to a new object of type
1272 :class:`SSLContext` representing a certificate chain that matches the server
1273 name.
1274
1275 Due to the early negotiation phase of the TLS connection, only limited
1276 methods and attributes are usable like
Benjamin Petersoncca27322015-01-23 16:35:37 -05001277 :meth:`SSLSocket.selected_alpn_protocol` and :attr:`SSLSocket.context`.
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001278 :meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.getpeercert`,
1279 :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compress` methods require that
1280 the TLS connection has progressed beyond the TLS Client Hello and therefore
1281 will not contain return meaningful values nor can they be called safely.
1282
1283 The *server_name_callback* function must return ``None`` to allow the
Terry Jan Reedy8e7586b2013-03-11 18:38:13 -04001284 TLS negotiation to continue. If a TLS failure is required, a constant
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001285 :const:`ALERT_DESCRIPTION_* <ALERT_DESCRIPTION_INTERNAL_ERROR>` can be
1286 returned. Other return values will result in a TLS fatal error with
1287 :const:`ALERT_DESCRIPTION_INTERNAL_ERROR`.
1288
Zachary Ware88a19772014-07-25 13:30:50 -05001289 If there is an IDNA decoding error on the server name, the TLS connection
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001290 will terminate with an :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` fatal TLS
1291 alert message to the client.
1292
1293 If an exception is raised from the *server_name_callback* function the TLS
1294 connection will terminate with a fatal TLS alert message
1295 :const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`.
1296
1297 This method will raise :exc:`NotImplementedError` if the OpenSSL library
1298 had OPENSSL_NO_TLSEXT defined when it was built.
1299
1300 .. versionadded:: 3.4
1301
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001302.. method:: SSLContext.load_dh_params(dhfile)
1303
1304 Load the key generation parameters for Diffie-Helman (DH) key exchange.
1305 Using DH key exchange improves forward secrecy at the expense of
1306 computational resources (both on the server and on the client).
1307 The *dhfile* parameter should be the path to a file containing DH
1308 parameters in PEM format.
1309
1310 This setting doesn't apply to client sockets. You can also use the
1311 :data:`OP_SINGLE_DH_USE` option to further improve security.
1312
1313 .. versionadded:: 3.3
1314
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001315.. method:: SSLContext.set_ecdh_curve(curve_name)
1316
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001317 Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH) key
1318 exchange. ECDH is significantly faster than regular DH while arguably
1319 as secure. The *curve_name* parameter should be a string describing
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001320 a well-known elliptic curve, for example ``prime256v1`` for a widely
1321 supported curve.
1322
1323 This setting doesn't apply to client sockets. You can also use the
1324 :data:`OP_SINGLE_ECDH_USE` option to further improve security.
1325
Antoine Pitrou501da612011-12-21 09:27:41 +01001326 This method is not available if :data:`HAS_ECDH` is False.
1327
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001328 .. versionadded:: 3.3
1329
1330 .. seealso::
1331 `SSL/TLS & Perfect Forward Secrecy <http://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy.html>`_
1332 Vincent Bernat.
1333
Antoine Pitroud5323212010-10-22 18:19:07 +00001334.. method:: SSLContext.wrap_socket(sock, server_side=False, \
1335 do_handshake_on_connect=True, suppress_ragged_eofs=True, \
1336 server_hostname=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001337
1338 Wrap an existing Python socket *sock* and return an :class:`SSLSocket`
Antoine Pitrou3e86ba42013-12-28 17:26:33 +01001339 object. *sock* must be a :data:`~socket.SOCK_STREAM` socket; other socket
1340 types are unsupported.
1341
1342 The returned SSL socket is tied to the context, its settings and
Antoine Pitrou152efa22010-05-16 18:19:27 +00001343 certificates. The parameters *server_side*, *do_handshake_on_connect*
1344 and *suppress_ragged_eofs* have the same meaning as in the top-level
1345 :func:`wrap_socket` function.
1346
Antoine Pitroud5323212010-10-22 18:19:07 +00001347 On client connections, the optional parameter *server_hostname* specifies
1348 the hostname of the service which we are connecting to. This allows a
1349 single server to host multiple SSL-based services with distinct certificates,
Benjamin Peterson7243b572014-11-23 17:04:34 -06001350 quite similarly to HTTP virtual hosts. Specifying *server_hostname* will
1351 raise a :exc:`ValueError` if *server_side* is true.
1352
1353 .. versionchanged:: 3.5
1354 Always allow a server_hostname to be passed, even if OpenSSL does not
1355 have SNI.
Antoine Pitroud5323212010-10-22 18:19:07 +00001356
Victor Stinner805b2622014-10-10 12:49:08 +02001357.. method:: SSLContext.wrap_bio(incoming, outgoing, server_side=False, \
1358 server_hostname=None)
1359
1360 Create a new :class:`SSLObject` instance by wrapping the BIO objects
1361 *incoming* and *outgoing*. The SSL routines will read input data from the
1362 incoming BIO and write data to the outgoing BIO.
1363
1364 The *server_side* and *server_hostname* parameters have the same meaning as
1365 in :meth:`SSLContext.wrap_socket`.
1366
Antoine Pitroub0182c82010-10-12 20:09:02 +00001367.. method:: SSLContext.session_stats()
1368
1369 Get statistics about the SSL sessions created or managed by this context.
1370 A dictionary is returned which maps the names of each `piece of information
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03001371 <https://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>`_ to their
Antoine Pitroub0182c82010-10-12 20:09:02 +00001372 numeric values. For example, here is the total number of hits and misses
1373 in the session cache since the context was created::
1374
1375 >>> stats = context.session_stats()
1376 >>> stats['hits'], stats['misses']
1377 (0, 0)
1378
Christian Heimes1aa9a752013-12-02 02:41:19 +01001379.. attribute:: SSLContext.check_hostname
1380
Berker Peksag315e1042015-05-19 01:36:55 +03001381 Whether to match the peer cert's hostname with :func:`match_hostname` in
Christian Heimes1aa9a752013-12-02 02:41:19 +01001382 :meth:`SSLSocket.do_handshake`. The context's
1383 :attr:`~SSLContext.verify_mode` must be set to :data:`CERT_OPTIONAL` or
1384 :data:`CERT_REQUIRED`, and you must pass *server_hostname* to
1385 :meth:`~SSLContext.wrap_socket` in order to match the hostname.
1386
1387 Example::
1388
1389 import socket, ssl
1390
1391 context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
1392 context.verify_mode = ssl.CERT_REQUIRED
1393 context.check_hostname = True
1394 context.load_default_certs()
1395
1396 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Berker Peksag38bf87c2014-07-17 05:00:36 +03001397 ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
1398 ssl_sock.connect(('www.verisign.com', 443))
Christian Heimes1aa9a752013-12-02 02:41:19 +01001399
1400 .. versionadded:: 3.4
1401
1402 .. note::
1403
1404 This features requires OpenSSL 0.9.8f or newer.
1405
Antoine Pitroub5218772010-05-21 09:56:06 +00001406.. attribute:: SSLContext.options
1407
1408 An integer representing the set of SSL options enabled on this context.
1409 The default value is :data:`OP_ALL`, but you can specify other options
1410 such as :data:`OP_NO_SSLv2` by ORing them together.
1411
1412 .. note::
1413 With versions of OpenSSL older than 0.9.8m, it is only possible
1414 to set options, not to clear them. Attempting to clear an option
1415 (by resetting the corresponding bits) will raise a ``ValueError``.
1416
Antoine Pitrou152efa22010-05-16 18:19:27 +00001417.. attribute:: SSLContext.protocol
1418
1419 The protocol version chosen when constructing the context. This attribute
1420 is read-only.
1421
Christian Heimes22587792013-11-21 23:56:13 +01001422.. attribute:: SSLContext.verify_flags
1423
1424 The flags for certificate verification operations. You can set flags like
1425 :data:`VERIFY_CRL_CHECK_LEAF` by ORing them together. By default OpenSSL
1426 does neither require nor verify certificate revocation lists (CRLs).
Christian Heimes2427b502013-11-23 11:24:32 +01001427 Available only with openssl version 0.9.8+.
Christian Heimes22587792013-11-21 23:56:13 +01001428
1429 .. versionadded:: 3.4
1430
Antoine Pitrou152efa22010-05-16 18:19:27 +00001431.. attribute:: SSLContext.verify_mode
1432
1433 Whether to try to verify other peers' certificates and how to behave
1434 if verification fails. This attribute must be one of
1435 :data:`CERT_NONE`, :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`.
1436
1437
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001438.. index:: single: certificates
1439
1440.. index:: single: X509 certificate
1441
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001442.. _ssl-certificates:
1443
Thomas Woutersed03b412007-08-28 21:37:11 +00001444Certificates
1445------------
1446
Georg Brandl7f01a132009-09-16 15:58:14 +00001447Certificates in general are part of a public-key / private-key system. In this
1448system, each *principal*, (which may be a machine, or a person, or an
1449organization) is assigned a unique two-part encryption key. One part of the key
1450is public, and is called the *public key*; the other part is kept secret, and is
1451called the *private key*. The two parts are related, in that if you encrypt a
1452message with one of the parts, you can decrypt it with the other part, and
1453**only** with the other part.
Thomas Woutersed03b412007-08-28 21:37:11 +00001454
Georg Brandl7f01a132009-09-16 15:58:14 +00001455A certificate contains information about two principals. It contains the name
1456of a *subject*, and the subject's public key. It also contains a statement by a
1457second principal, the *issuer*, that the subject is who he claims to be, and
1458that this is indeed the subject's public key. The issuer's statement is signed
1459with the issuer's private key, which only the issuer knows. However, anyone can
1460verify the issuer's statement by finding the issuer's public key, decrypting the
1461statement with it, and comparing it to the other information in the certificate.
1462The certificate also contains information about the time period over which it is
1463valid. This is expressed as two fields, called "notBefore" and "notAfter".
Thomas Woutersed03b412007-08-28 21:37:11 +00001464
Georg Brandl7f01a132009-09-16 15:58:14 +00001465In the Python use of certificates, a client or server can use a certificate to
1466prove who they are. The other side of a network connection can also be required
1467to produce a certificate, and that certificate can be validated to the
1468satisfaction of the client or server that requires such validation. The
1469connection attempt can be set to raise an exception if the validation fails.
1470Validation is done automatically, by the underlying OpenSSL framework; the
1471application need not concern itself with its mechanics. But the application
1472does usually need to provide sets of certificates to allow this process to take
1473place.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001474
Georg Brandl7f01a132009-09-16 15:58:14 +00001475Python uses files to contain certificates. They should be formatted as "PEM"
1476(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
1477and a footer line::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001478
1479 -----BEGIN CERTIFICATE-----
1480 ... (certificate in base64 PEM encoding) ...
1481 -----END CERTIFICATE-----
1482
Antoine Pitrou152efa22010-05-16 18:19:27 +00001483Certificate chains
1484^^^^^^^^^^^^^^^^^^
1485
Georg Brandl7f01a132009-09-16 15:58:14 +00001486The Python files which contain certificates can contain a sequence of
1487certificates, sometimes called a *certificate chain*. This chain should start
1488with the specific certificate for the principal who "is" the client or server,
1489and then the certificate for the issuer of that certificate, and then the
1490certificate for the issuer of *that* certificate, and so on up the chain till
1491you get to a certificate which is *self-signed*, that is, a certificate which
1492has the same subject and issuer, sometimes called a *root certificate*. The
1493certificates should just be concatenated together in the certificate file. For
1494example, suppose we had a three certificate chain, from our server certificate
1495to the certificate of the certification authority that signed our server
1496certificate, to the root certificate of the agency which issued the
1497certification authority's certificate::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001498
1499 -----BEGIN CERTIFICATE-----
1500 ... (certificate for your server)...
1501 -----END CERTIFICATE-----
1502 -----BEGIN CERTIFICATE-----
1503 ... (the certificate for the CA)...
1504 -----END CERTIFICATE-----
1505 -----BEGIN CERTIFICATE-----
1506 ... (the root certificate for the CA's issuer)...
1507 -----END CERTIFICATE-----
1508
Antoine Pitrou152efa22010-05-16 18:19:27 +00001509CA certificates
1510^^^^^^^^^^^^^^^
1511
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001512If you are going to require validation of the other side of the connection's
1513certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandl7f01a132009-09-16 15:58:14 +00001514chains for each issuer you are willing to trust. Again, this file just contains
1515these chains concatenated together. For validation, Python will use the first
Donald Stufft41374652014-03-24 19:26:03 -04001516chain it finds in the file which matches. The platform's certificates file can
1517be used by calling :meth:`SSLContext.load_default_certs`, this is done
1518automatically with :func:`.create_default_context`.
Thomas Woutersed03b412007-08-28 21:37:11 +00001519
Antoine Pitrou152efa22010-05-16 18:19:27 +00001520Combined key and certificate
1521^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1522
1523Often the private key is stored in the same file as the certificate; in this
1524case, only the ``certfile`` parameter to :meth:`SSLContext.load_cert_chain`
1525and :func:`wrap_socket` needs to be passed. If the private key is stored
1526with the certificate, it should come before the first certificate in
1527the certificate chain::
1528
1529 -----BEGIN RSA PRIVATE KEY-----
1530 ... (private key in base64 encoding) ...
1531 -----END RSA PRIVATE KEY-----
1532 -----BEGIN CERTIFICATE-----
1533 ... (certificate in base64 PEM encoding) ...
1534 -----END CERTIFICATE-----
1535
1536Self-signed certificates
1537^^^^^^^^^^^^^^^^^^^^^^^^
1538
Georg Brandl7f01a132009-09-16 15:58:14 +00001539If you are going to create a server that provides SSL-encrypted connection
1540services, you will need to acquire a certificate for that service. There are
1541many ways of acquiring appropriate certificates, such as buying one from a
1542certification authority. Another common practice is to generate a self-signed
1543certificate. The simplest way to do this is with the OpenSSL package, using
1544something like the following::
Thomas Woutersed03b412007-08-28 21:37:11 +00001545
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001546 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
1547 Generating a 1024 bit RSA private key
1548 .......++++++
1549 .............................++++++
1550 writing new private key to 'cert.pem'
1551 -----
1552 You are about to be asked to enter information that will be incorporated
1553 into your certificate request.
1554 What you are about to enter is what is called a Distinguished Name or a DN.
1555 There are quite a few fields but you can leave some blank
1556 For some fields there will be a default value,
1557 If you enter '.', the field will be left blank.
1558 -----
1559 Country Name (2 letter code) [AU]:US
1560 State or Province Name (full name) [Some-State]:MyState
1561 Locality Name (eg, city) []:Some City
1562 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
1563 Organizational Unit Name (eg, section) []:My Group
1564 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
1565 Email Address []:ops@myserver.mygroup.myorganization.com
1566 %
Thomas Woutersed03b412007-08-28 21:37:11 +00001567
Georg Brandl7f01a132009-09-16 15:58:14 +00001568The disadvantage of a self-signed certificate is that it is its own root
1569certificate, and no one else will have it in their cache of known (and trusted)
1570root certificates.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001571
1572
Thomas Woutersed03b412007-08-28 21:37:11 +00001573Examples
1574--------
1575
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001576Testing for SSL support
1577^^^^^^^^^^^^^^^^^^^^^^^
1578
Georg Brandl7f01a132009-09-16 15:58:14 +00001579To test for the presence of SSL support in a Python installation, user code
1580should use the following idiom::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001581
1582 try:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001583 import ssl
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001584 except ImportError:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001585 pass
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001586 else:
Serhiy Storchakadba90392016-05-10 12:01:23 +03001587 ... # do something that requires SSL support
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001588
1589Client-side operation
1590^^^^^^^^^^^^^^^^^^^^^
1591
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001592This example creates a SSL context with the recommended security settings
1593for client sockets, including automatic certificate verification::
Thomas Woutersed03b412007-08-28 21:37:11 +00001594
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001595 >>> context = ssl.create_default_context()
Thomas Woutersed03b412007-08-28 21:37:11 +00001596
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001597If you prefer to tune security settings yourself, you might create
1598a context from scratch (but beware that you might not get the settings
1599right)::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001600
1601 >>> context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001602 >>> context.verify_mode = ssl.CERT_REQUIRED
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001603 >>> context.check_hostname = True
Antoine Pitrou152efa22010-05-16 18:19:27 +00001604 >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
1605
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001606(this snippet assumes your operating system places a bundle of all CA
1607certificates in ``/etc/ssl/certs/ca-bundle.crt``; if not, you'll get an
1608error and have to adjust the location)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001609
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001610When you use the context to connect to a server, :const:`CERT_REQUIRED`
Antoine Pitrou152efa22010-05-16 18:19:27 +00001611validates the server certificate: it ensures that the server certificate
1612was signed with one of the CA certificates, and checks the signature for
1613correctness::
1614
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001615 >>> conn = context.wrap_socket(socket.socket(socket.AF_INET),
1616 ... server_hostname="www.python.org")
1617 >>> conn.connect(("www.python.org", 443))
Antoine Pitrou152efa22010-05-16 18:19:27 +00001618
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001619You may then fetch the certificate::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001620
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001621 >>> cert = conn.getpeercert()
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001622
1623Visual inspection shows that the certificate does identify the desired service
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001624(that is, the HTTPS host ``www.python.org``)::
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001625
1626 >>> pprint.pprint(cert)
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001627 {'OCSP': ('http://ocsp.digicert.com',),
1628 'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',),
1629 'crlDistributionPoints': ('http://crl3.digicert.com/sha2-ev-server-g1.crl',
1630 'http://crl4.digicert.com/sha2-ev-server-g1.crl'),
1631 'issuer': ((('countryName', 'US'),),
1632 (('organizationName', 'DigiCert Inc'),),
1633 (('organizationalUnitName', 'www.digicert.com'),),
1634 (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),)),
1635 'notAfter': 'Sep 9 12:00:00 2016 GMT',
1636 'notBefore': 'Sep 5 00:00:00 2014 GMT',
1637 'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26',
1638 'subject': ((('businessCategory', 'Private Organization'),),
1639 (('1.3.6.1.4.1.311.60.2.1.3', 'US'),),
1640 (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),),
1641 (('serialNumber', '3359300'),),
1642 (('streetAddress', '16 Allen Rd'),),
1643 (('postalCode', '03894-4801'),),
1644 (('countryName', 'US'),),
1645 (('stateOrProvinceName', 'NH'),),
1646 (('localityName', 'Wolfeboro,'),),
1647 (('organizationName', 'Python Software Foundation'),),
1648 (('commonName', 'www.python.org'),)),
1649 'subjectAltName': (('DNS', 'www.python.org'),
1650 ('DNS', 'python.org'),
1651 ('DNS', 'pypi.python.org'),
1652 ('DNS', 'docs.python.org'),
1653 ('DNS', 'testpypi.python.org'),
1654 ('DNS', 'bugs.python.org'),
1655 ('DNS', 'wiki.python.org'),
1656 ('DNS', 'hg.python.org'),
1657 ('DNS', 'mail.python.org'),
1658 ('DNS', 'packaging.python.org'),
1659 ('DNS', 'pythonhosted.org'),
1660 ('DNS', 'www.pythonhosted.org'),
1661 ('DNS', 'test.pythonhosted.org'),
1662 ('DNS', 'us.pycon.org'),
1663 ('DNS', 'id.python.org')),
Antoine Pitrou441ae042012-01-06 20:06:15 +01001664 'version': 3}
Antoine Pitrou152efa22010-05-16 18:19:27 +00001665
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001666Now the SSL channel is established and the certificate verified, you can
1667proceed to talk with the server::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001668
Antoine Pitroudab64262010-09-19 13:31:06 +00001669 >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n")
1670 >>> pprint.pprint(conn.recv(1024).split(b"\r\n"))
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001671 [b'HTTP/1.1 200 OK',
1672 b'Date: Sat, 18 Oct 2014 18:27:20 GMT',
1673 b'Server: nginx',
1674 b'Content-Type: text/html; charset=utf-8',
1675 b'X-Frame-Options: SAMEORIGIN',
1676 b'Content-Length: 45679',
1677 b'Accept-Ranges: bytes',
1678 b'Via: 1.1 varnish',
1679 b'Age: 2188',
1680 b'X-Served-By: cache-lcy1134-LCY',
1681 b'X-Cache: HIT',
1682 b'X-Cache-Hits: 11',
1683 b'Vary: Cookie',
1684 b'Strict-Transport-Security: max-age=63072000; includeSubDomains',
Antoine Pitrou152efa22010-05-16 18:19:27 +00001685 b'Connection: close',
Antoine Pitrou152efa22010-05-16 18:19:27 +00001686 b'',
1687 b'']
1688
Antoine Pitrou152efa22010-05-16 18:19:27 +00001689See the discussion of :ref:`ssl-security` below.
1690
1691
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001692Server-side operation
1693^^^^^^^^^^^^^^^^^^^^^
1694
Antoine Pitrou152efa22010-05-16 18:19:27 +00001695For server operation, typically you'll need to have a server certificate, and
1696private key, each in a file. You'll first create a context holding the key
1697and the certificate, so that clients can check your authenticity. Then
1698you'll open a socket, bind it to a port, call :meth:`listen` on it, and start
1699waiting for clients to connect::
Thomas Woutersed03b412007-08-28 21:37:11 +00001700
1701 import socket, ssl
1702
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001703 context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001704 context.load_cert_chain(certfile="mycertfile", keyfile="mykeyfile")
1705
Thomas Woutersed03b412007-08-28 21:37:11 +00001706 bindsocket = socket.socket()
1707 bindsocket.bind(('myaddr.mydomain.com', 10023))
1708 bindsocket.listen(5)
1709
Antoine Pitrou152efa22010-05-16 18:19:27 +00001710When a client connects, you'll call :meth:`accept` on the socket to get the
1711new socket from the other end, and use the context's :meth:`SSLContext.wrap_socket`
1712method to create a server-side SSL socket for the connection::
Thomas Woutersed03b412007-08-28 21:37:11 +00001713
1714 while True:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001715 newsocket, fromaddr = bindsocket.accept()
1716 connstream = context.wrap_socket(newsocket, server_side=True)
1717 try:
1718 deal_with_client(connstream)
1719 finally:
Antoine Pitroub205d582011-01-02 22:09:27 +00001720 connstream.shutdown(socket.SHUT_RDWR)
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001721 connstream.close()
Thomas Woutersed03b412007-08-28 21:37:11 +00001722
Antoine Pitrou152efa22010-05-16 18:19:27 +00001723Then you'll read data from the ``connstream`` and do something with it till you
Georg Brandl7f01a132009-09-16 15:58:14 +00001724are finished with the client (or the client is finished with you)::
Thomas Woutersed03b412007-08-28 21:37:11 +00001725
1726 def deal_with_client(connstream):
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001727 data = connstream.recv(1024)
1728 # empty data means the client is finished with us
1729 while data:
1730 if not do_something(connstream, data):
1731 # we'll assume do_something returns False
1732 # when we're finished with client
1733 break
1734 data = connstream.recv(1024)
1735 # finished with client
Thomas Woutersed03b412007-08-28 21:37:11 +00001736
Antoine Pitrou152efa22010-05-16 18:19:27 +00001737And go back to listening for new client connections (of course, a real server
1738would probably handle each client connection in a separate thread, or put
Victor Stinner29611452014-10-10 12:52:43 +02001739the sockets in :ref:`non-blocking mode <ssl-nonblocking>` and use an event loop).
Antoine Pitrou152efa22010-05-16 18:19:27 +00001740
1741
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001742.. _ssl-nonblocking:
1743
1744Notes on non-blocking sockets
1745-----------------------------
1746
Antoine Pitroub4bebda2014-04-29 10:03:28 +02001747SSL sockets behave slightly different than regular sockets in
1748non-blocking mode. When working with non-blocking sockets, there are
1749thus several things you need to be aware of:
1750
1751- Most :class:`SSLSocket` methods will raise either
1752 :exc:`SSLWantWriteError` or :exc:`SSLWantReadError` instead of
1753 :exc:`BlockingIOError` if an I/O operation would
1754 block. :exc:`SSLWantReadError` will be raised if a read operation on
1755 the underlying socket is necessary, and :exc:`SSLWantWriteError` for
1756 a write operation on the underlying socket. Note that attempts to
1757 *write* to an SSL socket may require *reading* from the underlying
1758 socket first, and attempts to *read* from the SSL socket may require
1759 a prior *write* to the underlying socket.
1760
1761 .. versionchanged:: 3.5
1762
1763 In earlier Python versions, the :meth:`!SSLSocket.send` method
1764 returned zero instead of raising :exc:`SSLWantWriteError` or
1765 :exc:`SSLWantReadError`.
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001766
1767- Calling :func:`~select.select` tells you that the OS-level socket can be
1768 read from (or written to), but it does not imply that there is sufficient
1769 data at the upper SSL layer. For example, only part of an SSL frame might
1770 have arrived. Therefore, you must be ready to handle :meth:`SSLSocket.recv`
1771 and :meth:`SSLSocket.send` failures, and retry after another call to
1772 :func:`~select.select`.
1773
Antoine Pitrou75e03382014-05-18 00:55:13 +02001774- Conversely, since the SSL layer has its own framing, a SSL socket may
1775 still have data available for reading without :func:`~select.select`
1776 being aware of it. Therefore, you should first call
1777 :meth:`SSLSocket.recv` to drain any potentially available data, and then
1778 only block on a :func:`~select.select` call if still necessary.
1779
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001780 (of course, similar provisions apply when using other primitives such as
Antoine Pitrou75e03382014-05-18 00:55:13 +02001781 :func:`~select.poll`, or those in the :mod:`selectors` module)
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001782
1783- The SSL handshake itself will be non-blocking: the
1784 :meth:`SSLSocket.do_handshake` method has to be retried until it returns
1785 successfully. Here is a synopsis using :func:`~select.select` to wait for
1786 the socket's readiness::
1787
1788 while True:
1789 try:
1790 sock.do_handshake()
1791 break
Antoine Pitrou873bf262011-10-27 23:59:03 +02001792 except ssl.SSLWantReadError:
1793 select.select([sock], [], [])
1794 except ssl.SSLWantWriteError:
1795 select.select([], [sock], [])
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001796
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001797.. seealso::
1798
Victor Stinner29611452014-10-10 12:52:43 +02001799 The :mod:`asyncio` module supports :ref:`non-blocking SSL sockets
1800 <ssl-nonblocking>` and provides a
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001801 higher level API. It polls for events using the :mod:`selectors` module and
1802 handles :exc:`SSLWantWriteError`, :exc:`SSLWantReadError` and
1803 :exc:`BlockingIOError` exceptions. It runs the SSL handshake asynchronously
1804 as well.
1805
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001806
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001807Memory BIO Support
1808------------------
1809
1810.. versionadded:: 3.5
1811
1812Ever since the SSL module was introduced in Python 2.6, the :class:`SSLSocket`
1813class has provided two related but distinct areas of functionality:
1814
1815- SSL protocol handling
1816- Network IO
1817
1818The network IO API is identical to that provided by :class:`socket.socket`,
1819from which :class:`SSLSocket` also inherits. This allows an SSL socket to be
1820used as a drop-in replacement for a regular socket, making it very easy to add
1821SSL support to an existing application.
1822
1823Combining SSL protocol handling and network IO usually works well, but there
1824are some cases where it doesn't. An example is async IO frameworks that want to
1825use a different IO multiplexing model than the "select/poll on a file
1826descriptor" (readiness based) model that is assumed by :class:`socket.socket`
1827and by the internal OpenSSL socket IO routines. This is mostly relevant for
1828platforms like Windows where this model is not efficient. For this purpose, a
1829reduced scope variant of :class:`SSLSocket` called :class:`SSLObject` is
1830provided.
1831
1832.. class:: SSLObject
1833
1834 A reduced-scope variant of :class:`SSLSocket` representing an SSL protocol
Victor Stinner2debf152014-10-10 13:04:08 +02001835 instance that does not contain any network IO methods. This class is
1836 typically used by framework authors that want to implement asynchronous IO
1837 for SSL through memory buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001838
Victor Stinner2debf152014-10-10 13:04:08 +02001839 This class implements an interface on top of a low-level SSL object as
1840 implemented by OpenSSL. This object captures the state of an SSL connection
1841 but does not provide any network IO itself. IO needs to be performed through
1842 separate "BIO" objects which are OpenSSL's IO abstraction layer.
1843
1844 An :class:`SSLObject` instance can be created using the
1845 :meth:`~SSLContext.wrap_bio` method. This method will create the
1846 :class:`SSLObject` instance and bind it to a pair of BIOs. The *incoming*
1847 BIO is used to pass data from Python to the SSL protocol instance, while the
1848 *outgoing* BIO is used to pass data the other way around.
1849
1850 The following methods are available:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001851
Victor Stinner805b2622014-10-10 12:49:08 +02001852 - :attr:`~SSLSocket.context`
1853 - :attr:`~SSLSocket.server_side`
1854 - :attr:`~SSLSocket.server_hostname`
1855 - :meth:`~SSLSocket.read`
1856 - :meth:`~SSLSocket.write`
1857 - :meth:`~SSLSocket.getpeercert`
1858 - :meth:`~SSLSocket.selected_npn_protocol`
1859 - :meth:`~SSLSocket.cipher`
Benjamin Peterson4cb17812015-01-07 11:14:26 -06001860 - :meth:`~SSLSocket.shared_ciphers`
Victor Stinner805b2622014-10-10 12:49:08 +02001861 - :meth:`~SSLSocket.compression`
1862 - :meth:`~SSLSocket.pending`
1863 - :meth:`~SSLSocket.do_handshake`
1864 - :meth:`~SSLSocket.unwrap`
1865 - :meth:`~SSLSocket.get_channel_binding`
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001866
Victor Stinner2debf152014-10-10 13:04:08 +02001867 When compared to :class:`SSLSocket`, this object lacks the following
1868 features:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001869
Victor Stinner2debf152014-10-10 13:04:08 +02001870 - Any form of network IO incluging methods such as ``recv()`` and
1871 ``send()``.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001872
Victor Stinner2debf152014-10-10 13:04:08 +02001873 - There is no *do_handshake_on_connect* machinery. You must always manually
1874 call :meth:`~SSLSocket.do_handshake` to start the handshake.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001875
Victor Stinner2debf152014-10-10 13:04:08 +02001876 - There is no handling of *suppress_ragged_eofs*. All end-of-file conditions
1877 that are in violation of the protocol are reported via the
1878 :exc:`SSLEOFError` exception.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001879
Victor Stinner2debf152014-10-10 13:04:08 +02001880 - The method :meth:`~SSLSocket.unwrap` call does not return anything,
1881 unlike for an SSL socket where it returns the underlying socket.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001882
Victor Stinner2debf152014-10-10 13:04:08 +02001883 - The *server_name_callback* callback passed to
1884 :meth:`SSLContext.set_servername_callback` will get an :class:`SSLObject`
1885 instance instead of a :class:`SSLSocket` instance as its first parameter.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001886
Victor Stinner2debf152014-10-10 13:04:08 +02001887 Some notes related to the use of :class:`SSLObject`:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001888
Victor Stinner2debf152014-10-10 13:04:08 +02001889 - All IO on an :class:`SSLObject` is :ref:`non-blocking <ssl-nonblocking>`.
1890 This means that for example :meth:`~SSLSocket.read` will raise an
1891 :exc:`SSLWantReadError` if it needs more data than the incoming BIO has
1892 available.
1893
1894 - There is no module-level ``wrap_bio()`` call like there is for
1895 :meth:`~SSLContext.wrap_socket`. An :class:`SSLObject` is always created
1896 via an :class:`SSLContext`.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001897
Victor Stinner805b2622014-10-10 12:49:08 +02001898An SSLObject communicates with the outside world using memory buffers. The
1899class :class:`MemoryBIO` provides a memory buffer that can be used for this
1900purpose. It wraps an OpenSSL memory BIO (Basic IO) object:
1901
1902.. class:: MemoryBIO
1903
1904 A memory buffer that can be used to pass data between Python and an SSL
1905 protocol instance.
1906
1907 .. attribute:: MemoryBIO.pending
1908
1909 Return the number of bytes currently in the memory buffer.
1910
1911 .. attribute:: MemoryBIO.eof
1912
1913 A boolean indicating whether the memory BIO is current at the end-of-file
1914 position.
1915
1916 .. method:: MemoryBIO.read(n=-1)
1917
1918 Read up to *n* bytes from the memory buffer. If *n* is not specified or
1919 negative, all bytes are returned.
1920
1921 .. method:: MemoryBIO.write(buf)
1922
1923 Write the bytes from *buf* to the memory BIO. The *buf* argument must be an
1924 object supporting the buffer protocol.
1925
1926 The return value is the number of bytes written, which is always equal to
1927 the length of *buf*.
1928
1929 .. method:: MemoryBIO.write_eof()
1930
1931 Write an EOF marker to the memory BIO. After this method has been called, it
1932 is illegal to call :meth:`~MemoryBIO.write`. The attribute :attr:`eof` will
1933 become true after all data currently in the buffer has been read.
1934
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001935
Antoine Pitrou152efa22010-05-16 18:19:27 +00001936.. _ssl-security:
1937
1938Security considerations
1939-----------------------
1940
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01001941Best defaults
1942^^^^^^^^^^^^^
Antoine Pitrou152efa22010-05-16 18:19:27 +00001943
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01001944For **client use**, if you don't have any special requirements for your
1945security policy, it is highly recommended that you use the
1946:func:`create_default_context` function to create your SSL context.
1947It will load the system's trusted CA certificates, enable certificate
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01001948validation and hostname checking, and try to choose reasonably secure
1949protocol and cipher settings.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01001950
1951For example, here is how you would use the :class:`smtplib.SMTP` class to
1952create a trusted, secure connection to a SMTP server::
1953
1954 >>> import ssl, smtplib
1955 >>> smtp = smtplib.SMTP("mail.python.org", port=587)
1956 >>> context = ssl.create_default_context()
1957 >>> smtp.starttls(context=context)
1958 (220, b'2.0.0 Ready to start TLS')
1959
1960If a client certificate is needed for the connection, it can be added with
1961:meth:`SSLContext.load_cert_chain`.
1962
1963By contrast, if you create the SSL context by calling the :class:`SSLContext`
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01001964constructor yourself, it will not have certificate validation nor hostname
1965checking enabled by default. If you do so, please read the paragraphs below
1966to achieve a good security level.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01001967
1968Manual settings
1969^^^^^^^^^^^^^^^
1970
1971Verifying certificates
1972''''''''''''''''''''''
1973
Donald Stufft8b852f12014-05-20 12:58:38 -04001974When calling the :class:`SSLContext` constructor directly,
Antoine Pitrou152efa22010-05-16 18:19:27 +00001975:const:`CERT_NONE` is the default. Since it does not authenticate the other
1976peer, it can be insecure, especially in client mode where most of time you
1977would like to ensure the authenticity of the server you're talking to.
1978Therefore, when in client mode, it is highly recommended to use
1979:const:`CERT_REQUIRED`. However, it is in itself not sufficient; you also
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001980have to check that the server certificate, which can be obtained by calling
1981:meth:`SSLSocket.getpeercert`, matches the desired service. For many
1982protocols and applications, the service can be identified by the hostname;
Christian Heimes1aa9a752013-12-02 02:41:19 +01001983in this case, the :func:`match_hostname` function can be used. This common
1984check is automatically performed when :attr:`SSLContext.check_hostname` is
1985enabled.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001986
1987In server mode, if you want to authenticate your clients using the SSL layer
1988(rather than using a higher-level authentication mechanism), you'll also have
1989to specify :const:`CERT_REQUIRED` and similarly check the client certificate.
1990
1991 .. note::
1992
1993 In client mode, :const:`CERT_OPTIONAL` and :const:`CERT_REQUIRED` are
1994 equivalent unless anonymous ciphers are enabled (they are disabled
1995 by default).
Thomas Woutersed03b412007-08-28 21:37:11 +00001996
Antoine Pitroub5218772010-05-21 09:56:06 +00001997Protocol versions
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01001998'''''''''''''''''
Antoine Pitroub5218772010-05-21 09:56:06 +00001999
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002000SSL versions 2 and 3 are considered insecure and are therefore dangerous to
2001use. If you want maximum compatibility between clients and servers, it is
2002recommended to use :const:`PROTOCOL_SSLv23` as the protocol version and then
2003disable SSLv2 and SSLv3 explicitly using the :data:`SSLContext.options`
2004attribute::
Antoine Pitroub5218772010-05-21 09:56:06 +00002005
2006 context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
2007 context.options |= ssl.OP_NO_SSLv2
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002008 context.options |= ssl.OP_NO_SSLv3
Antoine Pitroub5218772010-05-21 09:56:06 +00002009
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02002010The SSL context created above will only allow TLSv1 and later (if
2011supported by your system) connections.
Antoine Pitroub5218772010-05-21 09:56:06 +00002012
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002013Cipher selection
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01002014''''''''''''''''
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002015
2016If you have advanced security requirements, fine-tuning of the ciphers
2017enabled when negotiating a SSL session is possible through the
2018:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
2019ssl module disables certain weak ciphers by default, but you may want
Donald Stufft79ccaa22014-03-21 21:33:34 -04002020to further restrict the cipher choice. Be sure to read OpenSSL's documentation
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002021about the `cipher list format <https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT>`_.
Donald Stufft79ccaa22014-03-21 21:33:34 -04002022If you want to check which ciphers are enabled by a given cipher list, use the
2023``openssl ciphers`` command on your system.
Antoine Pitroub7ffed82012-01-04 02:53:44 +01002024
Antoine Pitrou9eefe912013-11-17 15:35:33 +01002025Multi-processing
2026^^^^^^^^^^^^^^^^
2027
2028If using this module as part of a multi-processed application (using,
2029for example the :mod:`multiprocessing` or :mod:`concurrent.futures` modules),
2030be aware that OpenSSL's internal random number generator does not properly
2031handle forked processes. Applications must change the PRNG state of the
2032parent process if they use any SSL feature with :func:`os.fork`. Any
2033successful call of :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or
2034:func:`~ssl.RAND_pseudo_bytes` is sufficient.
2035
Georg Brandl48310cd2009-01-03 21:18:54 +00002036
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002037.. seealso::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002038
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002039 Class :class:`socket.socket`
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002040 Documentation of underlying :mod:`socket` class
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002041
Georg Brandl5d941342016-02-26 19:37:12 +01002042 `SSL/TLS Strong Encryption: An Introduction <https://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02002043 Intro from the Apache webserver documentation
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002044
Georg Brandl5d941342016-02-26 19:37:12 +01002045 `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 +00002046 Steve Kent
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002047
Georg Brandl5d941342016-02-26 19:37:12 +01002048 `RFC 1750: Randomness Recommendations for Security <https://www.ietf.org/rfc/rfc1750>`_
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002049 D. Eastlake et. al.
Thomas Wouters89d996e2007-09-08 17:39:28 +00002050
Georg Brandl5d941342016-02-26 19:37:12 +01002051 `RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile <https://www.ietf.org/rfc/rfc3280>`_
Thomas Wouters1b7f8912007-09-19 03:06:30 +00002052 Housley et. al.
Antoine Pitroud5323212010-10-22 18:19:07 +00002053
Georg Brandl5d941342016-02-26 19:37:12 +01002054 `RFC 4366: Transport Layer Security (TLS) Extensions <https://www.ietf.org/rfc/rfc4366>`_
Antoine Pitroud5323212010-10-22 18:19:07 +00002055 Blake-Wilson et. al.
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002056
Georg Brandl5d941342016-02-26 19:37:12 +01002057 `RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 <https://tools.ietf.org/html/rfc5246>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002058 T. Dierks et. al.
2059
Georg Brandl5d941342016-02-26 19:37:12 +01002060 `RFC 6066: Transport Layer Security (TLS) Extensions <https://tools.ietf.org/html/rfc6066>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002061 D. Eastlake
2062
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002063 `IANA TLS: Transport Layer Security (TLS) Parameters <https://www.iana.org/assignments/tls-parameters/tls-parameters.xml>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01002064 IANA