blob: 32592e55cb7424e41b490a128a0db79f55fa2226 [file] [log] [blame]
Antoine Pitrou9e7d6e52011-01-02 22:39:10 +00001:mod:`ssl` --- TLS/SSL wrapper for socket objects
2=================================================
Guido van Rossum8ee23bb2007-08-27 19:11:11 +00003
4.. module:: ssl
Antoine Pitrou9e7d6e52011-01-02 22:39:10 +00005 :synopsis: TLS/SSL wrapper for socket objects
Bill Janssen426ea0a2007-08-29 22:35:05 +00006
7.. moduleauthor:: Bill Janssen <bill.janssen@gmail.com>
Bill Janssen426ea0a2007-08-29 22:35:05 +00008.. sectionauthor:: Bill Janssen <bill.janssen@gmail.com>
9
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000010
Bill Janssen98d19da2007-09-10 21:51:02 +000011.. index:: single: OpenSSL; (use in module ssl)
12
13.. index:: TLS, SSL, Transport Layer Security, Secure Sockets Layer
14
Éric Araujo29a0b572011-08-19 02:14:03 +020015.. versionadded:: 2.6
16
17**Source code:** :source:`Lib/ssl.py`
18
19--------------
20
Georg Brandla50d20a2009-09-16 15:57:46 +000021This module provides access to Transport Layer Security (often known as "Secure
22Sockets Layer") encryption and peer authentication facilities for network
23sockets, both client-side and server-side. This module uses the OpenSSL
24library. It is available on all modern Unix systems, Windows, Mac OS X, and
25probably additional platforms, as long as OpenSSL is installed on that platform.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000026
27.. note::
28
Georg Brandla50d20a2009-09-16 15:57:46 +000029 Some behavior may be platform dependent, since calls are made to the
30 operating system socket APIs. The installed version of OpenSSL may also
31 cause variations in behavior.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000032
Christian Heimes88b22202013-10-29 21:08:56 +010033.. warning::
34
35 OpenSSL's internal random number generator does not properly handle fork.
36 Applications must change the PRNG state of the parent process if they use
37 any SSL feature with with :func:`os.fork`. Any successful call of
38 :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or
39 :func:`~ssl.RAND_pseudo_bytes` is sufficient.
40
Georg Brandla50d20a2009-09-16 15:57:46 +000041This section documents the objects and functions in the ``ssl`` module; for more
42general information about TLS, SSL, and certificates, the reader is referred to
43the documents in the "See Also" section at the bottom.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000044
Georg Brandla50d20a2009-09-16 15:57:46 +000045This module provides a class, :class:`ssl.SSLSocket`, which is derived from the
46:class:`socket.socket` type, and provides a socket-like wrapper that also
47encrypts and decrypts the data going over the socket with SSL. It supports
48additional :meth:`read` and :meth:`write` methods, along with a method,
49:meth:`getpeercert`, to retrieve the certificate of the other side of the
50connection, and a method, :meth:`cipher`, to retrieve the cipher being used for
51the secure connection.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000052
Bill Janssen93bf9ce2007-09-11 02:42:07 +000053Functions, Constants, and Exceptions
54------------------------------------
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000055
Bill Janssen93bf9ce2007-09-11 02:42:07 +000056.. exception:: SSLError
57
Georg Brandlc62ef8b2009-01-03 20:55:06 +000058 Raised to signal an error from the underlying SSL implementation. This
Georg Brandla50d20a2009-09-16 15:57:46 +000059 signifies some problem in the higher-level encryption and authentication
60 layer that's superimposed on the underlying network connection. This error
61 is a subtype of :exc:`socket.error`, which in turn is a subtype of
62 :exc:`IOError`.
Bill Janssen93bf9ce2007-09-11 02:42:07 +000063
Antoine Pitrou0a6373c2010-04-17 17:10:38 +000064.. 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)
Bill Janssen98d19da2007-09-10 21:51:02 +000065
Georg Brandla50d20a2009-09-16 15:57:46 +000066 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance
67 of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps
68 the underlying socket in an SSL context. For client-side sockets, the
69 context construction is lazy; if the underlying socket isn't connected yet,
70 the context construction will be performed after :meth:`connect` is called on
71 the socket. For server-side sockets, if the socket has no remote peer, it is
72 assumed to be a listening socket, and the server-side SSL wrapping is
73 automatically performed on client connections accepted via the :meth:`accept`
74 method. :func:`wrap_socket` may raise :exc:`SSLError`.
Bill Janssen98d19da2007-09-10 21:51:02 +000075
Georg Brandla50d20a2009-09-16 15:57:46 +000076 The ``keyfile`` and ``certfile`` parameters specify optional files which
77 contain a certificate to be used to identify the local side of the
78 connection. See the discussion of :ref:`ssl-certificates` for more
79 information on how the certificate is stored in the ``certfile``.
Bill Janssen98d19da2007-09-10 21:51:02 +000080
Georg Brandla50d20a2009-09-16 15:57:46 +000081 Often the private key is stored in the same file as the certificate; in this
82 case, only the ``certfile`` parameter need be passed. If the private key is
83 stored in a separate file, both parameters must be used. If the private key
84 is stored in the ``certfile``, it should come before the first certificate in
85 the certificate chain::
Bill Janssen98d19da2007-09-10 21:51:02 +000086
87 -----BEGIN RSA PRIVATE KEY-----
88 ... (private key in base64 encoding) ...
89 -----END RSA PRIVATE KEY-----
90 -----BEGIN CERTIFICATE-----
91 ... (certificate in base64 PEM encoding) ...
92 -----END CERTIFICATE-----
93
Georg Brandla50d20a2009-09-16 15:57:46 +000094 The parameter ``server_side`` is a boolean which identifies whether
95 server-side or client-side behavior is desired from this socket.
Bill Janssen98d19da2007-09-10 21:51:02 +000096
Georg Brandla50d20a2009-09-16 15:57:46 +000097 The parameter ``cert_reqs`` specifies whether a certificate is required from
98 the other side of the connection, and whether it will be validated if
99 provided. It must be one of the three values :const:`CERT_NONE`
100 (certificates ignored), :const:`CERT_OPTIONAL` (not required, but validated
101 if provided), or :const:`CERT_REQUIRED` (required and validated). If the
102 value of this parameter is not :const:`CERT_NONE`, then the ``ca_certs``
103 parameter must point to a file of CA certificates.
Bill Janssen98d19da2007-09-10 21:51:02 +0000104
Georg Brandla50d20a2009-09-16 15:57:46 +0000105 The ``ca_certs`` file contains a set of concatenated "certification
106 authority" certificates, which are used to validate certificates passed from
107 the other end of the connection. See the discussion of
108 :ref:`ssl-certificates` for more information about how to arrange the
109 certificates in this file.
Bill Janssen98d19da2007-09-10 21:51:02 +0000110
Georg Brandla50d20a2009-09-16 15:57:46 +0000111 The parameter ``ssl_version`` specifies which version of the SSL protocol to
112 use. Typically, the server chooses a particular protocol version, and the
113 client must adapt to the server's choice. Most of the versions are not
Antoine Pitrou4a7e0c892012-01-09 21:35:11 +0100114 interoperable with the other versions. If not specified, the default is
115 :data:`PROTOCOL_SSLv23`; it provides the most compatibility with other
Georg Brandla50d20a2009-09-16 15:57:46 +0000116 versions.
Bill Janssen98d19da2007-09-10 21:51:02 +0000117
Georg Brandla50d20a2009-09-16 15:57:46 +0000118 Here's a table showing which versions in a client (down the side) can connect
119 to which versions in a server (along the top):
Bill Janssen98d19da2007-09-10 21:51:02 +0000120
121 .. table::
122
123 ======================== ========= ========= ========== =========
124 *client* / **server** **SSLv2** **SSLv3** **SSLv23** **TLSv1**
Georg Brandl2b92f6b2007-12-06 01:52:24 +0000125 ------------------------ --------- --------- ---------- ---------
Antoine Pitrou0a6373c2010-04-17 17:10:38 +0000126 *SSLv2* yes no yes no
Antoine Pitroudf4c9862012-01-09 21:43:18 +0100127 *SSLv3* no yes yes no
Bill Janssen98d19da2007-09-10 21:51:02 +0000128 *SSLv23* yes no yes no
129 *TLSv1* no no yes yes
130 ======================== ========= ========= ========== =========
131
Antoine Pitrou0a6373c2010-04-17 17:10:38 +0000132 .. note::
133
Andrew M. Kuchling3ded4212010-04-30 00:52:31 +0000134 Which connections succeed will vary depending on the version of
135 OpenSSL. For instance, in some older versions of OpenSSL (such
136 as 0.9.7l on OS X 10.4), an SSLv2 client could not connect to an
137 SSLv23 server. Another example: beginning with OpenSSL 1.0.0,
138 an SSLv23 client will not actually attempt SSLv2 connections
139 unless you explicitly enable SSLv2 ciphers; for example, you
140 might specify ``"ALL"`` or ``"SSLv2"`` as the *ciphers* parameter
141 to enable them.
Antoine Pitrou0a6373c2010-04-17 17:10:38 +0000142
Andrew M. Kuchling3ded4212010-04-30 00:52:31 +0000143 The *ciphers* parameter sets the available ciphers for this SSL object.
Antoine Pitrou0a6373c2010-04-17 17:10:38 +0000144 It should be a string in the `OpenSSL cipher list format
145 <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`_.
Bill Janssen98d19da2007-09-10 21:51:02 +0000146
Bill Janssen934b16d2008-06-28 22:19:33 +0000147 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
148 handshake automatically after doing a :meth:`socket.connect`, or whether the
Georg Brandla50d20a2009-09-16 15:57:46 +0000149 application program will call it explicitly, by invoking the
150 :meth:`SSLSocket.do_handshake` method. Calling
151 :meth:`SSLSocket.do_handshake` explicitly gives the program control over the
152 blocking behavior of the socket I/O involved in the handshake.
Bill Janssen934b16d2008-06-28 22:19:33 +0000153
Georg Brandla50d20a2009-09-16 15:57:46 +0000154 The parameter ``suppress_ragged_eofs`` specifies how the
155 :meth:`SSLSocket.read` method should signal unexpected EOF from the other end
156 of the connection. If specified as :const:`True` (the default), it returns a
157 normal EOF in response to unexpected EOF errors raised from the underlying
158 socket; if :const:`False`, it will raise the exceptions back to the caller.
Bill Janssen934b16d2008-06-28 22:19:33 +0000159
Antoine Pitrou0a6373c2010-04-17 17:10:38 +0000160 .. versionchanged:: 2.7
161 New optional argument *ciphers*.
162
Bill Janssen98d19da2007-09-10 21:51:02 +0000163.. function:: RAND_status()
164
Georg Brandla50d20a2009-09-16 15:57:46 +0000165 Returns True if the SSL pseudo-random number generator has been seeded with
166 'enough' randomness, and False otherwise. You can use :func:`ssl.RAND_egd`
167 and :func:`ssl.RAND_add` to increase the randomness of the pseudo-random
168 number generator.
Bill Janssen98d19da2007-09-10 21:51:02 +0000169
170.. function:: RAND_egd(path)
171
172 If you are running an entropy-gathering daemon (EGD) somewhere, and ``path``
Georg Brandla50d20a2009-09-16 15:57:46 +0000173 is the pathname of a socket connection open to it, this will read 256 bytes
174 of randomness from the socket, and add it to the SSL pseudo-random number
175 generator to increase the security of generated secret keys. This is
176 typically only necessary on systems without better sources of randomness.
Bill Janssen98d19da2007-09-10 21:51:02 +0000177
Georg Brandla50d20a2009-09-16 15:57:46 +0000178 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources
179 of entropy-gathering daemons.
Bill Janssen98d19da2007-09-10 21:51:02 +0000180
181.. function:: RAND_add(bytes, entropy)
182
Georg Brandla50d20a2009-09-16 15:57:46 +0000183 Mixes the given ``bytes`` into the SSL pseudo-random number generator. The
184 parameter ``entropy`` (a float) is a lower bound on the entropy contained in
185 string (so you can always use :const:`0.0`). See :rfc:`1750` for more
186 information on sources of entropy.
Bill Janssen98d19da2007-09-10 21:51:02 +0000187
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000188.. function:: cert_time_to_seconds(timestring)
189
Georg Brandla50d20a2009-09-16 15:57:46 +0000190 Returns a floating-point value containing a normal seconds-after-the-epoch
191 time value, given the time-string representing the "notBefore" or "notAfter"
192 date from a certificate.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000193
194 Here's an example::
195
196 >>> import ssl
197 >>> ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT")
198 1178694000.0
199 >>> import time
200 >>> time.ctime(ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT"))
201 'Wed May 9 00:00:00 2007'
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000202 >>>
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000203
Bill Janssen296a59d2007-09-16 22:06:00 +0000204.. function:: get_server_certificate (addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None)
205
Georg Brandla50d20a2009-09-16 15:57:46 +0000206 Given the address ``addr`` of an SSL-protected server, as a (*hostname*,
207 *port-number*) pair, fetches the server's certificate, and returns it as a
208 PEM-encoded string. If ``ssl_version`` is specified, uses that version of
209 the SSL protocol to attempt to connect to the server. If ``ca_certs`` is
210 specified, it should be a file containing a list of root certificates, the
211 same format as used for the same parameter in :func:`wrap_socket`. The call
212 will attempt to validate the server certificate against that set of root
Bill Janssen296a59d2007-09-16 22:06:00 +0000213 certificates, and will fail if the validation attempt fails.
214
215.. function:: DER_cert_to_PEM_cert (DER_cert_bytes)
216
217 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
218 string version of the same certificate.
219
220.. function:: PEM_cert_to_DER_cert (PEM_cert_string)
221
Georg Brandla50d20a2009-09-16 15:57:46 +0000222 Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of
223 bytes for that same certificate.
Bill Janssen296a59d2007-09-16 22:06:00 +0000224
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000225.. data:: CERT_NONE
226
Georg Brandla50d20a2009-09-16 15:57:46 +0000227 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject` when no
228 certificates will be required or validated from the other side of the socket
229 connection.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000230
231.. data:: CERT_OPTIONAL
232
Georg Brandla50d20a2009-09-16 15:57:46 +0000233 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject` when no
234 certificates will be required from the other side of the socket connection,
235 but if they are provided, will be validated. Note that use of this setting
236 requires a valid certificate validation file also be passed as a value of the
237 ``ca_certs`` parameter.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000238
239.. data:: CERT_REQUIRED
240
Georg Brandla50d20a2009-09-16 15:57:46 +0000241 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject` when
242 certificates will be required from the other side of the socket connection.
243 Note that use of this setting requires a valid certificate validation file
244 also be passed as a value of the ``ca_certs`` parameter.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000245
246.. data:: PROTOCOL_SSLv2
247
248 Selects SSL version 2 as the channel encryption protocol.
249
Victor Stinnerb1241f92011-05-10 01:52:03 +0200250 This protocol is not available if OpenSSL is compiled with OPENSSL_NO_SSL2
251 flag.
252
Antoine Pitrou308c2af2010-05-16 14:16:56 +0000253 .. warning::
254
255 SSL version 2 is insecure. Its use is highly discouraged.
256
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000257.. data:: PROTOCOL_SSLv23
258
Georg Brandla50d20a2009-09-16 15:57:46 +0000259 Selects SSL version 2 or 3 as the channel encryption protocol. This is a
260 setting to use with servers for maximum compatibility with the other end of
261 an SSL connection, but it may cause the specific ciphers chosen for the
262 encryption to be of fairly low quality.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000263
264.. data:: PROTOCOL_SSLv3
265
Georg Brandla50d20a2009-09-16 15:57:46 +0000266 Selects SSL version 3 as the channel encryption protocol. For clients, this
267 is the maximally compatible SSL variant.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000268
269.. data:: PROTOCOL_TLSv1
270
Georg Brandla50d20a2009-09-16 15:57:46 +0000271 Selects TLS version 1 as the channel encryption protocol. This is the most
272 modern version, and probably the best choice for maximum protection, if both
273 sides can speak it.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000274
Antoine Pitrouf9de5342010-04-05 21:35:07 +0000275.. data:: OPENSSL_VERSION
276
277 The version string of the OpenSSL library loaded by the interpreter::
278
279 >>> ssl.OPENSSL_VERSION
280 'OpenSSL 0.9.8k 25 Mar 2009'
281
282 .. versionadded:: 2.7
283
284.. data:: OPENSSL_VERSION_INFO
285
286 A tuple of five integers representing version information about the
287 OpenSSL library::
288
289 >>> ssl.OPENSSL_VERSION_INFO
290 (0, 9, 8, 11, 15)
291
292 .. versionadded:: 2.7
293
294.. data:: OPENSSL_VERSION_NUMBER
295
296 The raw version number of the OpenSSL library, as a single integer::
297
298 >>> ssl.OPENSSL_VERSION_NUMBER
299 9470143L
300 >>> hex(ssl.OPENSSL_VERSION_NUMBER)
301 '0x9080bfL'
302
303 .. versionadded:: 2.7
304
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000305
Bill Janssen98d19da2007-09-10 21:51:02 +0000306SSLSocket Objects
307-----------------
308
Giampaolo Rodola'76794132013-04-06 03:46:47 +0200309SSL sockets provide the following methods of :ref:`socket-objects`:
Bill Janssen98d19da2007-09-10 21:51:02 +0000310
Giampaolo Rodola'76794132013-04-06 03:46:47 +0200311- :meth:`~socket.socket.accept()`
312- :meth:`~socket.socket.bind()`
313- :meth:`~socket.socket.close()`
314- :meth:`~socket.socket.connect()`
315- :meth:`~socket.socket.fileno()`
316- :meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`
317- :meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`
318- :meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`,
319 :meth:`~socket.socket.setblocking()`
320- :meth:`~socket.socket.listen()`
321- :meth:`~socket.socket.makefile()`
322- :meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()`
323 (but passing a non-zero ``flags`` argument is not allowed)
324- :meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with
325 the same limitation)
326- :meth:`~socket.socket.shutdown()`
Bill Janssen98d19da2007-09-10 21:51:02 +0000327
Giampaolo Rodola'76794132013-04-06 03:46:47 +0200328However, since the SSL (and TLS) protocol has its own framing atop
329of TCP, the SSL sockets abstraction can, in certain respects, diverge from
330the specification of normal, OS-level sockets.
Bill Janssen98d19da2007-09-10 21:51:02 +0000331
Giampaolo Rodola'76794132013-04-06 03:46:47 +0200332SSL sockets also have the following additional methods and attributes:
Bill Janssen98d19da2007-09-10 21:51:02 +0000333
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000334.. method:: SSLSocket.getpeercert(binary_form=False)
Bill Janssen98d19da2007-09-10 21:51:02 +0000335
Georg Brandla50d20a2009-09-16 15:57:46 +0000336 If there is no certificate for the peer on the other end of the connection,
337 returns ``None``.
Bill Janssen98d19da2007-09-10 21:51:02 +0000338
Antoine Pitrouf12f3912013-04-16 20:27:17 +0200339 If the ``binary_form`` parameter is :const:`False`, and a certificate was
Georg Brandla50d20a2009-09-16 15:57:46 +0000340 received from the peer, this method returns a :class:`dict` instance. If the
341 certificate was not validated, the dict is empty. If the certificate was
342 validated, it returns a dict with the keys ``subject`` (the principal for
343 which the certificate was issued), and ``notAfter`` (the time after which the
344 certificate should not be trusted). The certificate was already validated,
345 so the ``notBefore`` and ``issuer`` fields are not returned. If a
346 certificate contains an instance of the *Subject Alternative Name* extension
347 (see :rfc:`3280`), there will also be a ``subjectAltName`` key in the
348 dictionary.
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000349
350 The "subject" field is a tuple containing the sequence of relative
Georg Brandla50d20a2009-09-16 15:57:46 +0000351 distinguished names (RDNs) given in the certificate's data structure for the
352 principal, and each RDN is a sequence of name-value pairs::
Bill Janssen98d19da2007-09-10 21:51:02 +0000353
354 {'notAfter': 'Feb 16 16:54:50 2013 GMT',
355 'subject': ((('countryName', u'US'),),
356 (('stateOrProvinceName', u'Delaware'),),
357 (('localityName', u'Wilmington'),),
358 (('organizationName', u'Python Software Foundation'),),
359 (('organizationalUnitName', u'SSL'),),
360 (('commonName', u'somemachine.python.org'),))}
361
Georg Brandla50d20a2009-09-16 15:57:46 +0000362 If the ``binary_form`` parameter is :const:`True`, and a certificate was
363 provided, this method returns the DER-encoded form of the entire certificate
364 as a sequence of bytes, or :const:`None` if the peer did not provide a
Antoine Pitrouf12f3912013-04-16 20:27:17 +0200365 certificate. Whether the peer provides a certificate depends on the SSL
366 socket's role:
367
368 * for a client SSL socket, the server will always provide a certificate,
369 regardless of whether validation was required;
370
371 * for a server SSL socket, the client will only provide a certificate
372 when requested by the server; therefore :meth:`getpeercert` will return
373 :const:`None` if you used :const:`CERT_NONE` (rather than
374 :const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`).
Bill Janssen98d19da2007-09-10 21:51:02 +0000375
376.. method:: SSLSocket.cipher()
377
Georg Brandla50d20a2009-09-16 15:57:46 +0000378 Returns a three-value tuple containing the name of the cipher being used, the
379 version of the SSL protocol that defines its use, and the number of secret
380 bits being used. If no connection has been established, returns ``None``.
Bill Janssen98d19da2007-09-10 21:51:02 +0000381
Bill Janssen934b16d2008-06-28 22:19:33 +0000382.. method:: SSLSocket.do_handshake()
383
Georg Brandla50d20a2009-09-16 15:57:46 +0000384 Perform a TLS/SSL handshake. If this is used with a non-blocking socket, it
385 may raise :exc:`SSLError` with an ``arg[0]`` of :const:`SSL_ERROR_WANT_READ`
386 or :const:`SSL_ERROR_WANT_WRITE`, in which case it must be called again until
387 it completes successfully. For example, to simulate the behavior of a
388 blocking socket, one might write::
Bill Janssen934b16d2008-06-28 22:19:33 +0000389
390 while True:
391 try:
392 s.do_handshake()
393 break
Andrew Svetlov1625d882012-10-30 21:56:43 +0200394 except ssl.SSLError as err:
Bill Janssen934b16d2008-06-28 22:19:33 +0000395 if err.args[0] == ssl.SSL_ERROR_WANT_READ:
396 select.select([s], [], [])
397 elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE:
398 select.select([], [s], [])
399 else:
400 raise
Bill Janssen98d19da2007-09-10 21:51:02 +0000401
Bill Janssen5bfbd762008-08-12 17:09:57 +0000402.. method:: SSLSocket.unwrap()
403
Georg Brandla50d20a2009-09-16 15:57:46 +0000404 Performs the SSL shutdown handshake, which removes the TLS layer from the
405 underlying socket, and returns the underlying socket object. This can be
406 used to go from encrypted operation over a connection to unencrypted. The
407 socket instance returned should always be used for further communication with
408 the other side of the connection, rather than the original socket instance
409 (which may not function properly after the unwrap).
Bill Janssen5bfbd762008-08-12 17:09:57 +0000410
Bill Janssen98d19da2007-09-10 21:51:02 +0000411.. index:: single: certificates
412
413.. index:: single: X509 certificate
414
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000415.. _ssl-certificates:
416
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000417Certificates
418------------
419
Georg Brandla50d20a2009-09-16 15:57:46 +0000420Certificates in general are part of a public-key / private-key system. In this
421system, each *principal*, (which may be a machine, or a person, or an
422organization) is assigned a unique two-part encryption key. One part of the key
423is public, and is called the *public key*; the other part is kept secret, and is
424called the *private key*. The two parts are related, in that if you encrypt a
425message with one of the parts, you can decrypt it with the other part, and
426**only** with the other part.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000427
Georg Brandla50d20a2009-09-16 15:57:46 +0000428A certificate contains information about two principals. It contains the name
429of a *subject*, and the subject's public key. It also contains a statement by a
430second principal, the *issuer*, that the subject is who he claims to be, and
431that this is indeed the subject's public key. The issuer's statement is signed
432with the issuer's private key, which only the issuer knows. However, anyone can
433verify the issuer's statement by finding the issuer's public key, decrypting the
434statement with it, and comparing it to the other information in the certificate.
435The certificate also contains information about the time period over which it is
436valid. This is expressed as two fields, called "notBefore" and "notAfter".
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000437
Georg Brandla50d20a2009-09-16 15:57:46 +0000438In the Python use of certificates, a client or server can use a certificate to
439prove who they are. The other side of a network connection can also be required
440to produce a certificate, and that certificate can be validated to the
441satisfaction of the client or server that requires such validation. The
442connection attempt can be set to raise an exception if the validation fails.
443Validation is done automatically, by the underlying OpenSSL framework; the
444application need not concern itself with its mechanics. But the application
445does usually need to provide sets of certificates to allow this process to take
446place.
Bill Janssen426ea0a2007-08-29 22:35:05 +0000447
Georg Brandla50d20a2009-09-16 15:57:46 +0000448Python uses files to contain certificates. They should be formatted as "PEM"
449(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
450and a footer line::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000451
452 -----BEGIN CERTIFICATE-----
453 ... (certificate in base64 PEM encoding) ...
454 -----END CERTIFICATE-----
455
Georg Brandla50d20a2009-09-16 15:57:46 +0000456The Python files which contain certificates can contain a sequence of
457certificates, sometimes called a *certificate chain*. This chain should start
458with the specific certificate for the principal who "is" the client or server,
459and then the certificate for the issuer of that certificate, and then the
460certificate for the issuer of *that* certificate, and so on up the chain till
461you get to a certificate which is *self-signed*, that is, a certificate which
462has the same subject and issuer, sometimes called a *root certificate*. The
463certificates should just be concatenated together in the certificate file. For
464example, suppose we had a three certificate chain, from our server certificate
465to the certificate of the certification authority that signed our server
466certificate, to the root certificate of the agency which issued the
467certification authority's certificate::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000468
469 -----BEGIN CERTIFICATE-----
470 ... (certificate for your server)...
471 -----END CERTIFICATE-----
472 -----BEGIN CERTIFICATE-----
473 ... (the certificate for the CA)...
474 -----END CERTIFICATE-----
475 -----BEGIN CERTIFICATE-----
476 ... (the root certificate for the CA's issuer)...
477 -----END CERTIFICATE-----
478
479If you are going to require validation of the other side of the connection's
480certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandla50d20a2009-09-16 15:57:46 +0000481chains for each issuer you are willing to trust. Again, this file just contains
482these chains concatenated together. For validation, Python will use the first
483chain it finds in the file which matches.
Bill Janssen934b16d2008-06-28 22:19:33 +0000484
Bill Janssen98d19da2007-09-10 21:51:02 +0000485Some "standard" root certificates are available from various certification
Georg Brandla50d20a2009-09-16 15:57:46 +0000486authorities: `CACert.org <http://www.cacert.org/index.php?id=3>`_, `Thawte
487<http://www.thawte.com/roots/>`_, `Verisign
488<http://www.verisign.com/support/roots.html>`_, `Positive SSL
489<http://www.PositiveSSL.com/ssl-certificate-support/cert_installation/UTN-USERFirst-Hardware.crt>`_
490(used by python.org), `Equifax and GeoTrust
491<http://www.geotrust.com/resources/root_certificates/index.asp>`_.
Bill Janssen98d19da2007-09-10 21:51:02 +0000492
Georg Brandla50d20a2009-09-16 15:57:46 +0000493In general, if you are using SSL3 or TLS1, you don't need to put the full chain
494in your "CA certs" file; you only need the root certificates, and the remote
495peer is supposed to furnish the other certificates necessary to chain from its
496certificate to a root certificate. See :rfc:`4158` for more discussion of the
497way in which certification chains can be built.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000498
Georg Brandla50d20a2009-09-16 15:57:46 +0000499If you are going to create a server that provides SSL-encrypted connection
500services, you will need to acquire a certificate for that service. There are
501many ways of acquiring appropriate certificates, such as buying one from a
502certification authority. Another common practice is to generate a self-signed
503certificate. The simplest way to do this is with the OpenSSL package, using
504something like the following::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000505
Bill Janssen98d19da2007-09-10 21:51:02 +0000506 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
507 Generating a 1024 bit RSA private key
508 .......++++++
509 .............................++++++
510 writing new private key to 'cert.pem'
511 -----
512 You are about to be asked to enter information that will be incorporated
513 into your certificate request.
514 What you are about to enter is what is called a Distinguished Name or a DN.
515 There are quite a few fields but you can leave some blank
516 For some fields there will be a default value,
517 If you enter '.', the field will be left blank.
518 -----
519 Country Name (2 letter code) [AU]:US
520 State or Province Name (full name) [Some-State]:MyState
521 Locality Name (eg, city) []:Some City
522 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
523 Organizational Unit Name (eg, section) []:My Group
524 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
525 Email Address []:ops@myserver.mygroup.myorganization.com
526 %
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000527
Georg Brandla50d20a2009-09-16 15:57:46 +0000528The disadvantage of a self-signed certificate is that it is its own root
529certificate, and no one else will have it in their cache of known (and trusted)
530root certificates.
Bill Janssen426ea0a2007-08-29 22:35:05 +0000531
532
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000533Examples
534--------
535
Bill Janssen426ea0a2007-08-29 22:35:05 +0000536Testing for SSL support
537^^^^^^^^^^^^^^^^^^^^^^^
538
Georg Brandla50d20a2009-09-16 15:57:46 +0000539To test for the presence of SSL support in a Python installation, user code
540should use the following idiom::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000541
542 try:
Georg Brandl28046022011-02-25 11:01:04 +0000543 import ssl
Bill Janssen426ea0a2007-08-29 22:35:05 +0000544 except ImportError:
Georg Brandl28046022011-02-25 11:01:04 +0000545 pass
Bill Janssen426ea0a2007-08-29 22:35:05 +0000546 else:
Georg Brandl28046022011-02-25 11:01:04 +0000547 ... # do something that requires SSL support
Bill Janssen426ea0a2007-08-29 22:35:05 +0000548
549Client-side operation
550^^^^^^^^^^^^^^^^^^^^^
551
Georg Brandla50d20a2009-09-16 15:57:46 +0000552This example connects to an SSL server, prints the server's address and
553certificate, sends some bytes, and reads part of the response::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000554
Benjamin Petersona7b55a32009-02-20 03:31:23 +0000555 import socket, ssl, pprint
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000556
557 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Bill Janssen98d19da2007-09-10 21:51:02 +0000558
559 # require a certificate from the server
560 ssl_sock = ssl.wrap_socket(s,
561 ca_certs="/etc/ca_certs_file",
562 cert_reqs=ssl.CERT_REQUIRED)
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000563
564 ssl_sock.connect(('www.verisign.com', 443))
565
566 print repr(ssl_sock.getpeername())
Bill Janssen98d19da2007-09-10 21:51:02 +0000567 print ssl_sock.cipher()
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000568 print pprint.pformat(ssl_sock.getpeercert())
569
570 # Set a simple HTTP request -- use httplib in actual code.
571 ssl_sock.write("""GET / HTTP/1.0\r
572 Host: www.verisign.com\r\n\r\n""")
573
574 # Read a chunk of data. Will not necessarily
575 # read all the data returned by the server.
576 data = ssl_sock.read()
577
Bill Janssen98d19da2007-09-10 21:51:02 +0000578 # note that closing the SSLSocket will also close the underlying socket
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000579 ssl_sock.close()
580
Georg Brandla50d20a2009-09-16 15:57:46 +0000581As of September 6, 2007, the certificate printed by this program looked like
582this::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000583
Bill Janssen98d19da2007-09-10 21:51:02 +0000584 {'notAfter': 'May 8 23:59:59 2009 GMT',
585 'subject': ((('serialNumber', u'2497886'),),
586 (('1.3.6.1.4.1.311.60.2.1.3', u'US'),),
587 (('1.3.6.1.4.1.311.60.2.1.2', u'Delaware'),),
588 (('countryName', u'US'),),
589 (('postalCode', u'94043'),),
590 (('stateOrProvinceName', u'California'),),
591 (('localityName', u'Mountain View'),),
592 (('streetAddress', u'487 East Middlefield Road'),),
593 (('organizationName', u'VeriSign, Inc.'),),
594 (('organizationalUnitName',
595 u'Production Security Services'),),
596 (('organizationalUnitName',
597 u'Terms of use at www.verisign.com/rpa (c)06'),),
598 (('commonName', u'www.verisign.com'),))}
599
600which is a fairly poorly-formed ``subject`` field.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000601
Bill Janssen426ea0a2007-08-29 22:35:05 +0000602Server-side operation
603^^^^^^^^^^^^^^^^^^^^^
604
Georg Brandla50d20a2009-09-16 15:57:46 +0000605For server operation, typically you'd need to have a server certificate, and
606private key, each in a file. You'd open a socket, bind it to a port, call
607:meth:`listen` on it, then start waiting for clients to connect::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000608
Benjamin Petersona7b55a32009-02-20 03:31:23 +0000609 import socket, ssl
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000610
611 bindsocket = socket.socket()
612 bindsocket.bind(('myaddr.mydomain.com', 10023))
613 bindsocket.listen(5)
614
Georg Brandla50d20a2009-09-16 15:57:46 +0000615When one did, you'd call :meth:`accept` on the socket to get the new socket from
616the other end, and use :func:`wrap_socket` to create a server-side SSL context
617for it::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000618
619 while True:
Antoine Pitrou9e7d6e52011-01-02 22:39:10 +0000620 newsocket, fromaddr = bindsocket.accept()
621 connstream = ssl.wrap_socket(newsocket,
622 server_side=True,
623 certfile="mycertfile",
624 keyfile="mykeyfile",
625 ssl_version=ssl.PROTOCOL_TLSv1)
626 try:
627 deal_with_client(connstream)
628 finally:
629 connstream.shutdown(socket.SHUT_RDWR)
630 connstream.close()
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000631
Georg Brandla50d20a2009-09-16 15:57:46 +0000632Then you'd read data from the ``connstream`` and do something with it till you
633are finished with the client (or the client is finished with you)::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000634
635 def deal_with_client(connstream):
Georg Brandl28046022011-02-25 11:01:04 +0000636 data = connstream.read()
637 # null data means the client is finished with us
638 while data:
639 if not do_something(connstream, data):
640 # we'll assume do_something returns False
641 # when we're finished with client
642 break
643 data = connstream.read()
644 # finished with client
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000645
646And go back to listening for new client connections.
647
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000648
Bill Janssen98d19da2007-09-10 21:51:02 +0000649.. seealso::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000650
Bill Janssen98d19da2007-09-10 21:51:02 +0000651 Class :class:`socket.socket`
Georg Brandl4e8534e2013-10-06 18:20:31 +0200652 Documentation of underlying :mod:`socket` class
Bill Janssen426ea0a2007-08-29 22:35:05 +0000653
Georg Brandl4e8534e2013-10-06 18:20:31 +0200654 `SSL/TLS Strong Encryption: An Introduction <http://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html>`_
655 Intro from the Apache webserver documentation
Bill Janssen426ea0a2007-08-29 22:35:05 +0000656
Bill Janssen98d19da2007-09-10 21:51:02 +0000657 `RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management <http://www.ietf.org/rfc/rfc1422>`_
658 Steve Kent
Bill Janssen426ea0a2007-08-29 22:35:05 +0000659
Bill Janssen98d19da2007-09-10 21:51:02 +0000660 `RFC 1750: Randomness Recommendations for Security <http://www.ietf.org/rfc/rfc1750>`_
661 D. Eastlake et. al.
Bill Janssenffe576d2007-09-05 00:46:27 +0000662
Bill Janssen98d19da2007-09-10 21:51:02 +0000663 `RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile <http://www.ietf.org/rfc/rfc3280>`_
664 Housley et. al.