blob: 5af56f9bb57e1dec27063f1c339ca3425337b79f [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::
33
34 OpenSSL's internal random number generator does not properly handle fork.
35 Applications must change the PRNG state of the parent process if they use
Christian Heimes47674bc2013-10-29 22:19:39 +010036 any SSL feature with :func:`os.fork`. Any successful call of
Christian Heimes3046fe42013-10-29 21:08:56 +010037 :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or
38 :func:`~ssl.RAND_pseudo_bytes` is sufficient.
39
Georg Brandl7f01a132009-09-16 15:58:14 +000040This section documents the objects and functions in the ``ssl`` module; for more
41general information about TLS, SSL, and certificates, the reader is referred to
42the documents in the "See Also" section at the bottom.
Thomas Woutersed03b412007-08-28 21:37:11 +000043
Georg Brandl7f01a132009-09-16 15:58:14 +000044This module provides a class, :class:`ssl.SSLSocket`, which is derived from the
45:class:`socket.socket` type, and provides a socket-like wrapper that also
46encrypts and decrypts the data going over the socket with SSL. It supports
Antoine Pitroudab64262010-09-19 13:31:06 +000047additional methods such as :meth:`getpeercert`, which retrieves the
48certificate of the other side of the connection, and :meth:`cipher`,which
49retrieves the cipher being used for the secure connection.
Thomas Woutersed03b412007-08-28 21:37:11 +000050
Antoine Pitrou152efa22010-05-16 18:19:27 +000051For more sophisticated applications, the :class:`ssl.SSLContext` class
52helps manage settings and certificates, which can then be inherited
53by SSL sockets created through the :meth:`SSLContext.wrap_socket` method.
54
55
Thomas Wouters1b7f8912007-09-19 03:06:30 +000056Functions, Constants, and Exceptions
57------------------------------------
58
59.. exception:: SSLError
60
Antoine Pitrou59fdd672010-10-08 10:37:08 +000061 Raised to signal an error from the underlying SSL implementation
62 (currently provided by the OpenSSL library). This signifies some
63 problem in the higher-level encryption and authentication layer that's
64 superimposed on the underlying network connection. This error
Antoine Pitrou5574c302011-10-12 17:53:43 +020065 is a subtype of :exc:`OSError`. The error code and message of
66 :exc:`SSLError` instances are provided by the OpenSSL library.
67
68 .. versionchanged:: 3.3
69 :exc:`SSLError` used to be a subtype of :exc:`socket.error`.
Antoine Pitrou59fdd672010-10-08 10:37:08 +000070
Antoine Pitrou3b36fb12012-06-22 21:11:52 +020071 .. attribute:: library
72
73 A string mnemonic designating the OpenSSL submodule in which the error
74 occurred, such as ``SSL``, ``PEM`` or ``X509``. The range of possible
75 values depends on the OpenSSL version.
76
77 .. versionadded:: 3.3
78
79 .. attribute:: reason
80
81 A string mnemonic designating the reason this error occurred, for
82 example ``CERTIFICATE_VERIFY_FAILED``. The range of possible
83 values depends on the OpenSSL version.
84
85 .. versionadded:: 3.3
86
Antoine Pitrou41032a62011-10-27 23:56:55 +020087.. exception:: SSLZeroReturnError
88
89 A subclass of :exc:`SSLError` raised when trying to read or write and
90 the SSL connection has been closed cleanly. Note that this doesn't
91 mean that the underlying transport (read TCP) has been closed.
92
93 .. versionadded:: 3.3
94
95.. exception:: SSLWantReadError
96
97 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
98 <ssl-nonblocking>` when trying to read or write data, but more data needs
99 to be received on the underlying TCP transport before the request can be
100 fulfilled.
101
102 .. versionadded:: 3.3
103
104.. exception:: SSLWantWriteError
105
106 A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket
107 <ssl-nonblocking>` when trying to read or write data, but more data needs
108 to be sent on the underlying TCP transport before the request can be
109 fulfilled.
110
111 .. versionadded:: 3.3
112
113.. exception:: SSLSyscallError
114
115 A subclass of :exc:`SSLError` raised when a system error was encountered
116 while trying to fulfill an operation on a SSL socket. Unfortunately,
117 there is no easy way to inspect the original errno number.
118
119 .. versionadded:: 3.3
120
121.. exception:: SSLEOFError
122
123 A subclass of :exc:`SSLError` raised when the SSL connection has been
Antoine Pitrouf3dc2d72011-10-28 00:01:03 +0200124 terminated abruptly. Generally, you shouldn't try to reuse the underlying
Antoine Pitrou41032a62011-10-27 23:56:55 +0200125 transport when this error is encountered.
126
127 .. versionadded:: 3.3
128
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000129.. exception:: CertificateError
130
131 Raised to signal an error with a certificate (such as mismatching
132 hostname). Certificate errors detected by OpenSSL, though, raise
133 an :exc:`SSLError`.
134
135
136Socket creation
137^^^^^^^^^^^^^^^
138
139The following function allows for standalone socket creation. Starting from
140Python 3.2, it can be more flexible to use :meth:`SSLContext.wrap_socket`
141instead.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000142
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000143.. 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 +0000144
Georg Brandl7f01a132009-09-16 15:58:14 +0000145 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance
146 of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps
147 the underlying socket in an SSL context. For client-side sockets, the
148 context construction is lazy; if the underlying socket isn't connected yet,
149 the context construction will be performed after :meth:`connect` is called on
150 the socket. For server-side sockets, if the socket has no remote peer, it is
151 assumed to be a listening socket, and the server-side SSL wrapping is
152 automatically performed on client connections accepted via the :meth:`accept`
153 method. :func:`wrap_socket` may raise :exc:`SSLError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000154
Georg Brandl7f01a132009-09-16 15:58:14 +0000155 The ``keyfile`` and ``certfile`` parameters specify optional files which
156 contain a certificate to be used to identify the local side of the
157 connection. See the discussion of :ref:`ssl-certificates` for more
158 information on how the certificate is stored in the ``certfile``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000159
Georg Brandl7f01a132009-09-16 15:58:14 +0000160 The parameter ``server_side`` is a boolean which identifies whether
161 server-side or client-side behavior is desired from this socket.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000162
Georg Brandl7f01a132009-09-16 15:58:14 +0000163 The parameter ``cert_reqs`` specifies whether a certificate is required from
164 the other side of the connection, and whether it will be validated if
165 provided. It must be one of the three values :const:`CERT_NONE`
166 (certificates ignored), :const:`CERT_OPTIONAL` (not required, but validated
167 if provided), or :const:`CERT_REQUIRED` (required and validated). If the
168 value of this parameter is not :const:`CERT_NONE`, then the ``ca_certs``
169 parameter must point to a file of CA certificates.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000170
Georg Brandl7f01a132009-09-16 15:58:14 +0000171 The ``ca_certs`` file contains a set of concatenated "certification
172 authority" certificates, which are used to validate certificates passed from
173 the other end of the connection. See the discussion of
174 :ref:`ssl-certificates` for more information about how to arrange the
175 certificates in this file.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000176
Georg Brandl7f01a132009-09-16 15:58:14 +0000177 The parameter ``ssl_version`` specifies which version of the SSL protocol to
178 use. Typically, the server chooses a particular protocol version, and the
179 client must adapt to the server's choice. Most of the versions are not
Antoine Pitrou84a2edc2012-01-09 21:35:11 +0100180 interoperable with the other versions. If not specified, the default is
181 :data:`PROTOCOL_SSLv23`; it provides the most compatibility with other
Georg Brandl7f01a132009-09-16 15:58:14 +0000182 versions.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000183
Georg Brandl7f01a132009-09-16 15:58:14 +0000184 Here's a table showing which versions in a client (down the side) can connect
185 to which versions in a server (along the top):
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000186
187 .. table::
188
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100189 ======================== ========= ========= ========== ========= =========== ===========
190 *client* / **server** **SSLv2** **SSLv3** **SSLv23** **TLSv1** **TLSv1.1** **TLSv1.2**
191 ------------------------ --------- --------- ---------- --------- ----------- -----------
192 *SSLv2* yes no yes no no no
193 *SSLv3* no yes yes no no no
194 *SSLv23* yes no yes no no no
195 *TLSv1* no no yes yes no no
196 *TLSv1.1* no no yes no yes no
197 *TLSv1.2* no no yes no no yes
198 ======================== ========= ========= ========== ========= =========== ===========
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000199
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000200 .. note::
201
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000202 Which connections succeed will vary depending on the version of
203 OpenSSL. For instance, in some older versions of OpenSSL (such
204 as 0.9.7l on OS X 10.4), an SSLv2 client could not connect to an
205 SSLv23 server. Another example: beginning with OpenSSL 1.0.0,
206 an SSLv23 client will not actually attempt SSLv2 connections
207 unless you explicitly enable SSLv2 ciphers; for example, you
208 might specify ``"ALL"`` or ``"SSLv2"`` as the *ciphers* parameter
209 to enable them.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000210
Benjamin Petersond7c3ed52010-06-27 22:32:30 +0000211 The *ciphers* parameter sets the available ciphers for this SSL object.
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000212 It should be a string in the `OpenSSL cipher list format
213 <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`_.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000214
Bill Janssen48dc27c2007-12-05 03:38:10 +0000215 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
216 handshake automatically after doing a :meth:`socket.connect`, or whether the
Georg Brandl7f01a132009-09-16 15:58:14 +0000217 application program will call it explicitly, by invoking the
218 :meth:`SSLSocket.do_handshake` method. Calling
219 :meth:`SSLSocket.do_handshake` explicitly gives the program control over the
220 blocking behavior of the socket I/O involved in the handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000221
Georg Brandl7f01a132009-09-16 15:58:14 +0000222 The parameter ``suppress_ragged_eofs`` specifies how the
Antoine Pitroudab64262010-09-19 13:31:06 +0000223 :meth:`SSLSocket.recv` method should signal unexpected EOF from the other end
Georg Brandl7f01a132009-09-16 15:58:14 +0000224 of the connection. If specified as :const:`True` (the default), it returns a
Antoine Pitroudab64262010-09-19 13:31:06 +0000225 normal EOF (an empty bytes object) in response to unexpected EOF errors
226 raised from the underlying socket; if :const:`False`, it will raise the
227 exceptions back to the caller.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000228
Ezio Melotti4d5195b2010-04-20 10:57:44 +0000229 .. versionchanged:: 3.2
Antoine Pitrou2d9cb9c2010-04-17 17:40:45 +0000230 New optional argument *ciphers*.
231
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000232Random generation
233^^^^^^^^^^^^^^^^^
234
Victor Stinner99c8b162011-05-24 12:05:19 +0200235.. function:: RAND_bytes(num)
236
Victor Stinnera6752062011-05-25 11:27:40 +0200237 Returns *num* cryptographically strong pseudo-random bytes. Raises an
238 :class:`SSLError` if the PRNG has not been seeded with enough data or if the
239 operation is not supported by the current RAND method. :func:`RAND_status`
240 can be used to check the status of the PRNG and :func:`RAND_add` can be used
241 to seed the PRNG.
Victor Stinner99c8b162011-05-24 12:05:19 +0200242
Victor Stinner19fb53c2011-05-24 21:32:40 +0200243 Read the Wikipedia article, `Cryptographically secure pseudorandom number
Victor Stinnera6752062011-05-25 11:27:40 +0200244 generator (CSPRNG)
Victor Stinner19fb53c2011-05-24 21:32:40 +0200245 <http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator>`_,
246 to get the requirements of a cryptographically generator.
247
Victor Stinner99c8b162011-05-24 12:05:19 +0200248 .. versionadded:: 3.3
249
250.. function:: RAND_pseudo_bytes(num)
251
252 Returns (bytes, is_cryptographic): bytes are *num* pseudo-random bytes,
253 is_cryptographic is True if the bytes generated are cryptographically
Victor Stinnera6752062011-05-25 11:27:40 +0200254 strong. Raises an :class:`SSLError` if the operation is not supported by the
255 current RAND method.
Victor Stinner99c8b162011-05-24 12:05:19 +0200256
Victor Stinner19fb53c2011-05-24 21:32:40 +0200257 Generated pseudo-random byte sequences will be unique if they are of
258 sufficient length, but are not necessarily unpredictable. They can be used
259 for non-cryptographic purposes and for certain purposes in cryptographic
260 protocols, but usually not for key generation etc.
261
Victor Stinner99c8b162011-05-24 12:05:19 +0200262 .. versionadded:: 3.3
263
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000264.. function:: RAND_status()
265
Georg Brandl7f01a132009-09-16 15:58:14 +0000266 Returns True if the SSL pseudo-random number generator has been seeded with
267 'enough' randomness, and False otherwise. You can use :func:`ssl.RAND_egd`
268 and :func:`ssl.RAND_add` to increase the randomness of the pseudo-random
269 number generator.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000270
271.. function:: RAND_egd(path)
272
Victor Stinner99c8b162011-05-24 12:05:19 +0200273 If you are running an entropy-gathering daemon (EGD) somewhere, and *path*
Georg Brandl7f01a132009-09-16 15:58:14 +0000274 is the pathname of a socket connection open to it, this will read 256 bytes
275 of randomness from the socket, and add it to the SSL pseudo-random number
276 generator to increase the security of generated secret keys. This is
277 typically only necessary on systems without better sources of randomness.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000278
Georg Brandl7f01a132009-09-16 15:58:14 +0000279 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources
280 of entropy-gathering daemons.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000281
282.. function:: RAND_add(bytes, entropy)
283
Victor Stinner99c8b162011-05-24 12:05:19 +0200284 Mixes the given *bytes* into the SSL pseudo-random number generator. The
285 parameter *entropy* (a float) is a lower bound on the entropy contained in
Georg Brandl7f01a132009-09-16 15:58:14 +0000286 string (so you can always use :const:`0.0`). See :rfc:`1750` for more
287 information on sources of entropy.
Thomas Woutersed03b412007-08-28 21:37:11 +0000288
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000289Certificate handling
290^^^^^^^^^^^^^^^^^^^^
291
292.. function:: match_hostname(cert, hostname)
293
294 Verify that *cert* (in decoded format as returned by
295 :meth:`SSLSocket.getpeercert`) matches the given *hostname*. The rules
296 applied are those for checking the identity of HTTPS servers as outlined
Georg Brandl72c98d32013-10-27 07:16:53 +0100297 in :rfc:`2818` and :rfc:`6125`, except that IP addresses are not currently
298 supported. In addition to HTTPS, this function should be suitable for
299 checking the identity of servers in various SSL-based protocols such as
300 FTPS, IMAPS, POPS and others.
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000301
302 :exc:`CertificateError` is raised on failure. On success, the function
303 returns nothing::
304
305 >>> cert = {'subject': ((('commonName', 'example.com'),),)}
306 >>> ssl.match_hostname(cert, "example.com")
307 >>> ssl.match_hostname(cert, "example.org")
308 Traceback (most recent call last):
309 File "<stdin>", line 1, in <module>
310 File "/home/py3k/Lib/ssl.py", line 130, in match_hostname
311 ssl.CertificateError: hostname 'example.org' doesn't match 'example.com'
312
313 .. versionadded:: 3.2
314
Georg Brandl72c98d32013-10-27 07:16:53 +0100315 .. versionchanged:: 3.3.3
316 The function now follows :rfc:`6125`, section 6.4.3 and does neither
317 match multiple wildcards (e.g. ``*.*.com`` or ``*a*.example.org``) nor
318 a wildcard inside an internationalized domain names (IDN) fragment.
319 IDN A-labels such as ``www*.xn--pthon-kva.org`` are still supported,
320 but ``x*.python.org`` no longer matches ``xn--tda.python.org``.
321
Thomas Woutersed03b412007-08-28 21:37:11 +0000322.. function:: cert_time_to_seconds(timestring)
323
Georg Brandl7f01a132009-09-16 15:58:14 +0000324 Returns a floating-point value containing a normal seconds-after-the-epoch
325 time value, given the time-string representing the "notBefore" or "notAfter"
326 date from a certificate.
Thomas Woutersed03b412007-08-28 21:37:11 +0000327
328 Here's an example::
329
330 >>> import ssl
331 >>> ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT")
332 1178694000.0
333 >>> import time
334 >>> time.ctime(ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT"))
335 'Wed May 9 00:00:00 2007'
Thomas Woutersed03b412007-08-28 21:37:11 +0000336
Georg Brandl7f01a132009-09-16 15:58:14 +0000337.. function:: get_server_certificate(addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None)
Thomas Woutersed03b412007-08-28 21:37:11 +0000338
Georg Brandl7f01a132009-09-16 15:58:14 +0000339 Given the address ``addr`` of an SSL-protected server, as a (*hostname*,
340 *port-number*) pair, fetches the server's certificate, and returns it as a
341 PEM-encoded string. If ``ssl_version`` is specified, uses that version of
342 the SSL protocol to attempt to connect to the server. If ``ca_certs`` is
343 specified, it should be a file containing a list of root certificates, the
344 same format as used for the same parameter in :func:`wrap_socket`. The call
345 will attempt to validate the server certificate against that set of root
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000346 certificates, and will fail if the validation attempt fails.
347
Antoine Pitrou15399c32011-04-28 19:23:55 +0200348 .. versionchanged:: 3.3
349 This function is now IPv6-compatible.
350
Georg Brandl7f01a132009-09-16 15:58:14 +0000351.. function:: DER_cert_to_PEM_cert(DER_cert_bytes)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000352
353 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
354 string version of the same certificate.
355
Georg Brandl7f01a132009-09-16 15:58:14 +0000356.. function:: PEM_cert_to_DER_cert(PEM_cert_string)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000357
Georg Brandl7f01a132009-09-16 15:58:14 +0000358 Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of
359 bytes for that same certificate.
Thomas Woutersed03b412007-08-28 21:37:11 +0000360
Christian Heimes6d7ad132013-06-09 18:02:55 +0200361.. function:: get_default_verify_paths()
362
363 Returns a named tuple with paths to OpenSSL's default cafile and capath.
364 The paths are the same as used by
365 :meth:`SSLContext.set_default_verify_paths`. The return value is a
366 :term:`named tuple` ``DefaultVerifyPaths``:
367
368 * :attr:`cafile` - resolved path to cafile or None if the file doesn't exist,
369 * :attr:`capath` - resolved path to capath or None if the directory doesn't exist,
370 * :attr:`openssl_cafile_env` - OpenSSL's environment key that points to a cafile,
371 * :attr:`openssl_cafile` - hard coded path to a cafile,
372 * :attr:`openssl_capath_env` - OpenSSL's environment key that points to a capath,
373 * :attr:`openssl_capath` - hard coded path to a capath directory
374
375 .. versionadded:: 3.4
376
Christian Heimes46bebee2013-06-09 19:03:31 +0200377.. function:: enum_cert_store(store_name, cert_type='certificate')
378
379 Retrieve certificates from Windows' system cert store. *store_name* may be
380 one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert
381 stores, too. *cert_type* is either ``certificate`` for X.509 certificates
382 or ``crl`` for X.509 certificate revocation lists.
383
384 The function returns a list of (bytes, encoding_type) tuples. The
385 encoding_type flag can be interpreted with :const:`X509_ASN_ENCODING` or
386 :const:`PKCS_7_ASN_ENCODING`.
387
388 Availability: Windows.
389
390 .. versionadded:: 3.4
Christian Heimes6d7ad132013-06-09 18:02:55 +0200391
Antoine Pitrou59fdd672010-10-08 10:37:08 +0000392Constants
393^^^^^^^^^
394
Thomas Woutersed03b412007-08-28 21:37:11 +0000395.. data:: CERT_NONE
396
Antoine Pitrou152efa22010-05-16 18:19:27 +0000397 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
398 parameter to :func:`wrap_socket`. In this mode (the default), no
399 certificates will be required from the other side of the socket connection.
400 If a certificate is received from the other end, no attempt to validate it
401 is made.
402
403 See the discussion of :ref:`ssl-security` below.
Thomas Woutersed03b412007-08-28 21:37:11 +0000404
405.. data:: CERT_OPTIONAL
406
Antoine Pitrou152efa22010-05-16 18:19:27 +0000407 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
408 parameter to :func:`wrap_socket`. In this mode no certificates will be
409 required from the other side of the socket connection; but if they
410 are provided, validation will be attempted and an :class:`SSLError`
411 will be raised on failure.
412
413 Use of this setting requires a valid set of CA certificates to
414 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
415 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000416
417.. data:: CERT_REQUIRED
418
Antoine Pitrou152efa22010-05-16 18:19:27 +0000419 Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs``
420 parameter to :func:`wrap_socket`. In this mode, certificates are
421 required from the other side of the socket connection; an :class:`SSLError`
422 will be raised if no certificate is provided, or if its validation fails.
423
424 Use of this setting requires a valid set of CA certificates to
425 be passed, either to :meth:`SSLContext.load_verify_locations` or as a
426 value of the ``ca_certs`` parameter to :func:`wrap_socket`.
Thomas Woutersed03b412007-08-28 21:37:11 +0000427
428.. data:: PROTOCOL_SSLv2
429
430 Selects SSL version 2 as the channel encryption protocol.
431
Victor Stinner3de49192011-05-09 00:42:58 +0200432 This protocol is not available if OpenSSL is compiled with OPENSSL_NO_SSL2
433 flag.
434
Antoine Pitrou8eac60d2010-05-16 14:19:41 +0000435 .. warning::
436
437 SSL version 2 is insecure. Its use is highly discouraged.
438
Thomas Woutersed03b412007-08-28 21:37:11 +0000439.. data:: PROTOCOL_SSLv23
440
Georg Brandl7f01a132009-09-16 15:58:14 +0000441 Selects SSL version 2 or 3 as the channel encryption protocol. This is a
442 setting to use with servers for maximum compatibility with the other end of
443 an SSL connection, but it may cause the specific ciphers chosen for the
444 encryption to be of fairly low quality.
Thomas Woutersed03b412007-08-28 21:37:11 +0000445
446.. data:: PROTOCOL_SSLv3
447
Georg Brandl7f01a132009-09-16 15:58:14 +0000448 Selects SSL version 3 as the channel encryption protocol. For clients, this
449 is the maximally compatible SSL variant.
Thomas Woutersed03b412007-08-28 21:37:11 +0000450
451.. data:: PROTOCOL_TLSv1
452
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100453 Selects TLS version 1.0 as the channel encryption protocol.
454
455.. data:: PROTOCOL_TLSv1_1
456
457
458 Selects TLS version 1.1 as the channel encryption protocol.
459 Available only with openssl version 1.0.1+.
460
461 .. versionadded:: 3.4
462
463.. data:: PROTOCOL_TLSv1_2
464
465
466 Selects TLS version 1.2 as the channel encryption protocol. This is the most
Georg Brandl7f01a132009-09-16 15:58:14 +0000467 modern version, and probably the best choice for maximum protection, if both
468 sides can speak it.
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100469 Available only with openssl version 1.0.1+.
470
471 .. versionadded:: 3.4
Thomas Woutersed03b412007-08-28 21:37:11 +0000472
Antoine Pitroub5218772010-05-21 09:56:06 +0000473.. data:: OP_ALL
474
475 Enables workarounds for various bugs present in other SSL implementations.
Antoine Pitrou9f6b02e2012-01-27 10:02:55 +0100476 This option is set by default. It does not necessarily set the same
477 flags as OpenSSL's ``SSL_OP_ALL`` constant.
Antoine Pitroub5218772010-05-21 09:56:06 +0000478
479 .. versionadded:: 3.2
480
481.. data:: OP_NO_SSLv2
482
483 Prevents an SSLv2 connection. This option is only applicable in
484 conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from
485 choosing SSLv2 as the protocol version.
486
487 .. versionadded:: 3.2
488
489.. data:: OP_NO_SSLv3
490
491 Prevents an SSLv3 connection. This option is only applicable in
492 conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from
493 choosing SSLv3 as the protocol version.
494
495 .. versionadded:: 3.2
496
497.. data:: OP_NO_TLSv1
498
499 Prevents a TLSv1 connection. This option is only applicable in
500 conjunction with :const:`PROTOCOL_SSLv23`. It prevents the peers from
501 choosing TLSv1 as the protocol version.
502
503 .. versionadded:: 3.2
504
Antoine Pitrou2463e5f2013-03-28 22:24:43 +0100505.. data:: OP_NO_TLSv1_1
506
507 Prevents a TLSv1.1 connection. This option is only applicable in conjunction
508 with :const:`PROTOCOL_SSLv23`. It prevents the peers from choosing TLSv1.1 as
509 the protocol version. Available only with openssl version 1.0.1+.
510
511 .. versionadded:: 3.4
512
513.. data:: OP_NO_TLSv1_2
514
515 Prevents a TLSv1.2 connection. This option is only applicable in conjunction
516 with :const:`PROTOCOL_SSLv23`. It prevents the peers from choosing TLSv1.2 as
517 the protocol version. Available only with openssl version 1.0.1+.
518
519 .. versionadded:: 3.4
520
Antoine Pitrou6db49442011-12-19 13:27:11 +0100521.. data:: OP_CIPHER_SERVER_PREFERENCE
522
523 Use the server's cipher ordering preference, rather than the client's.
524 This option has no effect on client sockets and SSLv2 server sockets.
525
526 .. versionadded:: 3.3
527
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100528.. data:: OP_SINGLE_DH_USE
529
530 Prevents re-use of the same DH key for distinct SSL sessions. This
531 improves forward secrecy but requires more computational resources.
532 This option only applies to server sockets.
533
534 .. versionadded:: 3.3
535
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100536.. data:: OP_SINGLE_ECDH_USE
537
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100538 Prevents re-use of the same ECDH key for distinct SSL sessions. This
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100539 improves forward secrecy but requires more computational resources.
540 This option only applies to server sockets.
541
542 .. versionadded:: 3.3
543
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100544.. data:: OP_NO_COMPRESSION
545
546 Disable compression on the SSL channel. This is useful if the application
547 protocol supports its own compression scheme.
548
549 This option is only available with OpenSSL 1.0.0 and later.
550
551 .. versionadded:: 3.3
552
Antoine Pitrou501da612011-12-21 09:27:41 +0100553.. data:: HAS_ECDH
554
555 Whether the OpenSSL library has built-in support for Elliptic Curve-based
556 Diffie-Hellman key exchange. This should be true unless the feature was
557 explicitly disabled by the distributor.
558
559 .. versionadded:: 3.3
560
Antoine Pitroud5323212010-10-22 18:19:07 +0000561.. data:: HAS_SNI
562
563 Whether the OpenSSL library has built-in support for the *Server Name
564 Indication* extension to the SSLv3 and TLSv1 protocols (as defined in
565 :rfc:`4366`). When true, you can use the *server_hostname* argument to
566 :meth:`SSLContext.wrap_socket`.
567
568 .. versionadded:: 3.2
569
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100570.. data:: HAS_NPN
571
572 Whether the OpenSSL library has built-in support for *Next Protocol
573 Negotiation* as described in the `NPN draft specification
574 <http://tools.ietf.org/html/draft-agl-tls-nextprotoneg>`_. When true,
575 you can use the :meth:`SSLContext.set_npn_protocols` method to advertise
576 which protocols you want to support.
577
578 .. versionadded:: 3.3
579
Antoine Pitroud6494802011-07-21 01:11:30 +0200580.. data:: CHANNEL_BINDING_TYPES
581
582 List of supported TLS channel binding types. Strings in this list
583 can be used as arguments to :meth:`SSLSocket.get_channel_binding`.
584
585 .. versionadded:: 3.3
586
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000587.. data:: OPENSSL_VERSION
588
589 The version string of the OpenSSL library loaded by the interpreter::
590
591 >>> ssl.OPENSSL_VERSION
592 'OpenSSL 0.9.8k 25 Mar 2009'
593
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000594 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000595
596.. data:: OPENSSL_VERSION_INFO
597
598 A tuple of five integers representing version information about the
599 OpenSSL library::
600
601 >>> ssl.OPENSSL_VERSION_INFO
602 (0, 9, 8, 11, 15)
603
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000604 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000605
606.. data:: OPENSSL_VERSION_NUMBER
607
608 The raw version number of the OpenSSL library, as a single integer::
609
610 >>> ssl.OPENSSL_VERSION_NUMBER
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000611 9470143
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000612 >>> hex(ssl.OPENSSL_VERSION_NUMBER)
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000613 '0x9080bf'
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000614
Antoine Pitrou43a94c312010-04-05 21:44:48 +0000615 .. versionadded:: 3.2
Antoine Pitrou04f6a322010-04-05 21:40:07 +0000616
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100617.. data:: ALERT_DESCRIPTION_HANDSHAKE_FAILURE
618 ALERT_DESCRIPTION_INTERNAL_ERROR
619 ALERT_DESCRIPTION_*
620
621 Alert Descriptions from :rfc:`5246` and others. The `IANA TLS Alert Registry
622 <http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6>`_
623 contains this list and references to the RFCs where their meaning is defined.
624
625 Used as the return value of the callback function in
626 :meth:`SSLContext.set_servername_callback`.
627
628 .. versionadded:: 3.4
629
Christian Heimes46bebee2013-06-09 19:03:31 +0200630.. data:: X509_ASN_ENCODING
631 PKCS_7_ASN_ENCODING
632
633 Encoding flags for :func:`enum_cert_store`.
634
635 Availability: Windows.
636
637 .. versionadded:: 3.4
638
Thomas Woutersed03b412007-08-28 21:37:11 +0000639
Antoine Pitrou152efa22010-05-16 18:19:27 +0000640SSL Sockets
641-----------
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000642
Antoine Pitroue1f2f302010-09-19 13:56:11 +0000643SSL sockets provide the following methods of :ref:`socket-objects`:
Antoine Pitrou792ff3e2010-09-19 13:19:21 +0000644
Antoine Pitroue1f2f302010-09-19 13:56:11 +0000645- :meth:`~socket.socket.accept()`
646- :meth:`~socket.socket.bind()`
647- :meth:`~socket.socket.close()`
648- :meth:`~socket.socket.connect()`
649- :meth:`~socket.socket.detach()`
650- :meth:`~socket.socket.fileno()`
651- :meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`
652- :meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`
653- :meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`,
654 :meth:`~socket.socket.setblocking()`
655- :meth:`~socket.socket.listen()`
656- :meth:`~socket.socket.makefile()`
657- :meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()`
658 (but passing a non-zero ``flags`` argument is not allowed)
659- :meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with
660 the same limitation)
661- :meth:`~socket.socket.shutdown()`
662
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +0200663However, since the SSL (and TLS) protocol has its own framing atop
664of TCP, the SSL sockets abstraction can, in certain respects, diverge from
665the specification of normal, OS-level sockets. See especially the
666:ref:`notes on non-blocking sockets <ssl-nonblocking>`.
667
668SSL sockets also have the following additional methods and attributes:
Antoine Pitrou792ff3e2010-09-19 13:19:21 +0000669
Bill Janssen48dc27c2007-12-05 03:38:10 +0000670.. method:: SSLSocket.do_handshake()
671
Antoine Pitroub3593ca2011-07-11 01:39:19 +0200672 Perform the SSL setup handshake.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000673
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000674.. method:: SSLSocket.getpeercert(binary_form=False)
675
Georg Brandl7f01a132009-09-16 15:58:14 +0000676 If there is no certificate for the peer on the other end of the connection,
Antoine Pitrou20b85552013-09-29 19:50:53 +0200677 return ``None``. If the SSL handshake hasn't been done yet, raise
678 :exc:`ValueError`.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000679
Antoine Pitroud34941a2013-04-16 20:27:17 +0200680 If the ``binary_form`` parameter is :const:`False`, and a certificate was
Georg Brandl7f01a132009-09-16 15:58:14 +0000681 received from the peer, this method returns a :class:`dict` instance. If the
682 certificate was not validated, the dict is empty. If the certificate was
Antoine Pitroub7c6c812012-08-16 22:14:43 +0200683 validated, it returns a dict with several keys, amongst them ``subject``
684 (the principal for which the certificate was issued) and ``issuer``
685 (the principal issuing the certificate). If a certificate contains an
686 instance of the *Subject Alternative Name* extension (see :rfc:`3280`),
687 there will also be a ``subjectAltName`` key in the dictionary.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000688
Antoine Pitroub7c6c812012-08-16 22:14:43 +0200689 The ``subject`` and ``issuer`` fields are tuples containing the sequence
690 of relative distinguished names (RDNs) given in the certificate's data
691 structure for the respective fields, and each RDN is a sequence of
692 name-value pairs. Here is a real-world example::
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000693
Antoine Pitroub7c6c812012-08-16 22:14:43 +0200694 {'issuer': ((('countryName', 'IL'),),
695 (('organizationName', 'StartCom Ltd.'),),
696 (('organizationalUnitName',
697 'Secure Digital Certificate Signing'),),
698 (('commonName',
699 'StartCom Class 2 Primary Intermediate Server CA'),)),
700 'notAfter': 'Nov 22 08:15:19 2013 GMT',
701 'notBefore': 'Nov 21 03:09:52 2011 GMT',
702 'serialNumber': '95F0',
703 'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),),
704 (('countryName', 'US'),),
705 (('stateOrProvinceName', 'California'),),
706 (('localityName', 'San Francisco'),),
707 (('organizationName', 'Electronic Frontier Foundation, Inc.'),),
708 (('commonName', '*.eff.org'),),
709 (('emailAddress', 'hostmaster@eff.org'),)),
710 'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')),
711 'version': 3}
712
713 .. note::
714 To validate a certificate for a particular service, you can use the
715 :func:`match_hostname` function.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000716
Georg Brandl7f01a132009-09-16 15:58:14 +0000717 If the ``binary_form`` parameter is :const:`True`, and a certificate was
718 provided, this method returns the DER-encoded form of the entire certificate
719 as a sequence of bytes, or :const:`None` if the peer did not provide a
Antoine Pitroud34941a2013-04-16 20:27:17 +0200720 certificate. Whether the peer provides a certificate depends on the SSL
721 socket's role:
722
723 * for a client SSL socket, the server will always provide a certificate,
724 regardless of whether validation was required;
725
726 * for a server SSL socket, the client will only provide a certificate
727 when requested by the server; therefore :meth:`getpeercert` will return
728 :const:`None` if you used :const:`CERT_NONE` (rather than
729 :const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`).
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000730
Antoine Pitroufb046912010-11-09 20:21:19 +0000731 .. versionchanged:: 3.2
732 The returned dictionary includes additional items such as ``issuer``
733 and ``notBefore``.
734
Antoine Pitrou20b85552013-09-29 19:50:53 +0200735 .. versionchanged:: 3.4
736 :exc:`ValueError` is raised when the handshake isn't done.
737
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000738.. method:: SSLSocket.cipher()
739
Georg Brandl7f01a132009-09-16 15:58:14 +0000740 Returns a three-value tuple containing the name of the cipher being used, the
741 version of the SSL protocol that defines its use, and the number of secret
742 bits being used. If no connection has been established, returns ``None``.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000743
Antoine Pitrou8abdb8a2011-12-20 10:13:40 +0100744.. method:: SSLSocket.compression()
745
746 Return the compression algorithm being used as a string, or ``None``
747 if the connection isn't compressed.
748
749 If the higher-level protocol supports its own compression mechanism,
750 you can use :data:`OP_NO_COMPRESSION` to disable SSL-level compression.
751
752 .. versionadded:: 3.3
753
Antoine Pitroud6494802011-07-21 01:11:30 +0200754.. method:: SSLSocket.get_channel_binding(cb_type="tls-unique")
755
756 Get channel binding data for current connection, as a bytes object. Returns
757 ``None`` if not connected or the handshake has not been completed.
758
759 The *cb_type* parameter allow selection of the desired channel binding
760 type. Valid channel binding types are listed in the
761 :data:`CHANNEL_BINDING_TYPES` list. Currently only the 'tls-unique' channel
762 binding, defined by :rfc:`5929`, is supported. :exc:`ValueError` will be
763 raised if an unsupported channel binding type is requested.
764
765 .. versionadded:: 3.3
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000766
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100767.. method:: SSLSocket.selected_npn_protocol()
768
769 Returns the protocol that was selected during the TLS/SSL handshake. If
770 :meth:`SSLContext.set_npn_protocols` was not called, or if the other party
771 does not support NPN, or if the handshake has not yet happened, this will
772 return ``None``.
773
774 .. versionadded:: 3.3
775
Benjamin Peterson4aeec042008-08-19 21:42:13 +0000776.. method:: SSLSocket.unwrap()
777
Georg Brandl7f01a132009-09-16 15:58:14 +0000778 Performs the SSL shutdown handshake, which removes the TLS layer from the
779 underlying socket, and returns the underlying socket object. This can be
780 used to go from encrypted operation over a connection to unencrypted. The
781 returned socket should always be used for further communication with the
782 other side of the connection, rather than the original socket.
Benjamin Peterson4aeec042008-08-19 21:42:13 +0000783
Antoine Pitrouec883db2010-05-24 21:20:20 +0000784.. attribute:: SSLSocket.context
785
786 The :class:`SSLContext` object this SSL socket is tied to. If the SSL
787 socket was created using the top-level :func:`wrap_socket` function
788 (rather than :meth:`SSLContext.wrap_socket`), this is a custom context
789 object created for this SSL socket.
790
791 .. versionadded:: 3.2
792
793
Antoine Pitrou152efa22010-05-16 18:19:27 +0000794SSL Contexts
795------------
796
Antoine Pitroucafaad42010-05-24 15:58:43 +0000797.. versionadded:: 3.2
798
Antoine Pitroub0182c82010-10-12 20:09:02 +0000799An SSL context holds various data longer-lived than single SSL connections,
800such as SSL configuration options, certificate(s) and private key(s).
801It also manages a cache of SSL sessions for server-side sockets, in order
802to speed up repeated connections from the same clients.
803
Antoine Pitrou152efa22010-05-16 18:19:27 +0000804.. class:: SSLContext(protocol)
805
Antoine Pitroub0182c82010-10-12 20:09:02 +0000806 Create a new SSL context. You must pass *protocol* which must be one
807 of the ``PROTOCOL_*`` constants defined in this module.
808 :data:`PROTOCOL_SSLv23` is recommended for maximum interoperability.
809
Antoine Pitrou152efa22010-05-16 18:19:27 +0000810
811:class:`SSLContext` objects have the following methods and attributes:
812
Christian Heimes9a5395a2013-06-17 15:44:12 +0200813.. method:: SSLContext.cert_store_stats()
814
815 Get statistics about quantities of loaded X.509 certificates, count of
816 X.509 certificates flagged as CA certificates and certificate revocation
817 lists as dictionary.
818
819 Example for a context with one CA cert and one other cert::
820
821 >>> context.cert_store_stats()
822 {'crl': 0, 'x509_ca': 1, 'x509': 2}
823
824 .. versionadded:: 3.4
825
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +0200826.. method:: SSLContext.load_cert_chain(certfile, keyfile=None, password=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +0000827
828 Load a private key and the corresponding certificate. The *certfile*
829 string must be the path to a single file in PEM format containing the
830 certificate as well as any number of CA certificates needed to establish
831 the certificate's authenticity. The *keyfile* string, if present, must
832 point to a file containing the private key in. Otherwise the private
833 key will be taken from *certfile* as well. See the discussion of
834 :ref:`ssl-certificates` for more information on how the certificate
835 is stored in the *certfile*.
836
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +0200837 The *password* argument may be a function to call to get the password for
838 decrypting the private key. It will only be called if the private key is
839 encrypted and a password is necessary. It will be called with no arguments,
840 and it should return a string, bytes, or bytearray. If the return value is
841 a string it will be encoded as UTF-8 before using it to decrypt the key.
842 Alternatively a string, bytes, or bytearray value may be supplied directly
843 as the *password* argument. It will be ignored if the private key is not
844 encrypted and no password is needed.
845
846 If the *password* argument is not specified and a password is required,
847 OpenSSL's built-in password prompting mechanism will be used to
848 interactively prompt the user for a password.
849
Antoine Pitrou152efa22010-05-16 18:19:27 +0000850 An :class:`SSLError` is raised if the private key doesn't
851 match with the certificate.
852
Antoine Pitrou4fd1e6a2011-08-25 14:39:44 +0200853 .. versionchanged:: 3.3
854 New optional argument *password*.
855
Antoine Pitrou152efa22010-05-16 18:19:27 +0000856.. method:: SSLContext.load_verify_locations(cafile=None, capath=None)
857
858 Load a set of "certification authority" (CA) certificates used to validate
859 other peers' certificates when :data:`verify_mode` is other than
860 :data:`CERT_NONE`. At least one of *cafile* or *capath* must be specified.
861
Christian Heimes3e738f92013-06-09 18:07:16 +0200862 The *cafile* string, if present, is the path to a file of concatenated
Antoine Pitrou152efa22010-05-16 18:19:27 +0000863 CA certificates in PEM format. See the discussion of
864 :ref:`ssl-certificates` for more information about how to arrange the
865 certificates in this file.
866
867 The *capath* string, if present, is
868 the path to a directory containing several CA certificates in PEM format,
869 following an `OpenSSL specific layout
870 <http://www.openssl.org/docs/ssl/SSL_CTX_load_verify_locations.html>`_.
871
Christian Heimes9a5395a2013-06-17 15:44:12 +0200872.. method:: SSLContext.get_ca_certs(binary_form=False)
873
874 Get a list of loaded "certification authority" (CA) certificates. If the
875 ``binary_form`` parameter is :const:`False` each list
876 entry is a dict like the output of :meth:`SSLSocket.getpeercert`. Otherwise
877 the method returns a list of DER-encoded certificates. The returned list
878 does not contain certificates from *capath* unless a certificate was
879 requested and loaded by a SSL connection.
880
Larry Hastingsd36fc432013-08-03 02:49:53 -0700881 .. versionadded:: 3.4
Christian Heimes9a5395a2013-06-17 15:44:12 +0200882
Antoine Pitrou664c2d12010-11-17 20:29:42 +0000883.. method:: SSLContext.set_default_verify_paths()
884
885 Load a set of default "certification authority" (CA) certificates from
886 a filesystem path defined when building the OpenSSL library. Unfortunately,
887 there's no easy way to know whether this method succeeds: no error is
888 returned if no certificates are to be found. When the OpenSSL library is
889 provided as part of the operating system, though, it is likely to be
890 configured properly.
891
Antoine Pitrou152efa22010-05-16 18:19:27 +0000892.. method:: SSLContext.set_ciphers(ciphers)
893
894 Set the available ciphers for sockets created with this context.
895 It should be a string in the `OpenSSL cipher list format
896 <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`_.
897 If no cipher can be selected (because compile-time options or other
898 configuration forbids use of all the specified ciphers), an
899 :class:`SSLError` will be raised.
900
901 .. note::
902 when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will
903 give the currently selected cipher.
904
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100905.. method:: SSLContext.set_npn_protocols(protocols)
906
R David Murrayc7f75792013-06-26 15:11:12 -0400907 Specify which protocols the socket should advertise during the SSL/TLS
Antoine Pitroud5d17eb2012-03-22 00:23:03 +0100908 handshake. It should be a list of strings, like ``['http/1.1', 'spdy/2']``,
909 ordered by preference. The selection of a protocol will happen during the
910 handshake, and will play out according to the `NPN draft specification
911 <http://tools.ietf.org/html/draft-agl-tls-nextprotoneg>`_. After a
912 successful handshake, the :meth:`SSLSocket.selected_npn_protocol` method will
913 return the agreed-upon protocol.
914
915 This method will raise :exc:`NotImplementedError` if :data:`HAS_NPN` is
916 False.
917
918 .. versionadded:: 3.3
919
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100920.. method:: SSLContext.set_servername_callback(server_name_callback)
921
922 Register a callback function that will be called after the TLS Client Hello
923 handshake message has been received by the SSL/TLS server when the TLS client
924 specifies a server name indication. The server name indication mechanism
925 is specified in :rfc:`6066` section 3 - Server Name Indication.
926
927 Only one callback can be set per ``SSLContext``. If *server_name_callback*
928 is ``None`` then the callback is disabled. Calling this function a
929 subsequent time will disable the previously registered callback.
930
931 The callback function, *server_name_callback*, will be called with three
932 arguments; the first being the :class:`ssl.SSLSocket`, the second is a string
933 that represents the server name that the client is intending to communicate
Antoine Pitrou50b24d02013-04-11 20:48:42 +0200934 (or :const:`None` if the TLS Client Hello does not contain a server name)
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100935 and the third argument is the original :class:`SSLContext`. The server name
936 argument is the IDNA decoded server name.
937
938 A typical use of this callback is to change the :class:`ssl.SSLSocket`'s
939 :attr:`SSLSocket.context` attribute to a new object of type
940 :class:`SSLContext` representing a certificate chain that matches the server
941 name.
942
943 Due to the early negotiation phase of the TLS connection, only limited
944 methods and attributes are usable like
945 :meth:`SSLSocket.selected_npn_protocol` and :attr:`SSLSocket.context`.
946 :meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.getpeercert`,
947 :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compress` methods require that
948 the TLS connection has progressed beyond the TLS Client Hello and therefore
949 will not contain return meaningful values nor can they be called safely.
950
951 The *server_name_callback* function must return ``None`` to allow the
Terry Jan Reedy8e7586b2013-03-11 18:38:13 -0400952 TLS negotiation to continue. If a TLS failure is required, a constant
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +0100953 :const:`ALERT_DESCRIPTION_* <ALERT_DESCRIPTION_INTERNAL_ERROR>` can be
954 returned. Other return values will result in a TLS fatal error with
955 :const:`ALERT_DESCRIPTION_INTERNAL_ERROR`.
956
957 If there is a IDNA decoding error on the server name, the TLS connection
958 will terminate with an :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` fatal TLS
959 alert message to the client.
960
961 If an exception is raised from the *server_name_callback* function the TLS
962 connection will terminate with a fatal TLS alert message
963 :const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`.
964
965 This method will raise :exc:`NotImplementedError` if the OpenSSL library
966 had OPENSSL_NO_TLSEXT defined when it was built.
967
968 .. versionadded:: 3.4
969
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100970.. method:: SSLContext.load_dh_params(dhfile)
971
972 Load the key generation parameters for Diffie-Helman (DH) key exchange.
973 Using DH key exchange improves forward secrecy at the expense of
974 computational resources (both on the server and on the client).
975 The *dhfile* parameter should be the path to a file containing DH
976 parameters in PEM format.
977
978 This setting doesn't apply to client sockets. You can also use the
979 :data:`OP_SINGLE_DH_USE` option to further improve security.
980
981 .. versionadded:: 3.3
982
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100983.. method:: SSLContext.set_ecdh_curve(curve_name)
984
Antoine Pitrou0e576f12011-12-22 10:03:38 +0100985 Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH) key
986 exchange. ECDH is significantly faster than regular DH while arguably
987 as secure. The *curve_name* parameter should be a string describing
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100988 a well-known elliptic curve, for example ``prime256v1`` for a widely
989 supported curve.
990
991 This setting doesn't apply to client sockets. You can also use the
992 :data:`OP_SINGLE_ECDH_USE` option to further improve security.
993
Antoine Pitrou501da612011-12-21 09:27:41 +0100994 This method is not available if :data:`HAS_ECDH` is False.
995
Antoine Pitrou923df6f2011-12-19 17:16:51 +0100996 .. versionadded:: 3.3
997
998 .. seealso::
999 `SSL/TLS & Perfect Forward Secrecy <http://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy.html>`_
1000 Vincent Bernat.
1001
Antoine Pitroud5323212010-10-22 18:19:07 +00001002.. method:: SSLContext.wrap_socket(sock, server_side=False, \
1003 do_handshake_on_connect=True, suppress_ragged_eofs=True, \
1004 server_hostname=None)
Antoine Pitrou152efa22010-05-16 18:19:27 +00001005
1006 Wrap an existing Python socket *sock* and return an :class:`SSLSocket`
1007 object. The SSL socket is tied to the context, its settings and
1008 certificates. The parameters *server_side*, *do_handshake_on_connect*
1009 and *suppress_ragged_eofs* have the same meaning as in the top-level
1010 :func:`wrap_socket` function.
1011
Antoine Pitroud5323212010-10-22 18:19:07 +00001012 On client connections, the optional parameter *server_hostname* specifies
1013 the hostname of the service which we are connecting to. This allows a
1014 single server to host multiple SSL-based services with distinct certificates,
1015 quite similarly to HTTP virtual hosts. Specifying *server_hostname*
1016 will raise a :exc:`ValueError` if the OpenSSL library doesn't have support
1017 for it (that is, if :data:`HAS_SNI` is :const:`False`). Specifying
1018 *server_hostname* will also raise a :exc:`ValueError` if *server_side*
1019 is true.
1020
Antoine Pitroub0182c82010-10-12 20:09:02 +00001021.. method:: SSLContext.session_stats()
1022
1023 Get statistics about the SSL sessions created or managed by this context.
1024 A dictionary is returned which maps the names of each `piece of information
1025 <http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html>`_ to their
1026 numeric values. For example, here is the total number of hits and misses
1027 in the session cache since the context was created::
1028
1029 >>> stats = context.session_stats()
1030 >>> stats['hits'], stats['misses']
1031 (0, 0)
1032
Antoine Pitroub5218772010-05-21 09:56:06 +00001033.. attribute:: SSLContext.options
1034
1035 An integer representing the set of SSL options enabled on this context.
1036 The default value is :data:`OP_ALL`, but you can specify other options
1037 such as :data:`OP_NO_SSLv2` by ORing them together.
1038
1039 .. note::
1040 With versions of OpenSSL older than 0.9.8m, it is only possible
1041 to set options, not to clear them. Attempting to clear an option
1042 (by resetting the corresponding bits) will raise a ``ValueError``.
1043
Antoine Pitrou152efa22010-05-16 18:19:27 +00001044.. attribute:: SSLContext.protocol
1045
1046 The protocol version chosen when constructing the context. This attribute
1047 is read-only.
1048
1049.. attribute:: SSLContext.verify_mode
1050
1051 Whether to try to verify other peers' certificates and how to behave
1052 if verification fails. This attribute must be one of
1053 :data:`CERT_NONE`, :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`.
1054
1055
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001056.. index:: single: certificates
1057
1058.. index:: single: X509 certificate
1059
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001060.. _ssl-certificates:
1061
Thomas Woutersed03b412007-08-28 21:37:11 +00001062Certificates
1063------------
1064
Georg Brandl7f01a132009-09-16 15:58:14 +00001065Certificates in general are part of a public-key / private-key system. In this
1066system, each *principal*, (which may be a machine, or a person, or an
1067organization) is assigned a unique two-part encryption key. One part of the key
1068is public, and is called the *public key*; the other part is kept secret, and is
1069called the *private key*. The two parts are related, in that if you encrypt a
1070message with one of the parts, you can decrypt it with the other part, and
1071**only** with the other part.
Thomas Woutersed03b412007-08-28 21:37:11 +00001072
Georg Brandl7f01a132009-09-16 15:58:14 +00001073A certificate contains information about two principals. It contains the name
1074of a *subject*, and the subject's public key. It also contains a statement by a
1075second principal, the *issuer*, that the subject is who he claims to be, and
1076that this is indeed the subject's public key. The issuer's statement is signed
1077with the issuer's private key, which only the issuer knows. However, anyone can
1078verify the issuer's statement by finding the issuer's public key, decrypting the
1079statement with it, and comparing it to the other information in the certificate.
1080The certificate also contains information about the time period over which it is
1081valid. This is expressed as two fields, called "notBefore" and "notAfter".
Thomas Woutersed03b412007-08-28 21:37:11 +00001082
Georg Brandl7f01a132009-09-16 15:58:14 +00001083In the Python use of certificates, a client or server can use a certificate to
1084prove who they are. The other side of a network connection can also be required
1085to produce a certificate, and that certificate can be validated to the
1086satisfaction of the client or server that requires such validation. The
1087connection attempt can be set to raise an exception if the validation fails.
1088Validation is done automatically, by the underlying OpenSSL framework; the
1089application need not concern itself with its mechanics. But the application
1090does usually need to provide sets of certificates to allow this process to take
1091place.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001092
Georg Brandl7f01a132009-09-16 15:58:14 +00001093Python uses files to contain certificates. They should be formatted as "PEM"
1094(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
1095and a footer line::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001096
1097 -----BEGIN CERTIFICATE-----
1098 ... (certificate in base64 PEM encoding) ...
1099 -----END CERTIFICATE-----
1100
Antoine Pitrou152efa22010-05-16 18:19:27 +00001101Certificate chains
1102^^^^^^^^^^^^^^^^^^
1103
Georg Brandl7f01a132009-09-16 15:58:14 +00001104The Python files which contain certificates can contain a sequence of
1105certificates, sometimes called a *certificate chain*. This chain should start
1106with the specific certificate for the principal who "is" the client or server,
1107and then the certificate for the issuer of that certificate, and then the
1108certificate for the issuer of *that* certificate, and so on up the chain till
1109you get to a certificate which is *self-signed*, that is, a certificate which
1110has the same subject and issuer, sometimes called a *root certificate*. The
1111certificates should just be concatenated together in the certificate file. For
1112example, suppose we had a three certificate chain, from our server certificate
1113to the certificate of the certification authority that signed our server
1114certificate, to the root certificate of the agency which issued the
1115certification authority's certificate::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001116
1117 -----BEGIN CERTIFICATE-----
1118 ... (certificate for your server)...
1119 -----END CERTIFICATE-----
1120 -----BEGIN CERTIFICATE-----
1121 ... (the certificate for the CA)...
1122 -----END CERTIFICATE-----
1123 -----BEGIN CERTIFICATE-----
1124 ... (the root certificate for the CA's issuer)...
1125 -----END CERTIFICATE-----
1126
Antoine Pitrou152efa22010-05-16 18:19:27 +00001127CA certificates
1128^^^^^^^^^^^^^^^
1129
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001130If you are going to require validation of the other side of the connection's
1131certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandl7f01a132009-09-16 15:58:14 +00001132chains for each issuer you are willing to trust. Again, this file just contains
1133these chains concatenated together. For validation, Python will use the first
1134chain it finds in the file which matches. Some "standard" root certificates are
1135available from various certification authorities: `CACert.org
1136<http://www.cacert.org/index.php?id=3>`_, `Thawte
1137<http://www.thawte.com/roots/>`_, `Verisign
1138<http://www.verisign.com/support/roots.html>`_, `Positive SSL
1139<http://www.PositiveSSL.com/ssl-certificate-support/cert_installation/UTN-USERFirst-Hardware.crt>`_
1140(used by python.org), `Equifax and GeoTrust
1141<http://www.geotrust.com/resources/root_certificates/index.asp>`_.
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001142
Georg Brandl7f01a132009-09-16 15:58:14 +00001143In general, if you are using SSL3 or TLS1, you don't need to put the full chain
1144in your "CA certs" file; you only need the root certificates, and the remote
1145peer is supposed to furnish the other certificates necessary to chain from its
1146certificate to a root certificate. See :rfc:`4158` for more discussion of the
1147way in which certification chains can be built.
Thomas Woutersed03b412007-08-28 21:37:11 +00001148
Antoine Pitrou152efa22010-05-16 18:19:27 +00001149Combined key and certificate
1150^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1151
1152Often the private key is stored in the same file as the certificate; in this
1153case, only the ``certfile`` parameter to :meth:`SSLContext.load_cert_chain`
1154and :func:`wrap_socket` needs to be passed. If the private key is stored
1155with the certificate, it should come before the first certificate in
1156the certificate chain::
1157
1158 -----BEGIN RSA PRIVATE KEY-----
1159 ... (private key in base64 encoding) ...
1160 -----END RSA PRIVATE KEY-----
1161 -----BEGIN CERTIFICATE-----
1162 ... (certificate in base64 PEM encoding) ...
1163 -----END CERTIFICATE-----
1164
1165Self-signed certificates
1166^^^^^^^^^^^^^^^^^^^^^^^^
1167
Georg Brandl7f01a132009-09-16 15:58:14 +00001168If you are going to create a server that provides SSL-encrypted connection
1169services, you will need to acquire a certificate for that service. There are
1170many ways of acquiring appropriate certificates, such as buying one from a
1171certification authority. Another common practice is to generate a self-signed
1172certificate. The simplest way to do this is with the OpenSSL package, using
1173something like the following::
Thomas Woutersed03b412007-08-28 21:37:11 +00001174
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001175 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
1176 Generating a 1024 bit RSA private key
1177 .......++++++
1178 .............................++++++
1179 writing new private key to 'cert.pem'
1180 -----
1181 You are about to be asked to enter information that will be incorporated
1182 into your certificate request.
1183 What you are about to enter is what is called a Distinguished Name or a DN.
1184 There are quite a few fields but you can leave some blank
1185 For some fields there will be a default value,
1186 If you enter '.', the field will be left blank.
1187 -----
1188 Country Name (2 letter code) [AU]:US
1189 State or Province Name (full name) [Some-State]:MyState
1190 Locality Name (eg, city) []:Some City
1191 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
1192 Organizational Unit Name (eg, section) []:My Group
1193 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
1194 Email Address []:ops@myserver.mygroup.myorganization.com
1195 %
Thomas Woutersed03b412007-08-28 21:37:11 +00001196
Georg Brandl7f01a132009-09-16 15:58:14 +00001197The disadvantage of a self-signed certificate is that it is its own root
1198certificate, and no one else will have it in their cache of known (and trusted)
1199root certificates.
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001200
1201
Thomas Woutersed03b412007-08-28 21:37:11 +00001202Examples
1203--------
1204
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001205Testing for SSL support
1206^^^^^^^^^^^^^^^^^^^^^^^
1207
Georg Brandl7f01a132009-09-16 15:58:14 +00001208To test for the presence of SSL support in a Python installation, user code
1209should use the following idiom::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001210
1211 try:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001212 import ssl
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001213 except ImportError:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001214 pass
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001215 else:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001216 ... # do something that requires SSL support
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001217
1218Client-side operation
1219^^^^^^^^^^^^^^^^^^^^^
1220
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001221This example connects to an SSL server and prints the server's certificate::
Thomas Woutersed03b412007-08-28 21:37:11 +00001222
1223 import socket, ssl, pprint
1224
1225 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001226 # require a certificate from the server
1227 ssl_sock = ssl.wrap_socket(s,
1228 ca_certs="/etc/ca_certs_file",
1229 cert_reqs=ssl.CERT_REQUIRED)
Thomas Woutersed03b412007-08-28 21:37:11 +00001230 ssl_sock.connect(('www.verisign.com', 443))
1231
Georg Brandl6911e3c2007-09-04 07:15:32 +00001232 pprint.pprint(ssl_sock.getpeercert())
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001233 # note that closing the SSLSocket will also close the underlying socket
Thomas Woutersed03b412007-08-28 21:37:11 +00001234 ssl_sock.close()
1235
Antoine Pitrou441ae042012-01-06 20:06:15 +01001236As of January 6, 2012, the certificate printed by this program looks like
Georg Brandl7f01a132009-09-16 15:58:14 +00001237this::
Thomas Woutersed03b412007-08-28 21:37:11 +00001238
Antoine Pitrou441ae042012-01-06 20:06:15 +01001239 {'issuer': ((('countryName', 'US'),),
1240 (('organizationName', 'VeriSign, Inc.'),),
1241 (('organizationalUnitName', 'VeriSign Trust Network'),),
1242 (('organizationalUnitName',
1243 'Terms of use at https://www.verisign.com/rpa (c)06'),),
1244 (('commonName',
1245 'VeriSign Class 3 Extended Validation SSL SGC CA'),)),
1246 'notAfter': 'May 25 23:59:59 2012 GMT',
1247 'notBefore': 'May 26 00:00:00 2010 GMT',
1248 'serialNumber': '53D2BEF924A7245E83CA01E46CAA2477',
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001249 'subject': ((('1.3.6.1.4.1.311.60.2.1.3', 'US'),),
1250 (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),),
1251 (('businessCategory', 'V1.0, Clause 5.(b)'),),
1252 (('serialNumber', '2497886'),),
1253 (('countryName', 'US'),),
1254 (('postalCode', '94043'),),
1255 (('stateOrProvinceName', 'California'),),
1256 (('localityName', 'Mountain View'),),
1257 (('streetAddress', '487 East Middlefield Road'),),
1258 (('organizationName', 'VeriSign, Inc.'),),
1259 (('organizationalUnitName', ' Production Security Services'),),
Antoine Pitrou441ae042012-01-06 20:06:15 +01001260 (('commonName', 'www.verisign.com'),)),
1261 'subjectAltName': (('DNS', 'www.verisign.com'),
1262 ('DNS', 'verisign.com'),
1263 ('DNS', 'www.verisign.net'),
1264 ('DNS', 'verisign.net'),
1265 ('DNS', 'www.verisign.mobi'),
1266 ('DNS', 'verisign.mobi'),
1267 ('DNS', 'www.verisign.eu'),
1268 ('DNS', 'verisign.eu')),
1269 'version': 3}
Thomas Woutersed03b412007-08-28 21:37:11 +00001270
Antoine Pitrou152efa22010-05-16 18:19:27 +00001271This other example first creates an SSL context, instructs it to verify
1272certificates sent by peers, and feeds it a set of recognized certificate
1273authorities (CA)::
1274
1275 >>> context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001276 >>> context.verify_mode = ssl.CERT_REQUIRED
Antoine Pitrou152efa22010-05-16 18:19:27 +00001277 >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")
1278
1279(it is assumed your operating system places a bundle of all CA certificates
1280in ``/etc/ssl/certs/ca-bundle.crt``; if not, you'll get an error and have
1281to adjust the location)
1282
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001283When you use the context to connect to a server, :const:`CERT_REQUIRED`
Antoine Pitrou152efa22010-05-16 18:19:27 +00001284validates the server certificate: it ensures that the server certificate
1285was signed with one of the CA certificates, and checks the signature for
1286correctness::
1287
1288 >>> conn = context.wrap_socket(socket.socket(socket.AF_INET))
1289 >>> conn.connect(("linuxfr.org", 443))
1290
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001291You should then fetch the certificate and check its fields for conformity::
Antoine Pitrou152efa22010-05-16 18:19:27 +00001292
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001293 >>> cert = conn.getpeercert()
1294 >>> ssl.match_hostname(cert, "linuxfr.org")
1295
1296Visual inspection shows that the certificate does identify the desired service
1297(that is, the HTTPS host ``linuxfr.org``)::
1298
1299 >>> pprint.pprint(cert)
Antoine Pitrou441ae042012-01-06 20:06:15 +01001300 {'issuer': ((('organizationName', 'CAcert Inc.'),),
1301 (('organizationalUnitName', 'http://www.CAcert.org'),),
1302 (('commonName', 'CAcert Class 3 Root'),)),
1303 'notAfter': 'Jun 7 21:02:24 2013 GMT',
1304 'notBefore': 'Jun 8 21:02:24 2011 GMT',
1305 'serialNumber': 'D3E9',
Antoine Pitrou152efa22010-05-16 18:19:27 +00001306 'subject': ((('commonName', 'linuxfr.org'),),),
Antoine Pitrou441ae042012-01-06 20:06:15 +01001307 'subjectAltName': (('DNS', 'linuxfr.org'),
1308 ('othername', '<unsupported>'),
1309 ('DNS', 'linuxfr.org'),
1310 ('othername', '<unsupported>'),
1311 ('DNS', 'dev.linuxfr.org'),
1312 ('othername', '<unsupported>'),
1313 ('DNS', 'prod.linuxfr.org'),
1314 ('othername', '<unsupported>'),
1315 ('DNS', 'alpha.linuxfr.org'),
1316 ('othername', '<unsupported>'),
1317 ('DNS', '*.linuxfr.org'),
1318 ('othername', '<unsupported>')),
1319 'version': 3}
Antoine Pitrou152efa22010-05-16 18:19:27 +00001320
1321Now that you are assured of its authenticity, you can proceed to talk with
1322the server::
1323
Antoine Pitroudab64262010-09-19 13:31:06 +00001324 >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n")
1325 >>> pprint.pprint(conn.recv(1024).split(b"\r\n"))
Antoine Pitrou152efa22010-05-16 18:19:27 +00001326 [b'HTTP/1.1 302 Found',
1327 b'Date: Sun, 16 May 2010 13:43:28 GMT',
1328 b'Server: Apache/2.2',
1329 b'Location: https://linuxfr.org/pub/',
1330 b'Vary: Accept-Encoding',
1331 b'Connection: close',
1332 b'Content-Type: text/html; charset=iso-8859-1',
1333 b'',
1334 b'']
1335
Antoine Pitrou152efa22010-05-16 18:19:27 +00001336See the discussion of :ref:`ssl-security` below.
1337
1338
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001339Server-side operation
1340^^^^^^^^^^^^^^^^^^^^^
1341
Antoine Pitrou152efa22010-05-16 18:19:27 +00001342For server operation, typically you'll need to have a server certificate, and
1343private key, each in a file. You'll first create a context holding the key
1344and the certificate, so that clients can check your authenticity. Then
1345you'll open a socket, bind it to a port, call :meth:`listen` on it, and start
1346waiting for clients to connect::
Thomas Woutersed03b412007-08-28 21:37:11 +00001347
1348 import socket, ssl
1349
Antoine Pitrou152efa22010-05-16 18:19:27 +00001350 context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
1351 context.load_cert_chain(certfile="mycertfile", keyfile="mykeyfile")
1352
Thomas Woutersed03b412007-08-28 21:37:11 +00001353 bindsocket = socket.socket()
1354 bindsocket.bind(('myaddr.mydomain.com', 10023))
1355 bindsocket.listen(5)
1356
Antoine Pitrou152efa22010-05-16 18:19:27 +00001357When a client connects, you'll call :meth:`accept` on the socket to get the
1358new socket from the other end, and use the context's :meth:`SSLContext.wrap_socket`
1359method to create a server-side SSL socket for the connection::
Thomas Woutersed03b412007-08-28 21:37:11 +00001360
1361 while True:
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001362 newsocket, fromaddr = bindsocket.accept()
1363 connstream = context.wrap_socket(newsocket, server_side=True)
1364 try:
1365 deal_with_client(connstream)
1366 finally:
Antoine Pitroub205d582011-01-02 22:09:27 +00001367 connstream.shutdown(socket.SHUT_RDWR)
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001368 connstream.close()
Thomas Woutersed03b412007-08-28 21:37:11 +00001369
Antoine Pitrou152efa22010-05-16 18:19:27 +00001370Then you'll read data from the ``connstream`` and do something with it till you
Georg Brandl7f01a132009-09-16 15:58:14 +00001371are finished with the client (or the client is finished with you)::
Thomas Woutersed03b412007-08-28 21:37:11 +00001372
1373 def deal_with_client(connstream):
Georg Brandl8a7e5da2011-01-02 19:07:51 +00001374 data = connstream.recv(1024)
1375 # empty data means the client is finished with us
1376 while data:
1377 if not do_something(connstream, data):
1378 # we'll assume do_something returns False
1379 # when we're finished with client
1380 break
1381 data = connstream.recv(1024)
1382 # finished with client
Thomas Woutersed03b412007-08-28 21:37:11 +00001383
Antoine Pitrou152efa22010-05-16 18:19:27 +00001384And go back to listening for new client connections (of course, a real server
1385would probably handle each client connection in a separate thread, or put
1386the sockets in non-blocking mode and use an event loop).
1387
1388
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001389.. _ssl-nonblocking:
1390
1391Notes on non-blocking sockets
1392-----------------------------
1393
1394When working with non-blocking sockets, there are several things you need
1395to be aware of:
1396
1397- Calling :func:`~select.select` tells you that the OS-level socket can be
1398 read from (or written to), but it does not imply that there is sufficient
1399 data at the upper SSL layer. For example, only part of an SSL frame might
1400 have arrived. Therefore, you must be ready to handle :meth:`SSLSocket.recv`
1401 and :meth:`SSLSocket.send` failures, and retry after another call to
1402 :func:`~select.select`.
1403
1404 (of course, similar provisions apply when using other primitives such as
1405 :func:`~select.poll`)
1406
1407- The SSL handshake itself will be non-blocking: the
1408 :meth:`SSLSocket.do_handshake` method has to be retried until it returns
1409 successfully. Here is a synopsis using :func:`~select.select` to wait for
1410 the socket's readiness::
1411
1412 while True:
1413 try:
1414 sock.do_handshake()
1415 break
Antoine Pitrou873bf262011-10-27 23:59:03 +02001416 except ssl.SSLWantReadError:
1417 select.select([sock], [], [])
1418 except ssl.SSLWantWriteError:
1419 select.select([], [sock], [])
Antoine Pitrou6f5dcb12011-07-11 01:35:48 +02001420
1421
Antoine Pitrou152efa22010-05-16 18:19:27 +00001422.. _ssl-security:
1423
1424Security considerations
1425-----------------------
1426
1427Verifying certificates
1428^^^^^^^^^^^^^^^^^^^^^^
1429
1430:const:`CERT_NONE` is the default. Since it does not authenticate the other
1431peer, it can be insecure, especially in client mode where most of time you
1432would like to ensure the authenticity of the server you're talking to.
1433Therefore, when in client mode, it is highly recommended to use
1434:const:`CERT_REQUIRED`. However, it is in itself not sufficient; you also
Antoine Pitrou59fdd672010-10-08 10:37:08 +00001435have to check that the server certificate, which can be obtained by calling
1436:meth:`SSLSocket.getpeercert`, matches the desired service. For many
1437protocols and applications, the service can be identified by the hostname;
1438in this case, the :func:`match_hostname` function can be used.
Antoine Pitrou152efa22010-05-16 18:19:27 +00001439
1440In server mode, if you want to authenticate your clients using the SSL layer
1441(rather than using a higher-level authentication mechanism), you'll also have
1442to specify :const:`CERT_REQUIRED` and similarly check the client certificate.
1443
1444 .. note::
1445
1446 In client mode, :const:`CERT_OPTIONAL` and :const:`CERT_REQUIRED` are
1447 equivalent unless anonymous ciphers are enabled (they are disabled
1448 by default).
Thomas Woutersed03b412007-08-28 21:37:11 +00001449
Antoine Pitroub5218772010-05-21 09:56:06 +00001450Protocol versions
1451^^^^^^^^^^^^^^^^^
1452
1453SSL version 2 is considered insecure and is therefore dangerous to use. If
1454you want maximum compatibility between clients and servers, it is recommended
1455to use :const:`PROTOCOL_SSLv23` as the protocol version and then disable
1456SSLv2 explicitly using the :data:`SSLContext.options` attribute::
1457
1458 context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
1459 context.options |= ssl.OP_NO_SSLv2
1460
1461The SSL context created above will allow SSLv3 and TLSv1 connections, but
1462not SSLv2.
1463
Antoine Pitroub7ffed82012-01-04 02:53:44 +01001464Cipher selection
1465^^^^^^^^^^^^^^^^
1466
1467If you have advanced security requirements, fine-tuning of the ciphers
1468enabled when negotiating a SSL session is possible through the
1469:meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the
1470ssl module disables certain weak ciphers by default, but you may want
1471to further restrict the cipher choice. For example::
1472
1473 context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
1474 context.set_ciphers('HIGH:!aNULL:!eNULL')
1475
1476The ``!aNULL:!eNULL`` part of the cipher spec is necessary to disable ciphers
1477which don't provide both encryption and authentication. Be sure to read
1478OpenSSL's documentation about the `cipher list
1479format <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`_.
1480If you want to check which ciphers are enabled by a given cipher list,
1481use the ``openssl ciphers`` command on your system.
1482
Georg Brandl48310cd2009-01-03 21:18:54 +00001483
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001484.. seealso::
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001485
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001486 Class :class:`socket.socket`
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02001487 Documentation of underlying :mod:`socket` class
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001488
Georg Brandl4a6cf6c2013-10-06 18:20:31 +02001489 `SSL/TLS Strong Encryption: An Introduction <http://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_
1490 Intro from the Apache webserver documentation
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001491
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001492 `RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management <http://www.ietf.org/rfc/rfc1422>`_
1493 Steve Kent
Thomas Wouters47b49bf2007-08-30 22:15:33 +00001494
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001495 `RFC 1750: Randomness Recommendations for Security <http://www.ietf.org/rfc/rfc1750>`_
1496 D. Eastlake et. al.
Thomas Wouters89d996e2007-09-08 17:39:28 +00001497
Thomas Wouters1b7f8912007-09-19 03:06:30 +00001498 `RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile <http://www.ietf.org/rfc/rfc3280>`_
1499 Housley et. al.
Antoine Pitroud5323212010-10-22 18:19:07 +00001500
1501 `RFC 4366: Transport Layer Security (TLS) Extensions <http://www.ietf.org/rfc/rfc4366>`_
1502 Blake-Wilson et. al.
Antoine Pitrou58ddc9d2013-01-05 21:20:29 +01001503
1504 `RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 <http://www.ietf.org/rfc/rfc5246>`_
1505 T. Dierks et. al.
1506
1507 `RFC 6066: Transport Layer Security (TLS) Extensions <http://www.ietf.org/rfc/rfc6066>`_
1508 D. Eastlake
1509
1510 `IANA TLS: Transport Layer Security (TLS) Parameters <http://www.iana.org/assignments/tls-parameters/tls-parameters.xml>`_
1511 IANA