blob: cd237012605bc24e33fc881b2864ac581dc32043 [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
Thomas Woutersed03b412007-08-28 21:37:11 +000010
Thomas Wouters1b7f8912007-09-19 03:06:30 +000011.. index:: single: OpenSSL; (use in module ssl)
12
13.. index:: TLS, SSL, Transport Layer Security, Secure Sockets Layer
14
Raymond Hettinger469271d2011-01-27 20:38:46 +000015**Source code:** :source:`Lib/ssl.py`
16
17--------------
18
Georg Brandl7f01a132009-09-16 15:58:14 +000019This module provides access to Transport Layer Security (often known as "Secure
20Sockets Layer") encryption and peer authentication facilities for network
21sockets, both client-side and server-side. This module uses the OpenSSL
22library. It is available on all modern Unix systems, Windows, Mac OS X, and
23probably additional platforms, as long as OpenSSL is installed on that platform.
Thomas Woutersed03b412007-08-28 21:37:11 +000024
25.. note::
26
Georg Brandl7f01a132009-09-16 15:58:14 +000027 Some behavior may be platform dependent, since calls are made to the
28 operating system socket APIs. The installed version of OpenSSL may also
Antoine Pitrou2463e5f2013-03-28 22:24:43 +010029 cause variations in behavior. For example, TLSv1.1 and TLSv1.2 come with
30 openssl version 1.0.1.
Thomas Woutersed03b412007-08-28 21:37:11 +000031
Christian Heimes3046fe42013-10-29 21:08:56 +010032.. warning::
Antoine Pitrou9eefe912013-11-17 15:35:33 +010033 Don't use this module without reading the :ref:`ssl-security`. Doing so
34 may lead to a false sense of security, as the default settings of the
35 ssl module are not necessarily appropriate for your application.
Christian Heimes3046fe42013-10-29 21:08:56 +010036
Christian Heimes3046fe42013-10-29 21:08:56 +010037
Georg Brandl7f01a132009-09-16 15:58:14 +000038This section documents the objects and functions in the ``ssl`` module; for more
39general information about TLS, SSL, and certificates, the reader is referred to
40the documents in the "See Also" section at the bottom.
Thomas Woutersed03b412007-08-28 21:37:11 +000041
Georg Brandl7f01a132009-09-16 15:58:14 +000042This module provides a class, :class:`ssl.SSLSocket`, which is derived from the
43:class:`socket.socket` type, and provides a socket-like wrapper that also
44encrypts and decrypts the data going over the socket with SSL. It supports
Antoine Pitroudab64262010-09-19 13:31:06 +000045additional methods such as :meth:`getpeercert`, which retrieves the
46certificate of the other side of the connection, and :meth:`cipher`,which
47retrieves the cipher being used for the secure connection.
Thomas Woutersed03b412007-08-28 21:37:11 +000048
Antoine Pitrou152efa22010-05-16 18:19:27 +000049For more sophisticated applications, the :class:`ssl.SSLContext` class
50helps manage settings and certificates, which can then be inherited
51by SSL sockets created through the :meth:`SSLContext.wrap_socket` method.
52
53
Thomas Wouters1b7f8912007-09-19 03:06:30 +000054Functions, Constants, and Exceptions
55------------------------------------
56
57.. exception:: SSLError
58
Antoine Pitrou59fdd672010-10-08 10:37:08 +000059 Raised to signal an error from the underlying SSL implementation
60 (currently provided by the OpenSSL library). This signifies some
61 problem in the higher-level encryption and authentication layer that's
62 superimposed on the underlying network connection. This error
Antoine Pitrou5574c302011-10-12 17:53:43 +020063 is a subtype of :exc:`OSError`. The error code and message of
64 :exc:`SSLError` instances are provided by the OpenSSL library.
65
66 .. versionchanged:: 3.3
67 :exc:`SSLError` used to be a subtype of :exc:`socket.error`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +000068
Antoine Pitrou3b36fb12012-06-22 21:11:52 +020069 .. attribute:: library
70
71 A string mnemonic designating the OpenSSL submodule in which the error
72 occurred, such as ``SSL``, ``PEM`` or ``X509``. The range of possible
73 values depends on the OpenSSL version.
74
75 .. versionadded:: 3.3
76
77 .. attribute:: reason
78
79 A string mnemonic designating the reason this error occurred, for
80 example ``CERTIFICATE_VERIFY_FAILED``. The range of possible
81 values depends on the OpenSSL version.
82
83 .. versionadded:: 3.3
84
Antoine Pitrou41032a62011-10-27 23:56:55 +020085.. exception:: SSLZeroReturnError
86
87 A subclass of :exc:`SSLError` raised when trying to read or write and
88 the SSL connection has been closed cleanly. Note that this doesn't
89 mean that the underlying transport (read TCP) has been closed.
90
91 .. versionadded:: 3.3
92
93.. exception:: SSLWantReadError
94
95 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
96 <ssl-nonblocking>` when trying to read or write data, but more data needs
97 to be received on the underlying TCP transport before the request can be
98 fulfilled.
99
100 .. versionadded:: 3.3
101
102.. exception:: SSLWantWriteError
103
104 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
105 <ssl-nonblocking>` when trying to read or write data, but more data needs
106 to be sent on the underlying TCP transport before the request can be
107 fulfilled.
108
109 .. versionadded:: 3.3
110
111.. exception:: SSLSyscallError
112
113 A subclass of :exc:`SSLError` raised when a system error was encountered
114 while trying to fulfill an operation on a SSL socket. Unfortunately,
115 there is no easy way to inspect the original errno number.
116
117 .. versionadded:: 3.3
118
119.. exception:: SSLEOFError
120
121 A subclass of :exc:`SSLError` raised when the SSL connection has been
Antoine Pitrouf3dc2d72011-10-28 00:01:03 +0200122 terminated abruptly. Generally, you shouldn't try to reuse the underlying
Antoine Pitrou41032a62011-10-27 23:56:55 +0200123 transport when this error is encountered.
124
125 .. versionadded:: 3.3
126
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000127.. exception:: CertificateError
128
129 Raised to signal an error with a certificate (such as mismatching
130 hostname). Certificate errors detected by OpenSSL, though, raise
131 an :exc:`SSLError`.
132
133
134Socket creation
135^^^^^^^^^^^^^^^
136
137The following function allows for standalone socket creation. Starting from
138Python 3.2, it can be more flexible to use :meth:`SSLContext.wrap_socket`
139instead.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000140
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000141.. 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 +0000142
Georg Brandl7f01a132009-09-16 15:58:14 +0000143 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance
144 of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps
Antoine Pitrou3e86ba42013-12-28 17:26:33 +0100145 the underlying socket in an SSL context. ``sock`` must be a
146 :data:`~socket.SOCK_STREAM` socket; other socket types are unsupported.
147
148 For client-side sockets, the context construction is lazy; if the
149 underlying socket isn't connected yet, the context construction will be
150 performed after :meth:`connect` is called on the socket. For
151 server-side sockets, if the socket has no remote peer, it is assumed
152 to be a listening socket, and the server-side SSL wrapping is
153 automatically performed on client connections accepted via the
154 :meth:`accept` method. :func:`wrap_socket` may raise :exc:`SSLError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000155
Georg Brandl7f01a132009-09-16 15:58:14 +0000156 The ``keyfile`` and ``certfile`` parameters specify optional files which
157 contain a certificate to be used to identify the local side of the
158 connection. See the discussion of :ref:`ssl-certificates` for more
159 information on how the certificate is stored in the ``certfile``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000160
Georg Brandl7f01a132009-09-16 15:58:14 +0000161 The parameter ``server_side`` is a boolean which identifies whether
162 server-side or client-side behavior is desired from this socket.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000163
Georg Brandl7f01a132009-09-16 15:58:14 +0000164 The parameter ``cert_reqs`` specifies whether a certificate is required from
165 the other side of the connection, and whether it will be validated if
166 provided. It must be one of the three values :const:`CERT_NONE`
167 (certificates ignored), :const:`CERT_OPTIONAL` (not required, but validated
168 if provided), or :const:`CERT_REQUIRED` (required and validated). If the
169 value of this parameter is not :const:`CERT_NONE`, then the ``ca_certs``
170 parameter must point to a file of CA certificates.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000171
Georg Brandl7f01a132009-09-16 15:58:14 +0000172 The ``ca_certs`` file contains a set of concatenated "certification
173 authority" certificates, which are used to validate certificates passed from
174 the other end of the connection. See the discussion of
175 :ref:`ssl-certificates` for more information about how to arrange the
176 certificates in this file.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000177
Georg Brandl7f01a132009-09-16 15:58:14 +0000178 The parameter ``ssl_version`` specifies which version of the SSL protocol to
179 use. Typically, the server chooses a particular protocol version, and the
180 client must adapt to the server's choice. Most of the versions are not
Antoine Pitrou84a2edc2012-01-09 21:35:11 +0100181 interoperable with the other versions. If not specified, the default is
182 :data:`PROTOCOL_SSLv23`; it provides the most compatibility with other
Georg Brandl7f01a132009-09-16 15:58:14 +0000183 versions.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000184
Georg Brandl7f01a132009-09-16 15:58:14 +0000185 Here's a table showing which versions in a client (down the side) can connect
186 to which versions in a server (along the top):
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000187
188 .. table::
189
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100190 ======================== ========= ========= ========== ========= =========== ===========
191 *client* / **server** **SSLv2** **SSLv3** **SSLv23** **TLSv1** **TLSv1.1** **TLSv1.2**
192 ------------------------ --------- --------- ---------- --------- ----------- -----------
193 *SSLv2* yes no yes no no no
194 *SSLv3* no yes yes no no no
Antoine Pitrou2b207ba2014-12-03 20:00:56 +0100195 *SSLv23* no yes yes yes yes yes
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100196 *TLSv1* no no yes yes no no
197 *TLSv1.1* no no yes no yes no
198 *TLSv1.2* no no yes no no yes
199 ======================== ========= ========= ========== ========= =========== ===========
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000200
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000201 .. note::
202
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000203 Which connections succeed will vary depending on the version of
Antoine Pitrou2b207ba2014-12-03 20:00:56 +0100204 OpenSSL. For example, before OpenSSL 1.0.0, an SSLv23 client
205 would always attempt SSLv2 connections.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000206
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000207 The *ciphers* parameter sets the available ciphers for this SSL object.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000208 It should be a string in the `OpenSSL cipher list format
209 <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`_.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000210
Bill Janssen48dc27c2007-12-05 03:38:10 +0000211 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
212 handshake automatically after doing a :meth:`socket.connect`, or whether the
Georg Brandl7f01a132009-09-16 15:58:14 +0000213 application program will call it explicitly, by invoking the
214 :meth:`SSLSocket.do_handshake` method. Calling
215 :meth:`SSLSocket.do_handshake` explicitly gives the program control over the
216 blocking behavior of the socket I/O involved in the handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000217
Georg Brandl7f01a132009-09-16 15:58:14 +0000218 The parameter ``suppress_ragged_eofs`` specifies how the
Antoine Pitroudab64262010-09-19 13:31:06 +0000219 :meth:`SSLSocket.recv` method should signal unexpected EOF from the other end
Georg Brandl7f01a132009-09-16 15:58:14 +0000220 of the connection. If specified as :const:`True` (the default), it returns a
Antoine Pitroudab64262010-09-19 13:31:06 +0000221 normal EOF (an empty bytes object) in response to unexpected EOF errors
222 raised from the underlying socket; if :const:`False`, it will raise the
223 exceptions back to the caller.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000224
Ezio Melotti4d5195b2010-04-20 10:57:44 +0000225 .. versionchanged:: 3.2
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000226 New optional argument *ciphers*.
227
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100228
229Context creation
230^^^^^^^^^^^^^^^^
231
232A convenience function helps create :class:`SSLContext` objects for common
233purposes.
234
235.. function:: create_default_context(purpose=Purpose.SERVER_AUTH, cafile=None, capath=None, cadata=None)
236
237 Return a new :class:`SSLContext` object with default settings for
238 the given *purpose*. The settings are chosen by the :mod:`ssl` module,
239 and usually represent a higher security level than when calling the
240 :class:`SSLContext` constructor directly.
241
242 *cafile*, *capath*, *cadata* represent optional CA certificates to
243 trust for certificate verification, as in
244 :meth:`SSLContext.load_verify_locations`. If all three are
245 :const:`None`, this function can choose to trust the system's default
246 CA certificates instead.
247
Donald Stufft6a2ba942014-03-23 19:05:28 -0400248 The settings in Python 3.4 are: :data:`PROTOCOL_SSLv23`, :data:`OP_NO_SSLv2`,
249 and :data:`OP_NO_SSLv3` with high encryption cipher suites without RC4 and
250 without unauthenticated cipher suites. Passing :data:`~Purpose.SERVER_AUTH`
251 as *purpose* sets :data:`~SSLContext.verify_mode` to :data:`CERT_REQUIRED`
252 and either loads CA certificates (when at least one of *cafile*, *capath* or
253 *cadata* is given) or uses :meth:`SSLContext.load_default_certs` to load
254 default CA certificates.
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100255
256 .. note::
257 The protocol, options, cipher and other settings may change to more
258 restrictive values anytime without prior deprecation. The values
259 represent a fair balance between compatibility and security.
260
261 If your application needs specific settings, you should create a
262 :class:`SSLContext` and apply the settings yourself.
263
Donald Stufft6a2ba942014-03-23 19:05:28 -0400264 .. note::
265 If you find that when certain older clients or servers attempt to connect
266 with a :class:`SSLContext` created by this function that they get an
267 error stating "Protocol or cipher suite mismatch", it may be that they
268 only support SSL3.0 which this function excludes using the
269 :data:`OP_NO_SSLv3`. SSL3.0 has problematic security due to a number of
270 poor implementations and it's reliance on MD5 within the protocol. If you
271 wish to continue to use this function but still allow SSL 3.0 connections
272 you can re-enable them using::
273
274 ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
275 ctx.options &= ~ssl.OP_NO_SSLv3
276
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100277 .. versionadded:: 3.4
278
279
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000280Random generation
281^^^^^^^^^^^^^^^^^
282
Victor Stinner99c8b162011-05-24 12:05:19 +0200283.. function:: RAND_bytes(num)
284
Victor Stinnera6752062011-05-25 11:27:40 +0200285 Returns *num* cryptographically strong pseudo-random bytes. Raises an
286 :class:`SSLError` if the PRNG has not been seeded with enough data or if the
287 operation is not supported by the current RAND method. :func:`RAND_status`
288 can be used to check the status of the PRNG and :func:`RAND_add` can be used
289 to seed the PRNG.
Victor Stinner99c8b162011-05-24 12:05:19 +0200290
Victor Stinner19fb53c2011-05-24 21:32:40 +0200291 Read the Wikipedia article, `Cryptographically secure pseudorandom number
Victor Stinnera6752062011-05-25 11:27:40 +0200292 generator (CSPRNG)
Victor Stinner19fb53c2011-05-24 21:32:40 +0200293 <http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator>`_,
294 to get the requirements of a cryptographically generator.
295
Victor Stinner99c8b162011-05-24 12:05:19 +0200296 .. versionadded:: 3.3
297
298.. function:: RAND_pseudo_bytes(num)
299
300 Returns (bytes, is_cryptographic): bytes are *num* pseudo-random bytes,
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200301 is_cryptographic is ``True`` if the bytes generated are cryptographically
Victor Stinnera6752062011-05-25 11:27:40 +0200302 strong. Raises an :class:`SSLError` if the operation is not supported by the
303 current RAND method.
Victor Stinner99c8b162011-05-24 12:05:19 +0200304
Victor Stinner19fb53c2011-05-24 21:32:40 +0200305 Generated pseudo-random byte sequences will be unique if they are of
306 sufficient length, but are not necessarily unpredictable. They can be used
307 for non-cryptographic purposes and for certain purposes in cryptographic
308 protocols, but usually not for key generation etc.
309
Victor Stinner99c8b162011-05-24 12:05:19 +0200310 .. versionadded:: 3.3
311
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000312.. function:: RAND_status()
313
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200314 Returns ``True`` if the SSL pseudo-random number generator has been seeded with
315 'enough' randomness, and ``False`` otherwise. You can use :func:`ssl.RAND_egd`
Georg Brandl7f01a132009-09-16 15:58:14 +0000316 and :func:`ssl.RAND_add` to increase the randomness of the pseudo-random
317 number generator.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000318
319.. function:: RAND_egd(path)
320
Victor Stinner99c8b162011-05-24 12:05:19 +0200321 If you are running an entropy-gathering daemon (EGD) somewhere, and *path*
Georg Brandl7f01a132009-09-16 15:58:14 +0000322 is the pathname of a socket connection open to it, this will read 256 bytes
323 of randomness from the socket, and add it to the SSL pseudo-random number
324 generator to increase the security of generated secret keys. This is
325 typically only necessary on systems without better sources of randomness.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000326
Georg Brandl7f01a132009-09-16 15:58:14 +0000327 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources
328 of entropy-gathering daemons.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000329
330.. function:: RAND_add(bytes, entropy)
331
Victor Stinner99c8b162011-05-24 12:05:19 +0200332 Mixes the given *bytes* into the SSL pseudo-random number generator. The
333 parameter *entropy* (a float) is a lower bound on the entropy contained in
Georg Brandl7f01a132009-09-16 15:58:14 +0000334 string (so you can always use :const:`0.0`). See :rfc:`1750` for more
335 information on sources of entropy.
Thomas Woutersed03b412007-08-28 21:37:11 +0000336
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000337Certificate handling
338^^^^^^^^^^^^^^^^^^^^
339
340.. function:: match_hostname(cert, hostname)
341
342 Verify that *cert* (in decoded format as returned by
343 :meth:`SSLSocket.getpeercert`) matches the given *hostname*. The rules
344 applied are those for checking the identity of HTTPS servers as outlined
Georg Brandl72c98d32013-10-27 07:16:53 +0100345 in :rfc:`2818` and :rfc:`6125`, except that IP addresses are not currently
346 supported. In addition to HTTPS, this function should be suitable for
347 checking the identity of servers in various SSL-based protocols such as
348 FTPS, IMAPS, POPS and others.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000349
350 :exc:`CertificateError` is raised on failure. On success, the function
351 returns nothing::
352
353 >>> cert = {'subject': ((('commonName', 'example.com'),),)}
354 >>> ssl.match_hostname(cert, "example.com")
355 >>> ssl.match_hostname(cert, "example.org")
356 Traceback (most recent call last):
357 File "<stdin>", line 1, in <module>
358 File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
359 ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
360
361 .. versionadded:: 3.2
362
Georg Brandl72c98d32013-10-27 07:16:53 +0100363 .. versionchanged:: 3.3.3
364 The function now follows :rfc:`6125`, section 6.4.3 and does neither
365 match multiple wildcards (e.g. ``*.*.com`` or ``*a*.example.org``) nor
366 a wildcard inside an internationalized domain names (IDN) fragment.
367 IDN A-labels such as ``www*.xn--pthon-kva.org`` are still supported,
368 but ``x*.python.org`` no longer matches ``xn--tda.python.org``.
369
Antoine Pitrouc695c952014-04-28 20:57:36 +0200370.. function:: cert_time_to_seconds(cert_time)
Thomas Woutersed03b412007-08-28 21:37:11 +0000371
Antoine Pitrouc695c952014-04-28 20:57:36 +0200372 Return the time in seconds since the Epoch, given the ``cert_time``
373 string representing the "notBefore" or "notAfter" date from a
374 certificate in ``"%b %d %H:%M:%S %Y %Z"`` strptime format (C
375 locale).
Thomas Woutersed03b412007-08-28 21:37:11 +0000376
Antoine Pitrouc695c952014-04-28 20:57:36 +0200377 Here's an example:
Thomas Woutersed03b412007-08-28 21:37:11 +0000378
Antoine Pitrouc695c952014-04-28 20:57:36 +0200379 .. doctest:: newcontext
380
381 >>> import ssl
382 >>> timestamp = ssl.cert_time_to_seconds("Jan 5 09:34:43 2018 GMT")
383 >>> timestamp
384 1515144883
385 >>> from datetime import datetime
386 >>> print(datetime.utcfromtimestamp(timestamp))
387 2018-01-05 09:34:43
388
389 "notBefore" or "notAfter" dates must use GMT (:rfc:`5280`).
390
391 .. versionchanged:: 3.5
392 Interpret the input time as a time in UTC as specified by 'GMT'
393 timezone in the input string. Local timezone was used
394 previously. Return an integer (no fractions of a second in the
395 input format)
Thomas Woutersed03b412007-08-28 21:37:11 +0000396
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200397.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None)
Thomas Woutersed03b412007-08-28 21:37:11 +0000398
Georg Brandl7f01a132009-09-16 15:58:14 +0000399 Given the address ``addr`` of an SSL-protected server, as a (*hostname*,
400 *port-number*) pair, fetches the server's certificate, and returns it as a
401 PEM-encoded string. If ``ssl_version`` is specified, uses that version of
402 the SSL protocol to attempt to connect to the server. If ``ca_certs`` is
403 specified, it should be a file containing a list of root certificates, the
404 same format as used for the same parameter in :func:`wrap_socket`. The call
405 will attempt to validate the server certificate against that set of root
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000406 certificates, and will fail if the validation attempt fails.
407
Antoine Pitrou15399c32011-04-28 19:23:55 +0200408 .. versionchanged:: 3.3
409 This function is now IPv6-compatible.
410
Antoine Pitrou94a5b662014-04-16 18:56:28 +0200411 .. versionchanged:: 3.5
412 The default *ssl_version* is changed from :data:`PROTOCOL_SSLv3` to
413 :data:`PROTOCOL_SSLv23` for maximum compatibility with modern servers.
414
Georg Brandl7f01a132009-09-16 15:58:14 +0000415.. function:: DER_cert_to_PEM_cert(DER_cert_bytes)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000416
417 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
418 string version of the same certificate.
419
Georg Brandl7f01a132009-09-16 15:58:14 +0000420.. function:: PEM_cert_to_DER_cert(PEM_cert_string)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000421
Georg Brandl7f01a132009-09-16 15:58:14 +0000422 Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of
423 bytes for that same certificate.
Thomas Woutersed03b412007-08-28 21:37:11 +0000424
Christian Heimes6d7ad132013-06-09 18:02:55 +0200425.. function:: get_default_verify_paths()
426
427 Returns a named tuple with paths to OpenSSL's default cafile and capath.
428 The paths are the same as used by
429 :meth:`SSLContext.set_default_verify_paths`. The return value is a
430 :term:`named tuple` ``DefaultVerifyPaths``:
431
432 * :attr:`cafile` - resolved path to cafile or None if the file doesn't exist,
433 * :attr:`capath` - resolved path to capath or None if the directory doesn't exist,
434 * :attr:`openssl_cafile_env` - OpenSSL's environment key that points to a cafile,
435 * :attr:`openssl_cafile` - hard coded path to a cafile,
436 * :attr:`openssl_capath_env` - OpenSSL's environment key that points to a capath,
437 * :attr:`openssl_capath` - hard coded path to a capath directory
438
439 .. versionadded:: 3.4
440
Christian Heimes44109d72013-11-22 01:51:30 +0100441.. function:: enum_certificates(store_name)
Christian Heimes46bebee2013-06-09 19:03:31 +0200442
443 Retrieve certificates from Windows' system cert store. *store_name* may be
444 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
Christian Heimes44109d72013-11-22 01:51:30 +0100445 stores, too.
Christian Heimes46bebee2013-06-09 19:03:31 +0200446
Christian Heimes44109d72013-11-22 01:51:30 +0100447 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
448 The encoding_type specifies the encoding of cert_bytes. It is either
449 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
450 PKCS#7 ASN.1 data. Trust specifies the purpose of the certificate as a set
451 of OIDS or exactly ``True`` if the certificate is trustworthy for all
452 purposes.
453
454 Example::
455
456 >>> ssl.enum_certificates("CA")
457 [(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
458 (b'data...', 'x509_asn', True)]
Christian Heimes46bebee2013-06-09 19:03:31 +0200459
460 Availability: Windows.
461
462 .. versionadded:: 3.4
Christian Heimes6d7ad132013-06-09 18:02:55 +0200463
Christian Heimes44109d72013-11-22 01:51:30 +0100464.. function:: enum_crls(store_name)
465
466 Retrieve CRLs from Windows' system cert store. *store_name* may be
467 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
468 stores, too.
469
470 The function returns a list of (cert_bytes, encoding_type, trust) tuples.
471 The encoding_type specifies the encoding of cert_bytes. It is either
472 :const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for
473 PKCS#7 ASN.1 data.
474
475 Availability: Windows.
476
477 .. versionadded:: 3.4
478
479
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000480Constants
481^^^^^^^^^
482
Thomas Woutersed03b412007-08-28 21:37:11 +0000483.. data:: CERT_NONE
484
Antoine Pitrou152efa22010-05-16 18:19:27 +0000485 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
486 parameter to :func:`wrap_socket`. In this mode (the default), no
487 certificates will be required from the other side of the socket connection.
488 If a certificate is received from the other end, no attempt to validate it
489 is made.
490
491 See the discussion of :ref:`ssl-security` below.
Thomas Woutersed03b412007-08-28 21:37:11 +0000492
493.. data:: CERT_OPTIONAL
494
Antoine Pitrou152efa22010-05-16 18:19:27 +0000495 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
496 parameter to :func:`wrap_socket`. In this mode no certificates will be
497 required from the other side of the socket connection; but if they
498 are provided, validation will be attempted and an :class:`SSLError`
499 will be raised on failure.
500
501 Use of this setting requires a valid set of CA certificates to
502 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
503 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000504
505.. data:: CERT_REQUIRED
506
Antoine Pitrou152efa22010-05-16 18:19:27 +0000507 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
508 parameter to :func:`wrap_socket`. In this mode, certificates are
509 required from the other side of the socket connection; an :class:`SSLError`
510 will be raised if no certificate is provided, or if its validation fails.
511
512 Use of this setting requires a valid set of CA certificates to
513 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
514 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000515
Christian Heimes22587792013-11-21 23:56:13 +0100516.. data:: VERIFY_DEFAULT
517
518 Possible value for :attr:`SSLContext.verify_flags`. In this mode,
519 certificate revocation lists (CRLs) are not checked. By default OpenSSL
520 does neither require nor verify CRLs.
521
522 .. versionadded:: 3.4
523
524.. data:: VERIFY_CRL_CHECK_LEAF
525
526 Possible value for :attr:`SSLContext.verify_flags`. In this mode, only the
527 peer cert is check but non of the intermediate CA certificates. The mode
528 requires a valid CRL that is signed by the peer cert's issuer (its direct
529 ancestor CA). If no proper has been loaded
530 :attr:`SSLContext.load_verify_locations`, validation will fail.
531
532 .. versionadded:: 3.4
533
534.. data:: VERIFY_CRL_CHECK_CHAIN
535
536 Possible value for :attr:`SSLContext.verify_flags`. In this mode, CRLs of
537 all certificates in the peer cert chain are checked.
538
539 .. versionadded:: 3.4
540
541.. data:: VERIFY_X509_STRICT
542
543 Possible value for :attr:`SSLContext.verify_flags` to disable workarounds
544 for broken X.509 certificates.
545
546 .. versionadded:: 3.4
547
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200548.. data:: PROTOCOL_SSLv23
549
550 Selects the highest protocol version that both the client and server support.
551 Despite the name, this option can select "TLS" protocols as well as "SSL".
552
Thomas Woutersed03b412007-08-28 21:37:11 +0000553.. data:: PROTOCOL_SSLv2
554
555 Selects SSL version 2 as the channel encryption protocol.
556
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500557 This protocol is not available if OpenSSL is compiled with the
558 ``OPENSSL_NO_SSL2`` flag.
Victor Stinner3de49192011-05-09 00:42:58 +0200559
Antoine Pitrou8eac60d2010-05-16 14:19:41 +0000560 .. warning::
561
562 SSL version 2 is insecure. Its use is highly discouraged.
563
Thomas Woutersed03b412007-08-28 21:37:11 +0000564.. data:: PROTOCOL_SSLv3
565
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200566 Selects SSL version 3 as the channel encryption protocol.
567
Benjamin Petersonb92fd012014-12-06 11:36:32 -0500568 This protocol is not be available if OpenSSL is compiled with the
569 ``OPENSSL_NO_SSLv3`` flag.
570
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200571 .. warning::
572
573 SSL version 3 is insecure. Its use is highly discouraged.
Thomas Woutersed03b412007-08-28 21:37:11 +0000574
575.. data:: PROTOCOL_TLSv1
576
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100577 Selects TLS version 1.0 as the channel encryption protocol.
578
579.. data:: PROTOCOL_TLSv1_1
580
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100581 Selects TLS version 1.1 as the channel encryption protocol.
582 Available only with openssl version 1.0.1+.
583
584 .. versionadded:: 3.4
585
586.. data:: PROTOCOL_TLSv1_2
587
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +0200588 Selects TLS version 1.2 as the channel encryption protocol. This is the
589 most modern version, and probably the best choice for maximum protection,
590 if both sides can speak it. Available only with openssl version 1.0.1+.
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100591
592 .. versionadded:: 3.4
Thomas Woutersed03b412007-08-28 21:37:11 +0000593
Antoine Pitroub5218772010-05-21 09:56:06 +0000594.. data:: OP_ALL
595
596 Enables workarounds for various bugs present in other SSL implementations.
Antoine Pitrou9f6b02e2012-01-27 10:02:55 +0100597 This option is set by default. It does not necessarily set the same
598 flags as OpenSSL's ``SSL_OP_ALL`` constant.
Antoine Pitroub5218772010-05-21 09:56:06 +0000599
600 .. versionadded:: 3.2
601
602.. data:: OP_NO_SSLv2
603
604 Prevents an SSLv2 connection. This option is only applicable in
605 conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from
606 choosing SSLv2 as the protocol version.
607
608 .. versionadded:: 3.2
609
610.. data:: OP_NO_SSLv3
611
612 Prevents an SSLv3 connection. This option is only applicable in
613 conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from
614 choosing SSLv3 as the protocol version.
615
616 .. versionadded:: 3.2
617
618.. data:: OP_NO_TLSv1
619
620 Prevents a TLSv1 connection. This option is only applicable in
621 conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from
622 choosing TLSv1 as the protocol version.
623
624 .. versionadded:: 3.2
625
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100626.. data:: OP_NO_TLSv1_1
627
628 Prevents a TLSv1.1 connection. This option is only applicable in conjunction
629 with :const:`PROTOCOL_SSLv23`. It prevents the peers from choosing TLSv1.1 as
630 the protocol version. Available only with openssl version 1.0.1+.
631
632 .. versionadded:: 3.4
633
634.. data:: OP_NO_TLSv1_2
635
636 Prevents a TLSv1.2 connection. This option is only applicable in conjunction
637 with :const:`PROTOCOL_SSLv23`. It prevents the peers from choosing TLSv1.2 as
638 the protocol version. Available only with openssl version 1.0.1+.
639
640 .. versionadded:: 3.4
641
Antoine Pitrou6db49442011-12-19 13:27:11 +0100642.. data:: OP_CIPHER_SERVER_PREFERENCE
643
644 Use the server's cipher ordering preference, rather than the client's.
645 This option has no effect on client sockets and SSLv2 server sockets.
646
647 .. versionadded:: 3.3
648
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100649.. data:: OP_SINGLE_DH_USE
650
651 Prevents re-use of the same DH key for distinct SSL sessions. This
652 improves forward secrecy but requires more computational resources.
653 This option only applies to server sockets.
654
655 .. versionadded:: 3.3
656
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100657.. data:: OP_SINGLE_ECDH_USE
658
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100659 Prevents re-use of the same ECDH key for distinct SSL sessions. This
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100660 improves forward secrecy but requires more computational resources.
661 This option only applies to server sockets.
662
663 .. versionadded:: 3.3
664
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100665.. data:: OP_NO_COMPRESSION
666
667 Disable compression on the SSL channel. This is useful if the application
668 protocol supports its own compression scheme.
669
670 This option is only available with OpenSSL 1.0.0 and later.
671
672 .. versionadded:: 3.3
673
Antoine Pitrou501da612011-12-21 09:27:41 +0100674.. data:: HAS_ECDH
675
676 Whether the OpenSSL library has built-in support for Elliptic Curve-based
677 Diffie-Hellman key exchange. This should be true unless the feature was
678 explicitly disabled by the distributor.
679
680 .. versionadded:: 3.3
681
Antoine Pitroud5323212010-10-22 18:19:07 +0000682.. data:: HAS_SNI
683
684 Whether the OpenSSL library has built-in support for the *Server Name
Benjamin Peterson7243b572014-11-23 17:04:34 -0600685 Indication* extension (as defined in :rfc:`4366`).
Antoine Pitroud5323212010-10-22 18:19:07 +0000686
687 .. versionadded:: 3.2
688
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100689.. data:: HAS_NPN
690
691 Whether the OpenSSL library has built-in support for *Next Protocol
692 Negotiation* as described in the `NPN draft specification
693 <http://tools.ietf.org/html/draft-agl-tls-nextprotoneg>`_. When true,
694 you can use the :meth:`SSLContext.set_npn_protocols` method to advertise
695 which protocols you want to support.
696
697 .. versionadded:: 3.3
698
Antoine Pitroud6494802011-07-21 01:11:30 +0200699.. data:: CHANNEL_BINDING_TYPES
700
701 List of supported TLS channel binding types. Strings in this list
702 can be used as arguments to :meth:`SSLSocket.get_channel_binding`.
703
704 .. versionadded:: 3.3
705
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000706.. data:: OPENSSL_VERSION
707
708 The version string of the OpenSSL library loaded by the interpreter::
709
710 >>> ssl.OPENSSL_VERSION
711 'OpenSSL 0.9.8k 25 Mar 2009'
712
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000713 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000714
715.. data:: OPENSSL_VERSION_INFO
716
717 A tuple of five integers representing version information about the
718 OpenSSL library::
719
720 >>> ssl.OPENSSL_VERSION_INFO
721 (0, 9, 8, 11, 15)
722
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000723 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000724
725.. data:: OPENSSL_VERSION_NUMBER
726
727 The raw version number of the OpenSSL library, as a single integer::
728
729 >>> ssl.OPENSSL_VERSION_NUMBER
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000730 9470143
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000731 >>> hex(ssl.OPENSSL_VERSION_NUMBER)
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000732 '0x9080bf'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000733
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000734 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000735
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100736.. data:: ALERT_DESCRIPTION_HANDSHAKE_FAILURE
737 ALERT_DESCRIPTION_INTERNAL_ERROR
738 ALERT_DESCRIPTION_*
739
740 Alert Descriptions from :rfc:`5246` and others. The `IANA TLS Alert Registry
741 <http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6>`_
742 contains this list and references to the RFCs where their meaning is defined.
743
744 Used as the return value of the callback function in
745 :meth:`SSLContext.set_servername_callback`.
746
747 .. versionadded:: 3.4
748
Christian Heimes72d28502013-11-23 13:56:58 +0100749.. data:: Purpose.SERVER_AUTH
750
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100751 Option for :func:`create_default_context` and
752 :meth:`SSLContext.load_default_certs`. This value indicates that the
753 context may be used to authenticate Web servers (therefore, it will
754 be used to create client-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100755
756 .. versionadded:: 3.4
757
Christian Heimes6b2ff982013-11-23 14:42:01 +0100758.. data:: Purpose.CLIENT_AUTH
Christian Heimes72d28502013-11-23 13:56:58 +0100759
Antoine Pitrou5bef4102013-11-23 16:16:29 +0100760 Option for :func:`create_default_context` and
761 :meth:`SSLContext.load_default_certs`. This value indicates that the
762 context may be used to authenticate Web clients (therefore, it will
763 be used to create server-side sockets).
Christian Heimes72d28502013-11-23 13:56:58 +0100764
765 .. versionadded:: 3.4
766
Thomas Woutersed03b412007-08-28 21:37:11 +0000767
Antoine Pitrou152efa22010-05-16 18:19:27 +0000768SSL Sockets
769-----------
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000770
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200771.. class:: SSLSocket(socket.socket)
Antoine Pitrou792ff3e2010-09-19 13:19:21 +0000772
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200773 SSL sockets provide the following methods of :ref:`socket-objects`:
Zachary Wareba9fb0d2014-06-11 15:02:25 -0500774
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200775 - :meth:`~socket.socket.accept()`
776 - :meth:`~socket.socket.bind()`
777 - :meth:`~socket.socket.close()`
778 - :meth:`~socket.socket.connect()`
779 - :meth:`~socket.socket.detach()`
780 - :meth:`~socket.socket.fileno()`
781 - :meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`
782 - :meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`
783 - :meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`,
784 :meth:`~socket.socket.setblocking()`
785 - :meth:`~socket.socket.listen()`
786 - :meth:`~socket.socket.makefile()`
787 - :meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()`
788 (but passing a non-zero ``flags`` argument is not allowed)
789 - :meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with
790 the same limitation)
Victor Stinner92127a52014-10-10 12:43:17 +0200791 - :meth:`~socket.socket.sendfile()` (but :mod:`os.sendfile` will be used
792 for plain-text sockets only, else :meth:`~socket.socket.send()` will be used)
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200793 - :meth:`~socket.socket.shutdown()`
Zachary Wareba9fb0d2014-06-11 15:02:25 -0500794
Victor Stinner3c3d3c72014-10-10 12:06:51 +0200795 However, since the SSL (and TLS) protocol has its own framing atop
796 of TCP, the SSL sockets abstraction can, in certain respects, diverge from
797 the specification of normal, OS-level sockets. See especially the
798 :ref:`notes on non-blocking sockets <ssl-nonblocking>`.
Antoine Pitroue1f2f302010-09-19 13:56:11 +0000799
Victor Stinnerd28fe8c2014-10-10 12:07:19 +0200800 Usually, :class:`SSLSocket` are not created directly, but using the
801 :func:`wrap_socket` function or the :meth:`SSLContext.wrap_socket` method.
802
Victor Stinner92127a52014-10-10 12:43:17 +0200803 .. versionchanged:: 3.5
804 The :meth:`sendfile` method was added.
805
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +0200806
807SSL sockets also have the following additional methods and attributes:
Antoine Pitrou792ff3e2010-09-19 13:19:21 +0000808
Antoine Pitroub1fdf472014-10-05 20:41:53 +0200809.. method:: SSLSocket.read(len=0, buffer=None)
810
811 Read up to *len* bytes of data from the SSL socket and return the result as
812 a ``bytes`` instance. If *buffer* is specified, then read into the buffer
813 instead, and return the number of bytes read.
814
Victor Stinner41f92c22014-10-10 12:05:56 +0200815 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +0200816 :ref:`non-blocking <ssl-nonblocking>` and the read would block.
Victor Stinner41f92c22014-10-10 12:05:56 +0200817
818 As at any time a re-negotiation is possible, a call to :meth:`read` can also
819 cause write operations.
820
Antoine Pitroub1fdf472014-10-05 20:41:53 +0200821.. method:: SSLSocket.write(buf)
822
823 Write *buf* to the SSL socket and return the number of bytes written. The
824 *buf* argument must be an object supporting the buffer interface.
825
Victor Stinner41f92c22014-10-10 12:05:56 +0200826 Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is
Victor Stinnercfb2a0a2014-10-10 12:45:10 +0200827 :ref:`non-blocking <ssl-nonblocking>` and the write would block.
Victor Stinner41f92c22014-10-10 12:05:56 +0200828
829 As at any time a re-negotiation is possible, a call to :meth:`write` can
830 also cause read operations.
831
Antoine Pitroub1fdf472014-10-05 20:41:53 +0200832.. note::
833
834 The :meth:`~SSLSocket.read` and :meth:`~SSLSocket.write` methods are the
835 low-level methods that read and write unencrypted, application-level data
836 and and decrypt/encrypt it to encrypted, wire-level data. These methods
837 require an active SSL connection, i.e. the handshake was completed and
838 :meth:`SSLSocket.unwrap` was not called.
839
840 Normally you should use the socket API methods like
841 :meth:`~socket.socket.recv` and :meth:`~socket.socket.send` instead of these
842 methods.
843
Bill Janssen48dc27c2007-12-05 03:38:10 +0000844.. method:: SSLSocket.do_handshake()
845
Antoine Pitroub3593ca2011-07-11 01:39:19 +0200846 Perform the SSL setup handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000847
Christian Heimes1aa9a752013-12-02 02:41:19 +0100848 .. versionchanged:: 3.4
Zachary Ware88a19772014-07-25 13:30:50 -0500849 The handshake method also performs :func:`match_hostname` when the
Christian Heimes1aa9a752013-12-02 02:41:19 +0100850 :attr:`~SSLContext.check_hostname` attribute of the socket's
851 :attr:`~SSLSocket.context` is true.
852
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000853.. method:: SSLSocket.getpeercert(binary_form=False)
854
Georg Brandl7f01a132009-09-16 15:58:14 +0000855 If there is no certificate for the peer on the other end of the connection,
Antoine Pitrou20b85552013-09-29 19:50:53 +0200856 return ``None``. If the SSL handshake hasn't been done yet, raise
857 :exc:`ValueError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000858
Antoine Pitroud34941a2013-04-16 20:27:17 +0200859 If the ``binary_form`` parameter is :const:`False`, and a certificate was
Georg Brandl7f01a132009-09-16 15:58:14 +0000860 received from the peer, this method returns a :class:`dict` instance. If the
861 certificate was not validated, the dict is empty. If the certificate was
Antoine Pitroub7c6c812012-08-16 22:14:43 +0200862 validated, it returns a dict with several keys, amongst them ``subject``
863 (the principal for which the certificate was issued) and ``issuer``
864 (the principal issuing the certificate). If a certificate contains an
865 instance of the *Subject Alternative Name* extension (see :rfc:`3280`),
866 there will also be a ``subjectAltName`` key in the dictionary.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000867
Antoine Pitroub7c6c812012-08-16 22:14:43 +0200868 The ``subject`` and ``issuer`` fields are tuples containing the sequence
869 of relative distinguished names (RDNs) given in the certificate's data
870 structure for the respective fields, and each RDN is a sequence of
871 name-value pairs. Here is a real-world example::
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000872
Antoine Pitroub7c6c812012-08-16 22:14:43 +0200873 {'issuer': ((('countryName', 'IL'),),
874 (('organizationName', 'StartCom Ltd.'),),
875 (('organizationalUnitName',
876 'Secure Digital Certificate Signing'),),
877 (('commonName',
878 'StartCom Class 2 Primary Intermediate Server CA'),)),
879 'notAfter': 'Nov 22 08:15:19 2013 GMT',
880 'notBefore': 'Nov 21 03:09:52 2011 GMT',
881 'serialNumber': '95F0',
882 'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),),
883 (('countryName', 'US'),),
884 (('stateOrProvinceName', 'California'),),
885 (('localityName', 'San Francisco'),),
886 (('organizationName', 'Electronic Frontier Foundation, Inc.'),),
887 (('commonName', '*.eff.org'),),
888 (('emailAddress', 'hostmaster@eff.org'),)),
889 'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')),
890 'version': 3}
891
892 .. note::
Larry Hastings3732ed22014-03-15 21:13:56 -0700893
Antoine Pitroub7c6c812012-08-16 22:14:43 +0200894 To validate a certificate for a particular service, you can use the
895 :func:`match_hostname` function.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000896
Georg Brandl7f01a132009-09-16 15:58:14 +0000897 If the ``binary_form`` parameter is :const:`True`, and a certificate was
898 provided, this method returns the DER-encoded form of the entire certificate
899 as a sequence of bytes, or :const:`None` if the peer did not provide a
Antoine Pitroud34941a2013-04-16 20:27:17 +0200900 certificate. Whether the peer provides a certificate depends on the SSL
901 socket's role:
902
903 * for a client SSL socket, the server will always provide a certificate,
904 regardless of whether validation was required;
905
906 * for a server SSL socket, the client will only provide a certificate
907 when requested by the server; therefore :meth:`getpeercert` will return
908 :const:`None` if you used :const:`CERT_NONE` (rather than
909 :const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`).
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000910
Antoine Pitroufb046912010-11-09 20:21:19 +0000911 .. versionchanged:: 3.2
912 The returned dictionary includes additional items such as ``issuer``
913 and ``notBefore``.
914
Antoine Pitrou20b85552013-09-29 19:50:53 +0200915 .. versionchanged:: 3.4
916 :exc:`ValueError` is raised when the handshake isn't done.
Christian Heimesbd3a7f92013-11-21 03:40:15 +0100917 The returned dictionary includes additional X509v3 extension items
Larry Hastings3732ed22014-03-15 21:13:56 -0700918 such as ``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs.
Christian Heimesbd3a7f92013-11-21 03:40:15 +0100919
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000920.. method:: SSLSocket.cipher()
921
Georg Brandl7f01a132009-09-16 15:58:14 +0000922 Returns a three-value tuple containing the name of the cipher being used, the
923 version of the SSL protocol that defines its use, and the number of secret
924 bits being used. If no connection has been established, returns ``None``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000925
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100926.. method:: SSLSocket.compression()
927
928 Return the compression algorithm being used as a string, or ``None``
929 if the connection isn't compressed.
930
931 If the higher-level protocol supports its own compression mechanism,
932 you can use :data:`OP_NO_COMPRESSION` to disable SSL-level compression.
933
934 .. versionadded:: 3.3
935
Antoine Pitroud6494802011-07-21 01:11:30 +0200936.. method:: SSLSocket.get_channel_binding(cb_type="tls-unique")
937
938 Get channel binding data for current connection, as a bytes object. Returns
939 ``None`` if not connected or the handshake has not been completed.
940
941 The *cb_type* parameter allow selection of the desired channel binding
942 type. Valid channel binding types are listed in the
943 :data:`CHANNEL_BINDING_TYPES` list. Currently only the 'tls-unique' channel
944 binding, defined by :rfc:`5929`, is supported. :exc:`ValueError` will be
945 raised if an unsupported channel binding type is requested.
946
947 .. versionadded:: 3.3
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000948
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100949.. method:: SSLSocket.selected_npn_protocol()
950
Antoine Pitrou47e40422014-09-04 21:00:10 +0200951 Returns the higher-level protocol that was selected during the TLS/SSL
952 handshake. If :meth:`SSLContext.set_npn_protocols` was not called, or
953 if the other party does not support NPN, or if the handshake has not yet
954 happened, this will return ``None``.
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100955
956 .. versionadded:: 3.3
957
Benjamin Peterson4aeec042008-08-19 21:42:13 +0000958.. method:: SSLSocket.unwrap()
959
Georg Brandl7f01a132009-09-16 15:58:14 +0000960 Performs the SSL shutdown handshake, which removes the TLS layer from the
961 underlying socket, and returns the underlying socket object. This can be
962 used to go from encrypted operation over a connection to unencrypted. The
963 returned socket should always be used for further communication with the
964 other side of the connection, rather than the original socket.
Benjamin Peterson4aeec042008-08-19 21:42:13 +0000965
Antoine Pitrou47e40422014-09-04 21:00:10 +0200966.. method:: SSLSocket.version()
967
968 Return the actual SSL protocol version negotiated by the connection
969 as a string, or ``None`` is no secure connection is established.
970 As of this writing, possible return values include ``"SSLv2"``,
971 ``"SSLv3"``, ``"TLSv1"``, ``"TLSv1.1"`` and ``"TLSv1.2"``.
972 Recent OpenSSL versions may define more return values.
973
974 .. versionadded:: 3.5
975
Antoine Pitroub1fdf472014-10-05 20:41:53 +0200976.. method:: SSLSocket.pending()
977
978 Returns the number of already decrypted bytes available for read, pending on
979 the connection.
980
Antoine Pitrouec883db2010-05-24 21:20:20 +0000981.. attribute:: SSLSocket.context
982
983 The :class:`SSLContext` object this SSL socket is tied to. If the SSL
984 socket was created using the top-level :func:`wrap_socket` function
985 (rather than :meth:`SSLContext.wrap_socket`), this is a custom context
986 object created for this SSL socket.
987
988 .. versionadded:: 3.2
989
Antoine Pitroub1fdf472014-10-05 20:41:53 +0200990.. attribute:: SSLSocket.server_side
991
992 A boolean which is ``True`` for server-side sockets and ``False`` for
993 client-side sockets.
994
Victor Stinner41f92c22014-10-10 12:05:56 +0200995 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +0200996
997.. attribute:: SSLSocket.server_hostname
998
Victor Stinner41f92c22014-10-10 12:05:56 +0200999 Hostname of the server: :class:`str` type, or ``None`` for server-side
1000 socket or if the hostname was not specified in the constructor.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001001
Victor Stinner41f92c22014-10-10 12:05:56 +02001002 .. versionadded:: 3.2
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001003
Antoine Pitrouec883db2010-05-24 21:20:20 +00001004
Antoine Pitrou152efa22010-05-16 18:19:27 +00001005SSL Contexts
1006------------
1007
Antoine Pitroucafaad42010-05-24 15:58:43 +00001008.. versionadded:: 3.2
1009
Antoine Pitroub0182c82010-10-12 20:09:02 +00001010An SSL context holds various data longer-lived than single SSL connections,
1011such as SSL configuration options, certificate(s) and private key(s).
1012It also manages a cache of SSL sessions for server-side sockets, in order
1013to speed up repeated connections from the same clients.
1014
Antoine Pitrou152efa22010-05-16 18:19:27 +00001015.. class:: SSLContext(protocol)
1016
Antoine Pitroub0182c82010-10-12 20:09:02 +00001017 Create a new SSL context. You must pass *protocol* which must be one
1018 of the ``PROTOCOL_*`` constants defined in this module.
Antoine Pitrou5bef4102013-11-23 16:16:29 +01001019 :data:`PROTOCOL_SSLv23` is currently recommended for maximum
1020 interoperability.
1021
1022 .. seealso::
1023 :func:`create_default_context` lets the :mod:`ssl` module choose
1024 security settings for a given purpose.
Antoine Pitroub0182c82010-10-12 20:09:02 +00001025
Antoine Pitrou152efa22010-05-16 18:19:27 +00001026
1027:class:`SSLContext` objects have the following methods and attributes:
1028
Christian Heimes9a5395a2013-06-17 15:44:12 +02001029.. method:: SSLContext.cert_store_stats()
1030
1031 Get statistics about quantities of loaded X.509 certificates, count of
1032 X.509 certificates flagged as CA certificates and certificate revocation
1033 lists as dictionary.
1034
1035 Example for a context with one CA cert and one other cert::
1036
1037 >>> context.cert_store_stats()
1038 {'crl': 0, 'x509_ca': 1, 'x509': 2}
1039
1040 .. versionadded:: 3.4
1041
Christian Heimesefff7062013-11-21 03:35:02 +01001042
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001043.. method:: SSLContext.load_cert_chain(certfile, keyfile=None, password=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001044
1045 Load a private key and the corresponding certificate. The *certfile*
1046 string must be the path to a single file in PEM format containing the
1047 certificate as well as any number of CA certificates needed to establish
1048 the certificate's authenticity. The *keyfile* string, if present, must
1049 point to a file containing the private key in. Otherwise the private
1050 key will be taken from *certfile* as well. See the discussion of
1051 :ref:`ssl-certificates` for more information on how the certificate
1052 is stored in the *certfile*.
1053
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001054 The *password* argument may be a function to call to get the password for
1055 decrypting the private key. It will only be called if the private key is
1056 encrypted and a password is necessary. It will be called with no arguments,
1057 and it should return a string, bytes, or bytearray. If the return value is
1058 a string it will be encoded as UTF-8 before using it to decrypt the key.
1059 Alternatively a string, bytes, or bytearray value may be supplied directly
1060 as the *password* argument. It will be ignored if the private key is not
1061 encrypted and no password is needed.
1062
1063 If the *password* argument is not specified and a password is required,
1064 OpenSSL's built-in password prompting mechanism will be used to
1065 interactively prompt the user for a password.
1066
Antoine Pitrou152efa22010-05-16 18:19:27 +00001067 An :class:`SSLError` is raised if the private key doesn't
1068 match with the certificate.
1069
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +02001070 .. versionchanged:: 3.3
1071 New optional argument *password*.
1072
Christian Heimes72d28502013-11-23 13:56:58 +01001073.. method:: SSLContext.load_default_certs(purpose=Purpose.SERVER_AUTH)
1074
1075 Load a set of default "certification authority" (CA) certificates from
1076 default locations. On Windows it loads CA certs from the ``CA`` and
1077 ``ROOT`` system stores. On other systems it calls
1078 :meth:`SSLContext.set_default_verify_paths`. In the future the method may
1079 load CA certificates from other locations, too.
1080
1081 The *purpose* flag specifies what kind of CA certificates are loaded. The
1082 default settings :data:`Purpose.SERVER_AUTH` loads certificates, that are
1083 flagged and trusted for TLS web server authentication (client side
Christian Heimes6b2ff982013-11-23 14:42:01 +01001084 sockets). :data:`Purpose.CLIENT_AUTH` loads CA certificates for client
Christian Heimes72d28502013-11-23 13:56:58 +01001085 certificate verification on the server side.
1086
1087 .. versionadded:: 3.4
1088
Christian Heimesefff7062013-11-21 03:35:02 +01001089.. method:: SSLContext.load_verify_locations(cafile=None, capath=None, cadata=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001090
1091 Load a set of "certification authority" (CA) certificates used to validate
1092 other peers' certificates when :data:`verify_mode` is other than
1093 :data:`CERT_NONE`. At least one of *cafile* or *capath* must be specified.
1094
Christian Heimes22587792013-11-21 23:56:13 +01001095 This method can also load certification revocation lists (CRLs) in PEM or
Donald Stufft8b852f12014-05-20 12:58:38 -04001096 DER format. In order to make use of CRLs, :attr:`SSLContext.verify_flags`
Christian Heimes22587792013-11-21 23:56:13 +01001097 must be configured properly.
1098
Christian Heimes3e738f92013-06-09 18:07:16 +02001099 The *cafile* string, if present, is the path to a file of concatenated
Antoine Pitrou152efa22010-05-16 18:19:27 +00001100 CA certificates in PEM format. See the discussion of
1101 :ref:`ssl-certificates` for more information about how to arrange the
1102 certificates in this file.
1103
1104 The *capath* string, if present, is
1105 the path to a directory containing several CA certificates in PEM format,
1106 following an `OpenSSL specific layout
1107 <http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html>`_.
1108
Christian Heimesefff7062013-11-21 03:35:02 +01001109 The *cadata* object, if present, is either an ASCII string of one or more
Serhiy Storchakab757c832014-12-05 22:25:22 +02001110 PEM-encoded certificates or a :term:`bytes-like object` of DER-encoded
Christian Heimesefff7062013-11-21 03:35:02 +01001111 certificates. Like with *capath* extra lines around PEM-encoded
1112 certificates are ignored but at least one certificate must be present.
1113
1114 .. versionchanged:: 3.4
1115 New optional argument *cadata*
1116
Christian Heimes9a5395a2013-06-17 15:44:12 +02001117.. method:: SSLContext.get_ca_certs(binary_form=False)
1118
1119 Get a list of loaded "certification authority" (CA) certificates. If the
1120 ``binary_form`` parameter is :const:`False` each list
1121 entry is a dict like the output of :meth:`SSLSocket.getpeercert`. Otherwise
1122 the method returns a list of DER-encoded certificates. The returned list
1123 does not contain certificates from *capath* unless a certificate was
1124 requested and loaded by a SSL connection.
1125
Larry Hastingsd36fc432013-08-03 02:49:53 -07001126 .. versionadded:: 3.4
Christian Heimes9a5395a2013-06-17 15:44:12 +02001127
Antoine Pitrou664c2d12010-11-17 20:29:42 +00001128.. method:: SSLContext.set_default_verify_paths()
1129
1130 Load a set of default "certification authority" (CA) certificates from
1131 a filesystem path defined when building the OpenSSL library. Unfortunately,
1132 there's no easy way to know whether this method succeeds: no error is
1133 returned if no certificates are to be found. When the OpenSSL library is
1134 provided as part of the operating system, though, it is likely to be
1135 configured properly.
1136
Antoine Pitrou152efa22010-05-16 18:19:27 +00001137.. method:: SSLContext.set_ciphers(ciphers)
1138
1139 Set the available ciphers for sockets created with this context.
1140 It should be a string in the `OpenSSL cipher list format
1141 <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`_.
1142 If no cipher can be selected (because compile-time options or other
1143 configuration forbids use of all the specified ciphers), an
1144 :class:`SSLError` will be raised.
1145
1146 .. note::
1147 when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will
1148 give the currently selected cipher.
1149
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001150.. method:: SSLContext.set_npn_protocols(protocols)
1151
R David Murrayc7f75792013-06-26 15:11:12 -04001152 Specify which protocols the socket should advertise during the SSL/TLS
Antoine Pitroud5d17eb2012-03-22 00:23:03 +01001153 handshake. It should be a list of strings, like ``['http/1.1', 'spdy/2']``,
1154 ordered by preference. The selection of a protocol will happen during the
1155 handshake, and will play out according to the `NPN draft specification
1156 <http://tools.ietf.org/html/draft-agl-tls-nextprotoneg>`_. After a
1157 successful handshake, the :meth:`SSLSocket.selected_npn_protocol` method will
1158 return the agreed-upon protocol.
1159
1160 This method will raise :exc:`NotImplementedError` if :data:`HAS_NPN` is
1161 False.
1162
1163 .. versionadded:: 3.3
1164
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001165.. method:: SSLContext.set_servername_callback(server_name_callback)
1166
1167 Register a callback function that will be called after the TLS Client Hello
1168 handshake message has been received by the SSL/TLS server when the TLS client
1169 specifies a server name indication. The server name indication mechanism
1170 is specified in :rfc:`6066` section 3 - Server Name Indication.
1171
1172 Only one callback can be set per ``SSLContext``. If *server_name_callback*
1173 is ``None`` then the callback is disabled. Calling this function a
1174 subsequent time will disable the previously registered callback.
1175
1176 The callback function, *server_name_callback*, will be called with three
1177 arguments; the first being the :class:`ssl.SSLSocket`, the second is a string
1178 that represents the server name that the client is intending to communicate
Antoine Pitrou50b24d02013-04-11 20:48:42 +02001179 (or :const:`None` if the TLS Client Hello does not contain a server name)
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001180 and the third argument is the original :class:`SSLContext`. The server name
1181 argument is the IDNA decoded server name.
1182
1183 A typical use of this callback is to change the :class:`ssl.SSLSocket`'s
1184 :attr:`SSLSocket.context` attribute to a new object of type
1185 :class:`SSLContext` representing a certificate chain that matches the server
1186 name.
1187
1188 Due to the early negotiation phase of the TLS connection, only limited
1189 methods and attributes are usable like
1190 :meth:`SSLSocket.selected_npn_protocol` and :attr:`SSLSocket.context`.
1191 :meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.getpeercert`,
1192 :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compress` methods require that
1193 the TLS connection has progressed beyond the TLS Client Hello and therefore
1194 will not contain return meaningful values nor can they be called safely.
1195
1196 The *server_name_callback* function must return ``None`` to allow the
Terry Jan Reedy8e7586b2013-03-11 18:38:13 -04001197 TLS negotiation to continue. If a TLS failure is required, a constant
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001198 :const:`ALERT_DESCRIPTION_* <ALERT_DESCRIPTION_INTERNAL_ERROR>` can be
1199 returned. Other return values will result in a TLS fatal error with
1200 :const:`ALERT_DESCRIPTION_INTERNAL_ERROR`.
1201
Zachary Ware88a19772014-07-25 13:30:50 -05001202 If there is an IDNA decoding error on the server name, the TLS connection
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001203 will terminate with an :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` fatal TLS
1204 alert message to the client.
1205
1206 If an exception is raised from the *server_name_callback* function the TLS
1207 connection will terminate with a fatal TLS alert message
1208 :const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`.
1209
1210 This method will raise :exc:`NotImplementedError` if the OpenSSL library
1211 had OPENSSL_NO_TLSEXT defined when it was built.
1212
1213 .. versionadded:: 3.4
1214
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001215.. method:: SSLContext.load_dh_params(dhfile)
1216
1217 Load the key generation parameters for Diffie-Helman (DH) key exchange.
1218 Using DH key exchange improves forward secrecy at the expense of
1219 computational resources (both on the server and on the client).
1220 The *dhfile* parameter should be the path to a file containing DH
1221 parameters in PEM format.
1222
1223 This setting doesn't apply to client sockets. You can also use the
1224 :data:`OP_SINGLE_DH_USE` option to further improve security.
1225
1226 .. versionadded:: 3.3
1227
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001228.. method:: SSLContext.set_ecdh_curve(curve_name)
1229
Antoine Pitrou0e576f12011-12-22 10:03:38 +01001230 Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH) key
1231 exchange. ECDH is significantly faster than regular DH while arguably
1232 as secure. The *curve_name* parameter should be a string describing
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001233 a well-known elliptic curve, for example ``prime256v1`` for a widely
1234 supported curve.
1235
1236 This setting doesn't apply to client sockets. You can also use the
1237 :data:`OP_SINGLE_ECDH_USE` option to further improve security.
1238
Antoine Pitrou501da612011-12-21 09:27:41 +01001239 This method is not available if :data:`HAS_ECDH` is False.
1240
Antoine Pitrou923df6f2011-12-19 17:16:51 +01001241 .. versionadded:: 3.3
1242
1243 .. seealso::
1244 `SSL/TLS & Perfect Forward Secrecy <http://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy.html>`_
1245 Vincent Bernat.
1246
Antoine Pitroud5323212010-10-22 18:19:07 +00001247.. method:: SSLContext.wrap_socket(sock, server_side=False, \
1248 do_handshake_on_connect=True, suppress_ragged_eofs=True, \
1249 server_hostname=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001250
1251 Wrap an existing Python socket *sock* and return an :class:`SSLSocket`
Antoine Pitrou3e86ba42013-12-28 17:26:33 +01001252 object. *sock* must be a :data:`~socket.SOCK_STREAM` socket; other socket
1253 types are unsupported.
1254
1255 The returned SSL socket is tied to the context, its settings and
Antoine Pitrou152efa22010-05-16 18:19:27 +00001256 certificates. The parameters *server_side*, *do_handshake_on_connect*
1257 and *suppress_ragged_eofs* have the same meaning as in the top-level
1258 :func:`wrap_socket` function.
1259
Antoine Pitroud5323212010-10-22 18:19:07 +00001260 On client connections, the optional parameter *server_hostname* specifies
1261 the hostname of the service which we are connecting to. This allows a
1262 single server to host multiple SSL-based services with distinct certificates,
Benjamin Peterson7243b572014-11-23 17:04:34 -06001263 quite similarly to HTTP virtual hosts. Specifying *server_hostname* will
1264 raise a :exc:`ValueError` if *server_side* is true.
1265
1266 .. versionchanged:: 3.5
1267 Always allow a server_hostname to be passed, even if OpenSSL does not
1268 have SNI.
Antoine Pitroud5323212010-10-22 18:19:07 +00001269
Victor Stinner805b2622014-10-10 12:49:08 +02001270.. method:: SSLContext.wrap_bio(incoming, outgoing, server_side=False, \
1271 server_hostname=None)
1272
1273 Create a new :class:`SSLObject` instance by wrapping the BIO objects
1274 *incoming* and *outgoing*. The SSL routines will read input data from the
1275 incoming BIO and write data to the outgoing BIO.
1276
1277 The *server_side* and *server_hostname* parameters have the same meaning as
1278 in :meth:`SSLContext.wrap_socket`.
1279
Antoine Pitroub0182c82010-10-12 20:09:02 +00001280.. method:: SSLContext.session_stats()
1281
1282 Get statistics about the SSL sessions created or managed by this context.
1283 A dictionary is returned which maps the names of each `piece of information
1284 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>`_ to their
1285 numeric values. For example, here is the total number of hits and misses
1286 in the session cache since the context was created::
1287
1288 >>> stats = context.session_stats()
1289 >>> stats['hits'], stats['misses']
1290 (0, 0)
1291
Christian Heimesf22e8e52013-11-22 02:22:51 +01001292.. method:: SSLContext.get_ca_certs(binary_form=False)
1293
1294 Returns a list of dicts with information of loaded CA certs. If the
Serhiy Storchaka0e90e992013-11-29 12:19:53 +02001295 optional argument is true, returns a DER-encoded copy of the CA
Christian Heimesf22e8e52013-11-22 02:22:51 +01001296 certificate.
1297
1298 .. note::
1299 Certificates in a capath directory aren't loaded unless they have
1300 been used at least once.
1301
1302 .. versionadded:: 3.4
1303
Christian Heimes1aa9a752013-12-02 02:41:19 +01001304.. attribute:: SSLContext.check_hostname
1305
1306 Wether to match the peer cert's hostname with :func:`match_hostname` in
1307 :meth:`SSLSocket.do_handshake`. The context's
1308 :attr:`~SSLContext.verify_mode` must be set to :data:`CERT_OPTIONAL` or
1309 :data:`CERT_REQUIRED`, and you must pass *server_hostname* to
1310 :meth:`~SSLContext.wrap_socket` in order to match the hostname.
1311
1312 Example::
1313
1314 import socket, ssl
1315
1316 context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
1317 context.verify_mode = ssl.CERT_REQUIRED
1318 context.check_hostname = True
1319 context.load_default_certs()
1320
1321 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Berker Peksag38bf87c2014-07-17 05:00:36 +03001322 ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
1323 ssl_sock.connect(('www.verisign.com', 443))
Christian Heimes1aa9a752013-12-02 02:41:19 +01001324
1325 .. versionadded:: 3.4
1326
1327 .. note::
1328
1329 This features requires OpenSSL 0.9.8f or newer.
1330
Antoine Pitroub5218772010-05-21 09:56:06 +00001331.. attribute:: SSLContext.options
1332
1333 An integer representing the set of SSL options enabled on this context.
1334 The default value is :data:`OP_ALL`, but you can specify other options
1335 such as :data:`OP_NO_SSLv2` by ORing them together.
1336
1337 .. note::
1338 With versions of OpenSSL older than 0.9.8m, it is only possible
1339 to set options, not to clear them. Attempting to clear an option
1340 (by resetting the corresponding bits) will raise a ``ValueError``.
1341
Antoine Pitrou152efa22010-05-16 18:19:27 +00001342.. attribute:: SSLContext.protocol
1343
1344 The protocol version chosen when constructing the context. This attribute
1345 is read-only.
1346
Christian Heimes22587792013-11-21 23:56:13 +01001347.. attribute:: SSLContext.verify_flags
1348
1349 The flags for certificate verification operations. You can set flags like
1350 :data:`VERIFY_CRL_CHECK_LEAF` by ORing them together. By default OpenSSL
1351 does neither require nor verify certificate revocation lists (CRLs).
Christian Heimes2427b502013-11-23 11:24:32 +01001352 Available only with openssl version 0.9.8+.
Christian Heimes22587792013-11-21 23:56:13 +01001353
1354 .. versionadded:: 3.4
1355
Antoine Pitrou152efa22010-05-16 18:19:27 +00001356.. attribute:: SSLContext.verify_mode
1357
1358 Whether to try to verify other peers' certificates and how to behave
1359 if verification fails. This attribute must be one of
1360 :data:`CERT_NONE`, :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`.
1361
1362
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001363.. index:: single: certificates
1364
1365.. index:: single: X509 certificate
1366
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001367.. _ssl-certificates:
1368
Thomas Woutersed03b412007-08-28 21:37:11 +00001369Certificates
1370------------
1371
Georg Brandl7f01a132009-09-16 15:58:14 +00001372Certificates in general are part of a public-key / private-key system. In this
1373system, each *principal*, (which may be a machine, or a person, or an
1374organization) is assigned a unique two-part encryption key. One part of the key
1375is public, and is called the *public key*; the other part is kept secret, and is
1376called the *private key*. The two parts are related, in that if you encrypt a
1377message with one of the parts, you can decrypt it with the other part, and
1378**only** with the other part.
Thomas Woutersed03b412007-08-28 21:37:11 +00001379
Georg Brandl7f01a132009-09-16 15:58:14 +00001380A certificate contains information about two principals. It contains the name
1381of a *subject*, and the subject's public key. It also contains a statement by a
1382second principal, the *issuer*, that the subject is who he claims to be, and
1383that this is indeed the subject's public key. The issuer's statement is signed
1384with the issuer's private key, which only the issuer knows. However, anyone can
1385verify the issuer's statement by finding the issuer's public key, decrypting the
1386statement with it, and comparing it to the other information in the certificate.
1387The certificate also contains information about the time period over which it is
1388valid. This is expressed as two fields, called "notBefore" and "notAfter".
Thomas Woutersed03b412007-08-28 21:37:11 +00001389
Georg Brandl7f01a132009-09-16 15:58:14 +00001390In the Python use of certificates, a client or server can use a certificate to
1391prove who they are. The other side of a network connection can also be required
1392to produce a certificate, and that certificate can be validated to the
1393satisfaction of the client or server that requires such validation. The
1394connection attempt can be set to raise an exception if the validation fails.
1395Validation is done automatically, by the underlying OpenSSL framework; the
1396application need not concern itself with its mechanics. But the application
1397does usually need to provide sets of certificates to allow this process to take
1398place.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001399
Georg Brandl7f01a132009-09-16 15:58:14 +00001400Python uses files to contain certificates. They should be formatted as "PEM"
1401(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
1402and a footer line::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001403
1404 -----BEGIN CERTIFICATE-----
1405 ... (certificate in base64 PEM encoding) ...
1406 -----END CERTIFICATE-----
1407
Antoine Pitrou152efa22010-05-16 18:19:27 +00001408Certificate chains
1409^^^^^^^^^^^^^^^^^^
1410
Georg Brandl7f01a132009-09-16 15:58:14 +00001411The Python files which contain certificates can contain a sequence of
1412certificates, sometimes called a *certificate chain*. This chain should start
1413with the specific certificate for the principal who "is" the client or server,
1414and then the certificate for the issuer of that certificate, and then the
1415certificate for the issuer of *that* certificate, and so on up the chain till
1416you get to a certificate which is *self-signed*, that is, a certificate which
1417has the same subject and issuer, sometimes called a *root certificate*. The
1418certificates should just be concatenated together in the certificate file. For
1419example, suppose we had a three certificate chain, from our server certificate
1420to the certificate of the certification authority that signed our server
1421certificate, to the root certificate of the agency which issued the
1422certification authority's certificate::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001423
1424 -----BEGIN CERTIFICATE-----
1425 ... (certificate for your server)...
1426 -----END CERTIFICATE-----
1427 -----BEGIN CERTIFICATE-----
1428 ... (the certificate for the CA)...
1429 -----END CERTIFICATE-----
1430 -----BEGIN CERTIFICATE-----
1431 ... (the root certificate for the CA's issuer)...
1432 -----END CERTIFICATE-----
1433
Antoine Pitrou152efa22010-05-16 18:19:27 +00001434CA certificates
1435^^^^^^^^^^^^^^^
1436
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001437If you are going to require validation of the other side of the connection's
1438certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandl7f01a132009-09-16 15:58:14 +00001439chains for each issuer you are willing to trust. Again, this file just contains
1440these chains concatenated together. For validation, Python will use the first
Donald Stufft41374652014-03-24 19:26:03 -04001441chain it finds in the file which matches. The platform's certificates file can
1442be used by calling :meth:`SSLContext.load_default_certs`, this is done
1443automatically with :func:`.create_default_context`.
Thomas Woutersed03b412007-08-28 21:37:11 +00001444
Antoine Pitrou152efa22010-05-16 18:19:27 +00001445Combined key and certificate
1446^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1447
1448Often the private key is stored in the same file as the certificate; in this
1449case, only the ``certfile`` parameter to :meth:`SSLContext.load_cert_chain`
1450and :func:`wrap_socket` needs to be passed. If the private key is stored
1451with the certificate, it should come before the first certificate in
1452the certificate chain::
1453
1454 -----BEGIN RSA PRIVATE KEY-----
1455 ... (private key in base64 encoding) ...
1456 -----END RSA PRIVATE KEY-----
1457 -----BEGIN CERTIFICATE-----
1458 ... (certificate in base64 PEM encoding) ...
1459 -----END CERTIFICATE-----
1460
1461Self-signed certificates
1462^^^^^^^^^^^^^^^^^^^^^^^^
1463
Georg Brandl7f01a132009-09-16 15:58:14 +00001464If you are going to create a server that provides SSL-encrypted connection
1465services, you will need to acquire a certificate for that service. There are
1466many ways of acquiring appropriate certificates, such as buying one from a
1467certification authority. Another common practice is to generate a self-signed
1468certificate. The simplest way to do this is with the OpenSSL package, using
1469something like the following::
Thomas Woutersed03b412007-08-28 21:37:11 +00001470
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001471 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
1472 Generating a 1024 bit RSA private key
1473 .......++++++
1474 .............................++++++
1475 writing new private key to 'cert.pem'
1476 -----
1477 You are about to be asked to enter information that will be incorporated
1478 into your certificate request.
1479 What you are about to enter is what is called a Distinguished Name or a DN.
1480 There are quite a few fields but you can leave some blank
1481 For some fields there will be a default value,
1482 If you enter '.', the field will be left blank.
1483 -----
1484 Country Name (2 letter code) [AU]:US
1485 State or Province Name (full name) [Some-State]:MyState
1486 Locality Name (eg, city) []:Some City
1487 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
1488 Organizational Unit Name (eg, section) []:My Group
1489 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
1490 Email Address []:ops@myserver.mygroup.myorganization.com
1491 %
Thomas Woutersed03b412007-08-28 21:37:11 +00001492
Georg Brandl7f01a132009-09-16 15:58:14 +00001493The disadvantage of a self-signed certificate is that it is its own root
1494certificate, and no one else will have it in their cache of known (and trusted)
1495root certificates.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001496
1497
Thomas Woutersed03b412007-08-28 21:37:11 +00001498Examples
1499--------
1500
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001501Testing for SSL support
1502^^^^^^^^^^^^^^^^^^^^^^^
1503
Georg Brandl7f01a132009-09-16 15:58:14 +00001504To test for the presence of SSL support in a Python installation, user code
1505should use the following idiom::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001506
1507 try:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001508 import ssl
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001509 except ImportError:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001510 pass
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001511 else:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001512 ... # do something that requires SSL support
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001513
1514Client-side operation
1515^^^^^^^^^^^^^^^^^^^^^
1516
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001517This example creates a SSL context with the recommended security settings
1518for client sockets, including automatic certificate verification::
Thomas Woutersed03b412007-08-28 21:37:11 +00001519
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001520 >>> context = ssl.create_default_context()
Thomas Woutersed03b412007-08-28 21:37:11 +00001521
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001522If you prefer to tune security settings yourself, you might create
1523a context from scratch (but beware that you might not get the settings
1524right)::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001525
1526 >>> context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001527 >>> context.verify_mode = ssl.CERT_REQUIRED
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001528 >>> context.check_hostname = True
Antoine Pitrou152efa22010-05-16 18:19:27 +00001529 >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
1530
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001531(this snippet assumes your operating system places a bundle of all CA
1532certificates in ``/etc/ssl/certs/ca-bundle.crt``; if not, you'll get an
1533error and have to adjust the location)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001534
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001535When you use the context to connect to a server, :const:`CERT_REQUIRED`
Antoine Pitrou152efa22010-05-16 18:19:27 +00001536validates the server certificate: it ensures that the server certificate
1537was signed with one of the CA certificates, and checks the signature for
1538correctness::
1539
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001540 >>> conn = context.wrap_socket(socket.socket(socket.AF_INET),
1541 ... server_hostname="www.python.org")
1542 >>> conn.connect(("www.python.org", 443))
Antoine Pitrou152efa22010-05-16 18:19:27 +00001543
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001544You may then fetch the certificate::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001545
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001546 >>> cert = conn.getpeercert()
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001547
1548Visual inspection shows that the certificate does identify the desired service
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001549(that is, the HTTPS host ``www.python.org``)::
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001550
1551 >>> pprint.pprint(cert)
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001552 {'OCSP': ('http://ocsp.digicert.com',),
1553 'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',),
1554 'crlDistributionPoints': ('http://crl3.digicert.com/sha2-ev-server-g1.crl',
1555 'http://crl4.digicert.com/sha2-ev-server-g1.crl'),
1556 'issuer': ((('countryName', 'US'),),
1557 (('organizationName', 'DigiCert Inc'),),
1558 (('organizationalUnitName', 'www.digicert.com'),),
1559 (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),)),
1560 'notAfter': 'Sep 9 12:00:00 2016 GMT',
1561 'notBefore': 'Sep 5 00:00:00 2014 GMT',
1562 'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26',
1563 'subject': ((('businessCategory', 'Private Organization'),),
1564 (('1.3.6.1.4.1.311.60.2.1.3', 'US'),),
1565 (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),),
1566 (('serialNumber', '3359300'),),
1567 (('streetAddress', '16 Allen Rd'),),
1568 (('postalCode', '03894-4801'),),
1569 (('countryName', 'US'),),
1570 (('stateOrProvinceName', 'NH'),),
1571 (('localityName', 'Wolfeboro,'),),
1572 (('organizationName', 'Python Software Foundation'),),
1573 (('commonName', 'www.python.org'),)),
1574 'subjectAltName': (('DNS', 'www.python.org'),
1575 ('DNS', 'python.org'),
1576 ('DNS', 'pypi.python.org'),
1577 ('DNS', 'docs.python.org'),
1578 ('DNS', 'testpypi.python.org'),
1579 ('DNS', 'bugs.python.org'),
1580 ('DNS', 'wiki.python.org'),
1581 ('DNS', 'hg.python.org'),
1582 ('DNS', 'mail.python.org'),
1583 ('DNS', 'packaging.python.org'),
1584 ('DNS', 'pythonhosted.org'),
1585 ('DNS', 'www.pythonhosted.org'),
1586 ('DNS', 'test.pythonhosted.org'),
1587 ('DNS', 'us.pycon.org'),
1588 ('DNS', 'id.python.org')),
Antoine Pitrou441ae042012-01-06 20:06:15 +01001589 'version': 3}
Antoine Pitrou152efa22010-05-16 18:19:27 +00001590
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001591Now the SSL channel is established and the certificate verified, you can
1592proceed to talk with the server::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001593
Antoine Pitroudab64262010-09-19 13:31:06 +00001594 >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n")
1595 >>> pprint.pprint(conn.recv(1024).split(b"\r\n"))
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001596 [b'HTTP/1.1 200 OK',
1597 b'Date: Sat, 18 Oct 2014 18:27:20 GMT',
1598 b'Server: nginx',
1599 b'Content-Type: text/html; charset=utf-8',
1600 b'X-Frame-Options: SAMEORIGIN',
1601 b'Content-Length: 45679',
1602 b'Accept-Ranges: bytes',
1603 b'Via: 1.1 varnish',
1604 b'Age: 2188',
1605 b'X-Served-By: cache-lcy1134-LCY',
1606 b'X-Cache: HIT',
1607 b'X-Cache-Hits: 11',
1608 b'Vary: Cookie',
1609 b'Strict-Transport-Security: max-age=63072000; includeSubDomains',
Antoine Pitrou152efa22010-05-16 18:19:27 +00001610 b'Connection: close',
Antoine Pitrou152efa22010-05-16 18:19:27 +00001611 b'',
1612 b'']
1613
Antoine Pitrou152efa22010-05-16 18:19:27 +00001614See the discussion of :ref:`ssl-security` below.
1615
1616
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001617Server-side operation
1618^^^^^^^^^^^^^^^^^^^^^
1619
Antoine Pitrou152efa22010-05-16 18:19:27 +00001620For server operation, typically you'll need to have a server certificate, and
1621private key, each in a file. You'll first create a context holding the key
1622and the certificate, so that clients can check your authenticity. Then
1623you'll open a socket, bind it to a port, call :meth:`listen` on it, and start
1624waiting for clients to connect::
Thomas Woutersed03b412007-08-28 21:37:11 +00001625
1626 import socket, ssl
1627
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001628 context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001629 context.load_cert_chain(certfile="mycertfile", keyfile="mykeyfile")
1630
Thomas Woutersed03b412007-08-28 21:37:11 +00001631 bindsocket = socket.socket()
1632 bindsocket.bind(('myaddr.mydomain.com', 10023))
1633 bindsocket.listen(5)
1634
Antoine Pitrou152efa22010-05-16 18:19:27 +00001635When a client connects, you'll call :meth:`accept` on the socket to get the
1636new socket from the other end, and use the context's :meth:`SSLContext.wrap_socket`
1637method to create a server-side SSL socket for the connection::
Thomas Woutersed03b412007-08-28 21:37:11 +00001638
1639 while True:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001640 newsocket, fromaddr = bindsocket.accept()
1641 connstream = context.wrap_socket(newsocket, server_side=True)
1642 try:
1643 deal_with_client(connstream)
1644 finally:
Antoine Pitroub205d582011-01-02 22:09:27 +00001645 connstream.shutdown(socket.SHUT_RDWR)
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001646 connstream.close()
Thomas Woutersed03b412007-08-28 21:37:11 +00001647
Antoine Pitrou152efa22010-05-16 18:19:27 +00001648Then you'll read data from the ``connstream`` and do something with it till you
Georg Brandl7f01a132009-09-16 15:58:14 +00001649are finished with the client (or the client is finished with you)::
Thomas Woutersed03b412007-08-28 21:37:11 +00001650
1651 def deal_with_client(connstream):
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001652 data = connstream.recv(1024)
1653 # empty data means the client is finished with us
1654 while data:
1655 if not do_something(connstream, data):
1656 # we'll assume do_something returns False
1657 # when we're finished with client
1658 break
1659 data = connstream.recv(1024)
1660 # finished with client
Thomas Woutersed03b412007-08-28 21:37:11 +00001661
Antoine Pitrou152efa22010-05-16 18:19:27 +00001662And go back to listening for new client connections (of course, a real server
1663would probably handle each client connection in a separate thread, or put
Victor Stinner29611452014-10-10 12:52:43 +02001664the sockets in :ref:`non-blocking mode <ssl-nonblocking>` and use an event loop).
Antoine Pitrou152efa22010-05-16 18:19:27 +00001665
1666
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001667.. _ssl-nonblocking:
1668
1669Notes on non-blocking sockets
1670-----------------------------
1671
Antoine Pitroub4bebda2014-04-29 10:03:28 +02001672SSL sockets behave slightly different than regular sockets in
1673non-blocking mode. When working with non-blocking sockets, there are
1674thus several things you need to be aware of:
1675
1676- Most :class:`SSLSocket` methods will raise either
1677 :exc:`SSLWantWriteError` or :exc:`SSLWantReadError` instead of
1678 :exc:`BlockingIOError` if an I/O operation would
1679 block. :exc:`SSLWantReadError` will be raised if a read operation on
1680 the underlying socket is necessary, and :exc:`SSLWantWriteError` for
1681 a write operation on the underlying socket. Note that attempts to
1682 *write* to an SSL socket may require *reading* from the underlying
1683 socket first, and attempts to *read* from the SSL socket may require
1684 a prior *write* to the underlying socket.
1685
1686 .. versionchanged:: 3.5
1687
1688 In earlier Python versions, the :meth:`!SSLSocket.send` method
1689 returned zero instead of raising :exc:`SSLWantWriteError` or
1690 :exc:`SSLWantReadError`.
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001691
1692- Calling :func:`~select.select` tells you that the OS-level socket can be
1693 read from (or written to), but it does not imply that there is sufficient
1694 data at the upper SSL layer. For example, only part of an SSL frame might
1695 have arrived. Therefore, you must be ready to handle :meth:`SSLSocket.recv`
1696 and :meth:`SSLSocket.send` failures, and retry after another call to
1697 :func:`~select.select`.
1698
Antoine Pitrou75e03382014-05-18 00:55:13 +02001699- Conversely, since the SSL layer has its own framing, a SSL socket may
1700 still have data available for reading without :func:`~select.select`
1701 being aware of it. Therefore, you should first call
1702 :meth:`SSLSocket.recv` to drain any potentially available data, and then
1703 only block on a :func:`~select.select` call if still necessary.
1704
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001705 (of course, similar provisions apply when using other primitives such as
Antoine Pitrou75e03382014-05-18 00:55:13 +02001706 :func:`~select.poll`, or those in the :mod:`selectors` module)
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001707
1708- The SSL handshake itself will be non-blocking: the
1709 :meth:`SSLSocket.do_handshake` method has to be retried until it returns
1710 successfully. Here is a synopsis using :func:`~select.select` to wait for
1711 the socket's readiness::
1712
1713 while True:
1714 try:
1715 sock.do_handshake()
1716 break
Antoine Pitrou873bf262011-10-27 23:59:03 +02001717 except ssl.SSLWantReadError:
1718 select.select([sock], [], [])
1719 except ssl.SSLWantWriteError:
1720 select.select([], [sock], [])
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001721
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001722.. seealso::
1723
Victor Stinner29611452014-10-10 12:52:43 +02001724 The :mod:`asyncio` module supports :ref:`non-blocking SSL sockets
1725 <ssl-nonblocking>` and provides a
Victor Stinnercfb2a0a2014-10-10 12:45:10 +02001726 higher level API. It polls for events using the :mod:`selectors` module and
1727 handles :exc:`SSLWantWriteError`, :exc:`SSLWantReadError` and
1728 :exc:`BlockingIOError` exceptions. It runs the SSL handshake asynchronously
1729 as well.
1730
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001731
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001732Memory BIO Support
1733------------------
1734
1735.. versionadded:: 3.5
1736
1737Ever since the SSL module was introduced in Python 2.6, the :class:`SSLSocket`
1738class has provided two related but distinct areas of functionality:
1739
1740- SSL protocol handling
1741- Network IO
1742
1743The network IO API is identical to that provided by :class:`socket.socket`,
1744from which :class:`SSLSocket` also inherits. This allows an SSL socket to be
1745used as a drop-in replacement for a regular socket, making it very easy to add
1746SSL support to an existing application.
1747
1748Combining SSL protocol handling and network IO usually works well, but there
1749are some cases where it doesn't. An example is async IO frameworks that want to
1750use a different IO multiplexing model than the "select/poll on a file
1751descriptor" (readiness based) model that is assumed by :class:`socket.socket`
1752and by the internal OpenSSL socket IO routines. This is mostly relevant for
1753platforms like Windows where this model is not efficient. For this purpose, a
1754reduced scope variant of :class:`SSLSocket` called :class:`SSLObject` is
1755provided.
1756
1757.. class:: SSLObject
1758
1759 A reduced-scope variant of :class:`SSLSocket` representing an SSL protocol
Victor Stinner2debf152014-10-10 13:04:08 +02001760 instance that does not contain any network IO methods. This class is
1761 typically used by framework authors that want to implement asynchronous IO
1762 for SSL through memory buffers.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001763
Victor Stinner2debf152014-10-10 13:04:08 +02001764 This class implements an interface on top of a low-level SSL object as
1765 implemented by OpenSSL. This object captures the state of an SSL connection
1766 but does not provide any network IO itself. IO needs to be performed through
1767 separate "BIO" objects which are OpenSSL's IO abstraction layer.
1768
1769 An :class:`SSLObject` instance can be created using the
1770 :meth:`~SSLContext.wrap_bio` method. This method will create the
1771 :class:`SSLObject` instance and bind it to a pair of BIOs. The *incoming*
1772 BIO is used to pass data from Python to the SSL protocol instance, while the
1773 *outgoing* BIO is used to pass data the other way around.
1774
1775 The following methods are available:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001776
Victor Stinner805b2622014-10-10 12:49:08 +02001777 - :attr:`~SSLSocket.context`
1778 - :attr:`~SSLSocket.server_side`
1779 - :attr:`~SSLSocket.server_hostname`
1780 - :meth:`~SSLSocket.read`
1781 - :meth:`~SSLSocket.write`
1782 - :meth:`~SSLSocket.getpeercert`
1783 - :meth:`~SSLSocket.selected_npn_protocol`
1784 - :meth:`~SSLSocket.cipher`
1785 - :meth:`~SSLSocket.compression`
1786 - :meth:`~SSLSocket.pending`
1787 - :meth:`~SSLSocket.do_handshake`
1788 - :meth:`~SSLSocket.unwrap`
1789 - :meth:`~SSLSocket.get_channel_binding`
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001790
Victor Stinner2debf152014-10-10 13:04:08 +02001791 When compared to :class:`SSLSocket`, this object lacks the following
1792 features:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001793
Victor Stinner2debf152014-10-10 13:04:08 +02001794 - Any form of network IO incluging methods such as ``recv()`` and
1795 ``send()``.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001796
Victor Stinner2debf152014-10-10 13:04:08 +02001797 - There is no *do_handshake_on_connect* machinery. You must always manually
1798 call :meth:`~SSLSocket.do_handshake` to start the handshake.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001799
Victor Stinner2debf152014-10-10 13:04:08 +02001800 - There is no handling of *suppress_ragged_eofs*. All end-of-file conditions
1801 that are in violation of the protocol are reported via the
1802 :exc:`SSLEOFError` exception.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001803
Victor Stinner2debf152014-10-10 13:04:08 +02001804 - The method :meth:`~SSLSocket.unwrap` call does not return anything,
1805 unlike for an SSL socket where it returns the underlying socket.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001806
Victor Stinner2debf152014-10-10 13:04:08 +02001807 - The *server_name_callback* callback passed to
1808 :meth:`SSLContext.set_servername_callback` will get an :class:`SSLObject`
1809 instance instead of a :class:`SSLSocket` instance as its first parameter.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001810
Victor Stinner2debf152014-10-10 13:04:08 +02001811 Some notes related to the use of :class:`SSLObject`:
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001812
Victor Stinner2debf152014-10-10 13:04:08 +02001813 - All IO on an :class:`SSLObject` is :ref:`non-blocking <ssl-nonblocking>`.
1814 This means that for example :meth:`~SSLSocket.read` will raise an
1815 :exc:`SSLWantReadError` if it needs more data than the incoming BIO has
1816 available.
1817
1818 - There is no module-level ``wrap_bio()`` call like there is for
1819 :meth:`~SSLContext.wrap_socket`. An :class:`SSLObject` is always created
1820 via an :class:`SSLContext`.
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001821
Victor Stinner805b2622014-10-10 12:49:08 +02001822An SSLObject communicates with the outside world using memory buffers. The
1823class :class:`MemoryBIO` provides a memory buffer that can be used for this
1824purpose. It wraps an OpenSSL memory BIO (Basic IO) object:
1825
1826.. class:: MemoryBIO
1827
1828 A memory buffer that can be used to pass data between Python and an SSL
1829 protocol instance.
1830
1831 .. attribute:: MemoryBIO.pending
1832
1833 Return the number of bytes currently in the memory buffer.
1834
1835 .. attribute:: MemoryBIO.eof
1836
1837 A boolean indicating whether the memory BIO is current at the end-of-file
1838 position.
1839
1840 .. method:: MemoryBIO.read(n=-1)
1841
1842 Read up to *n* bytes from the memory buffer. If *n* is not specified or
1843 negative, all bytes are returned.
1844
1845 .. method:: MemoryBIO.write(buf)
1846
1847 Write the bytes from *buf* to the memory BIO. The *buf* argument must be an
1848 object supporting the buffer protocol.
1849
1850 The return value is the number of bytes written, which is always equal to
1851 the length of *buf*.
1852
1853 .. method:: MemoryBIO.write_eof()
1854
1855 Write an EOF marker to the memory BIO. After this method has been called, it
1856 is illegal to call :meth:`~MemoryBIO.write`. The attribute :attr:`eof` will
1857 become true after all data currently in the buffer has been read.
1858
Antoine Pitroub1fdf472014-10-05 20:41:53 +02001859
Antoine Pitrou152efa22010-05-16 18:19:27 +00001860.. _ssl-security:
1861
1862Security considerations
1863-----------------------
1864
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01001865Best defaults
1866^^^^^^^^^^^^^
Antoine Pitrou152efa22010-05-16 18:19:27 +00001867
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01001868For **client use**, if you don't have any special requirements for your
1869security policy, it is highly recommended that you use the
1870:func:`create_default_context` function to create your SSL context.
1871It will load the system's trusted CA certificates, enable certificate
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01001872validation and hostname checking, and try to choose reasonably secure
1873protocol and cipher settings.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01001874
1875For example, here is how you would use the :class:`smtplib.SMTP` class to
1876create a trusted, secure connection to a SMTP server::
1877
1878 >>> import ssl, smtplib
1879 >>> smtp = smtplib.SMTP("mail.python.org", port=587)
1880 >>> context = ssl.create_default_context()
1881 >>> smtp.starttls(context=context)
1882 (220, b'2.0.0 Ready to start TLS')
1883
1884If a client certificate is needed for the connection, it can be added with
1885:meth:`SSLContext.load_cert_chain`.
1886
1887By contrast, if you create the SSL context by calling the :class:`SSLContext`
Antoine Pitrouf8cbbbb2014-03-23 16:31:08 +01001888constructor yourself, it will not have certificate validation nor hostname
1889checking enabled by default. If you do so, please read the paragraphs below
1890to achieve a good security level.
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01001891
1892Manual settings
1893^^^^^^^^^^^^^^^
1894
1895Verifying certificates
1896''''''''''''''''''''''
1897
Donald Stufft8b852f12014-05-20 12:58:38 -04001898When calling the :class:`SSLContext` constructor directly,
Antoine Pitrou152efa22010-05-16 18:19:27 +00001899:const:`CERT_NONE` is the default. Since it does not authenticate the other
1900peer, it can be insecure, especially in client mode where most of time you
1901would like to ensure the authenticity of the server you're talking to.
1902Therefore, when in client mode, it is highly recommended to use
1903:const:`CERT_REQUIRED`. However, it is in itself not sufficient; you also
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001904have to check that the server certificate, which can be obtained by calling
1905:meth:`SSLSocket.getpeercert`, matches the desired service. For many
1906protocols and applications, the service can be identified by the hostname;
Christian Heimes1aa9a752013-12-02 02:41:19 +01001907in this case, the :func:`match_hostname` function can be used. This common
1908check is automatically performed when :attr:`SSLContext.check_hostname` is
1909enabled.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001910
1911In server mode, if you want to authenticate your clients using the SSL layer
1912(rather than using a higher-level authentication mechanism), you'll also have
1913to specify :const:`CERT_REQUIRED` and similarly check the client certificate.
1914
1915 .. note::
1916
1917 In client mode, :const:`CERT_OPTIONAL` and :const:`CERT_REQUIRED` are
1918 equivalent unless anonymous ciphers are enabled (they are disabled
1919 by default).
Thomas Woutersed03b412007-08-28 21:37:11 +00001920
Antoine Pitroub5218772010-05-21 09:56:06 +00001921Protocol versions
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01001922'''''''''''''''''
Antoine Pitroub5218772010-05-21 09:56:06 +00001923
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001924SSL versions 2 and 3 are considered insecure and are therefore dangerous to
1925use. If you want maximum compatibility between clients and servers, it is
1926recommended to use :const:`PROTOCOL_SSLv23` as the protocol version and then
1927disable SSLv2 and SSLv3 explicitly using the :data:`SSLContext.options`
1928attribute::
Antoine Pitroub5218772010-05-21 09:56:06 +00001929
1930 context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
1931 context.options |= ssl.OP_NO_SSLv2
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001932 context.options |= ssl.OP_NO_SSLv3
Antoine Pitroub5218772010-05-21 09:56:06 +00001933
Antoine Pitrou4b4ddb22014-10-21 00:14:39 +02001934The SSL context created above will only allow TLSv1 and later (if
1935supported by your system) connections.
Antoine Pitroub5218772010-05-21 09:56:06 +00001936
Antoine Pitroub7ffed82012-01-04 02:53:44 +01001937Cipher selection
Antoine Pitrouc5e075f2014-03-22 18:19:11 +01001938''''''''''''''''
Antoine Pitroub7ffed82012-01-04 02:53:44 +01001939
1940If you have advanced security requirements, fine-tuning of the ciphers
1941enabled when negotiating a SSL session is possible through the
1942:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
1943ssl module disables certain weak ciphers by default, but you may want
Donald Stufft79ccaa22014-03-21 21:33:34 -04001944to further restrict the cipher choice. Be sure to read OpenSSL's documentation
1945about the `cipher list format <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`_.
1946If you want to check which ciphers are enabled by a given cipher list, use the
1947``openssl ciphers`` command on your system.
Antoine Pitroub7ffed82012-01-04 02:53:44 +01001948
Antoine Pitrou9eefe912013-11-17 15:35:33 +01001949Multi-processing
1950^^^^^^^^^^^^^^^^
1951
1952If using this module as part of a multi-processed application (using,
1953for example the :mod:`multiprocessing` or :mod:`concurrent.futures` modules),
1954be aware that OpenSSL's internal random number generator does not properly
1955handle forked processes. Applications must change the PRNG state of the
1956parent process if they use any SSL feature with :func:`os.fork`. Any
1957successful call of :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or
1958:func:`~ssl.RAND_pseudo_bytes` is sufficient.
1959
Georg Brandl48310cd2009-01-03 21:18:54 +00001960
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001961.. seealso::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001962
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001963 Class :class:`socket.socket`
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02001964 Documentation of underlying :mod:`socket` class
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001965
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02001966 `SSL/TLS Strong Encryption: An Introduction <http://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_
1967 Intro from the Apache webserver documentation
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001968
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001969 `RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management <http://www.ietf.org/rfc/rfc1422>`_
1970 Steve Kent
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001971
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001972 `RFC 1750: Randomness Recommendations for Security <http://www.ietf.org/rfc/rfc1750>`_
1973 D. Eastlake et. al.
Thomas Wouters89d996e2007-09-08 17:39:28 +00001974
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001975 `RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile <http://www.ietf.org/rfc/rfc3280>`_
1976 Housley et. al.
Antoine Pitroud5323212010-10-22 18:19:07 +00001977
1978 `RFC 4366: Transport Layer Security (TLS) Extensions <http://www.ietf.org/rfc/rfc4366>`_
1979 Blake-Wilson et. al.
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001980
Georg Brandlb7354a62014-10-29 10:57:37 +01001981 `RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 <http://tools.ietf.org/html/rfc5246>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001982 T. Dierks et. al.
1983
Georg Brandlb7354a62014-10-29 10:57:37 +01001984 `RFC 6066: Transport Layer Security (TLS) Extensions <http://tools.ietf.org/html/rfc6066>`_
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001985 D. Eastlake
1986
1987 `IANA TLS: Transport Layer Security (TLS) Parameters <http://www.iana.org/assignments/tls-parameters/tls-parameters.xml>`_
1988 IANA