blob: 9b09894cbda9c8911ab5efa76e71968e223cd29d [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
Georg Brandla50d20a2009-09-16 15:57:46 +000033This section documents the objects and functions in the ``ssl`` module; for more
34general information about TLS, SSL, and certificates, the reader is referred to
35the documents in the "See Also" section at the bottom.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000036
Georg Brandla50d20a2009-09-16 15:57:46 +000037This module provides a class, :class:`ssl.SSLSocket`, which is derived from the
38:class:`socket.socket` type, and provides a socket-like wrapper that also
39encrypts and decrypts the data going over the socket with SSL. It supports
40additional :meth:`read` and :meth:`write` methods, along with a method,
41:meth:`getpeercert`, to retrieve the certificate of the other side of the
42connection, and a method, :meth:`cipher`, to retrieve the cipher being used for
43the secure connection.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000044
Bill Janssen93bf9ce2007-09-11 02:42:07 +000045Functions, Constants, and Exceptions
46------------------------------------
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000047
Bill Janssen93bf9ce2007-09-11 02:42:07 +000048.. exception:: SSLError
49
Georg Brandlc62ef8b2009-01-03 20:55:06 +000050 Raised to signal an error from the underlying SSL implementation. This
Georg Brandla50d20a2009-09-16 15:57:46 +000051 signifies some problem in the higher-level encryption and authentication
52 layer that's superimposed on the underlying network connection. This error
53 is a subtype of :exc:`socket.error`, which in turn is a subtype of
54 :exc:`IOError`.
Bill Janssen93bf9ce2007-09-11 02:42:07 +000055
Antoine Pitrou0a6373c2010-04-17 17:10:38 +000056.. 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 +000057
Georg Brandla50d20a2009-09-16 15:57:46 +000058 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance
59 of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps
60 the underlying socket in an SSL context. For client-side sockets, the
61 context construction is lazy; if the underlying socket isn't connected yet,
62 the context construction will be performed after :meth:`connect` is called on
63 the socket. For server-side sockets, if the socket has no remote peer, it is
64 assumed to be a listening socket, and the server-side SSL wrapping is
65 automatically performed on client connections accepted via the :meth:`accept`
66 method. :func:`wrap_socket` may raise :exc:`SSLError`.
Bill Janssen98d19da2007-09-10 21:51:02 +000067
Georg Brandla50d20a2009-09-16 15:57:46 +000068 The ``keyfile`` and ``certfile`` parameters specify optional files which
69 contain a certificate to be used to identify the local side of the
70 connection. See the discussion of :ref:`ssl-certificates` for more
71 information on how the certificate is stored in the ``certfile``.
Bill Janssen98d19da2007-09-10 21:51:02 +000072
Georg Brandla50d20a2009-09-16 15:57:46 +000073 Often the private key is stored in the same file as the certificate; in this
74 case, only the ``certfile`` parameter need be passed. If the private key is
75 stored in a separate file, both parameters must be used. If the private key
76 is stored in the ``certfile``, it should come before the first certificate in
77 the certificate chain::
Bill Janssen98d19da2007-09-10 21:51:02 +000078
79 -----BEGIN RSA PRIVATE KEY-----
80 ... (private key in base64 encoding) ...
81 -----END RSA PRIVATE KEY-----
82 -----BEGIN CERTIFICATE-----
83 ... (certificate in base64 PEM encoding) ...
84 -----END CERTIFICATE-----
85
Georg Brandla50d20a2009-09-16 15:57:46 +000086 The parameter ``server_side`` is a boolean which identifies whether
87 server-side or client-side behavior is desired from this socket.
Bill Janssen98d19da2007-09-10 21:51:02 +000088
Georg Brandla50d20a2009-09-16 15:57:46 +000089 The parameter ``cert_reqs`` specifies whether a certificate is required from
90 the other side of the connection, and whether it will be validated if
91 provided. It must be one of the three values :const:`CERT_NONE`
92 (certificates ignored), :const:`CERT_OPTIONAL` (not required, but validated
93 if provided), or :const:`CERT_REQUIRED` (required and validated). If the
94 value of this parameter is not :const:`CERT_NONE`, then the ``ca_certs``
95 parameter must point to a file of CA certificates.
Bill Janssen98d19da2007-09-10 21:51:02 +000096
Georg Brandla50d20a2009-09-16 15:57:46 +000097 The ``ca_certs`` file contains a set of concatenated "certification
98 authority" certificates, which are used to validate certificates passed from
99 the other end of the connection. See the discussion of
100 :ref:`ssl-certificates` for more information about how to arrange the
101 certificates in this file.
Bill Janssen98d19da2007-09-10 21:51:02 +0000102
Georg Brandla50d20a2009-09-16 15:57:46 +0000103 The parameter ``ssl_version`` specifies which version of the SSL protocol to
104 use. Typically, the server chooses a particular protocol version, and the
105 client must adapt to the server's choice. Most of the versions are not
106 interoperable with the other versions. If not specified, for client-side
107 operation, the default SSL version is SSLv3; for server-side operation,
108 SSLv23. These version selections provide the most compatibility with other
109 versions.
Bill Janssen98d19da2007-09-10 21:51:02 +0000110
Georg Brandla50d20a2009-09-16 15:57:46 +0000111 Here's a table showing which versions in a client (down the side) can connect
112 to which versions in a server (along the top):
Bill Janssen98d19da2007-09-10 21:51:02 +0000113
114 .. table::
115
116 ======================== ========= ========= ========== =========
117 *client* / **server** **SSLv2** **SSLv3** **SSLv23** **TLSv1**
Georg Brandl2b92f6b2007-12-06 01:52:24 +0000118 ------------------------ --------- --------- ---------- ---------
Antoine Pitrou0a6373c2010-04-17 17:10:38 +0000119 *SSLv2* yes no yes no
Bill Janssen98d19da2007-09-10 21:51:02 +0000120 *SSLv3* yes yes yes no
121 *SSLv23* yes no yes no
122 *TLSv1* no no yes yes
123 ======================== ========= ========= ========== =========
124
Antoine Pitrou0a6373c2010-04-17 17:10:38 +0000125 .. note::
126
Andrew M. Kuchling3ded4212010-04-30 00:52:31 +0000127 Which connections succeed will vary depending on the version of
128 OpenSSL. For instance, in some older versions of OpenSSL (such
129 as 0.9.7l on OS X 10.4), an SSLv2 client could not connect to an
130 SSLv23 server. Another example: beginning with OpenSSL 1.0.0,
131 an SSLv23 client will not actually attempt SSLv2 connections
132 unless you explicitly enable SSLv2 ciphers; for example, you
133 might specify ``"ALL"`` or ``"SSLv2"`` as the *ciphers* parameter
134 to enable them.
Antoine Pitrou0a6373c2010-04-17 17:10:38 +0000135
Andrew M. Kuchling3ded4212010-04-30 00:52:31 +0000136 The *ciphers* parameter sets the available ciphers for this SSL object.
Antoine Pitrou0a6373c2010-04-17 17:10:38 +0000137 It should be a string in the `OpenSSL cipher list format
138 <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`_.
Bill Janssen98d19da2007-09-10 21:51:02 +0000139
Bill Janssen934b16d2008-06-28 22:19:33 +0000140 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
141 handshake automatically after doing a :meth:`socket.connect`, or whether the
Georg Brandla50d20a2009-09-16 15:57:46 +0000142 application program will call it explicitly, by invoking the
143 :meth:`SSLSocket.do_handshake` method. Calling
144 :meth:`SSLSocket.do_handshake` explicitly gives the program control over the
145 blocking behavior of the socket I/O involved in the handshake.
Bill Janssen934b16d2008-06-28 22:19:33 +0000146
Georg Brandla50d20a2009-09-16 15:57:46 +0000147 The parameter ``suppress_ragged_eofs`` specifies how the
148 :meth:`SSLSocket.read` method should signal unexpected EOF from the other end
149 of the connection. If specified as :const:`True` (the default), it returns a
150 normal EOF in response to unexpected EOF errors raised from the underlying
151 socket; if :const:`False`, it will raise the exceptions back to the caller.
Bill Janssen934b16d2008-06-28 22:19:33 +0000152
Antoine Pitrou0a6373c2010-04-17 17:10:38 +0000153 .. versionchanged:: 2.7
154 New optional argument *ciphers*.
155
Bill Janssen98d19da2007-09-10 21:51:02 +0000156.. function:: RAND_status()
157
Georg Brandla50d20a2009-09-16 15:57:46 +0000158 Returns True if the SSL pseudo-random number generator has been seeded with
159 'enough' randomness, and False otherwise. You can use :func:`ssl.RAND_egd`
160 and :func:`ssl.RAND_add` to increase the randomness of the pseudo-random
161 number generator.
Bill Janssen98d19da2007-09-10 21:51:02 +0000162
163.. function:: RAND_egd(path)
164
165 If you are running an entropy-gathering daemon (EGD) somewhere, and ``path``
Georg Brandla50d20a2009-09-16 15:57:46 +0000166 is the pathname of a socket connection open to it, this will read 256 bytes
167 of randomness from the socket, and add it to the SSL pseudo-random number
168 generator to increase the security of generated secret keys. This is
169 typically only necessary on systems without better sources of randomness.
Bill Janssen98d19da2007-09-10 21:51:02 +0000170
Georg Brandla50d20a2009-09-16 15:57:46 +0000171 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources
172 of entropy-gathering daemons.
Bill Janssen98d19da2007-09-10 21:51:02 +0000173
174.. function:: RAND_add(bytes, entropy)
175
Georg Brandla50d20a2009-09-16 15:57:46 +0000176 Mixes the given ``bytes`` into the SSL pseudo-random number generator. The
177 parameter ``entropy`` (a float) is a lower bound on the entropy contained in
178 string (so you can always use :const:`0.0`). See :rfc:`1750` for more
179 information on sources of entropy.
Bill Janssen98d19da2007-09-10 21:51:02 +0000180
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000181.. function:: cert_time_to_seconds(timestring)
182
Georg Brandla50d20a2009-09-16 15:57:46 +0000183 Returns a floating-point value containing a normal seconds-after-the-epoch
184 time value, given the time-string representing the "notBefore" or "notAfter"
185 date from a certificate.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000186
187 Here's an example::
188
189 >>> import ssl
190 >>> ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT")
191 1178694000.0
192 >>> import time
193 >>> time.ctime(ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT"))
194 'Wed May 9 00:00:00 2007'
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000195 >>>
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000196
Bill Janssen296a59d2007-09-16 22:06:00 +0000197.. function:: get_server_certificate (addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None)
198
Georg Brandla50d20a2009-09-16 15:57:46 +0000199 Given the address ``addr`` of an SSL-protected server, as a (*hostname*,
200 *port-number*) pair, fetches the server's certificate, and returns it as a
201 PEM-encoded string. If ``ssl_version`` is specified, uses that version of
202 the SSL protocol to attempt to connect to the server. If ``ca_certs`` is
203 specified, it should be a file containing a list of root certificates, the
204 same format as used for the same parameter in :func:`wrap_socket`. The call
205 will attempt to validate the server certificate against that set of root
Bill Janssen296a59d2007-09-16 22:06:00 +0000206 certificates, and will fail if the validation attempt fails.
207
208.. function:: DER_cert_to_PEM_cert (DER_cert_bytes)
209
210 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
211 string version of the same certificate.
212
213.. function:: PEM_cert_to_DER_cert (PEM_cert_string)
214
Georg Brandla50d20a2009-09-16 15:57:46 +0000215 Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of
216 bytes for that same certificate.
Bill Janssen296a59d2007-09-16 22:06:00 +0000217
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000218.. data:: CERT_NONE
219
Georg Brandla50d20a2009-09-16 15:57:46 +0000220 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject` when no
221 certificates will be required or validated from the other side of the socket
222 connection.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000223
224.. data:: CERT_OPTIONAL
225
Georg Brandla50d20a2009-09-16 15:57:46 +0000226 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject` when no
227 certificates will be required from the other side of the socket connection,
228 but if they are provided, will be validated. Note that use of this setting
229 requires a valid certificate validation file also be passed as a value of the
230 ``ca_certs`` parameter.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000231
232.. data:: CERT_REQUIRED
233
Georg Brandla50d20a2009-09-16 15:57:46 +0000234 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject` when
235 certificates will be required from the other side of the socket connection.
236 Note that use of this setting requires a valid certificate validation file
237 also be passed as a value of the ``ca_certs`` parameter.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000238
239.. data:: PROTOCOL_SSLv2
240
241 Selects SSL version 2 as the channel encryption protocol.
242
Victor Stinnerb1241f92011-05-10 01:52:03 +0200243 This protocol is not available if OpenSSL is compiled with OPENSSL_NO_SSL2
244 flag.
245
Antoine Pitrou308c2af2010-05-16 14:16:56 +0000246 .. warning::
247
248 SSL version 2 is insecure. Its use is highly discouraged.
249
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000250.. data:: PROTOCOL_SSLv23
251
Georg Brandla50d20a2009-09-16 15:57:46 +0000252 Selects SSL version 2 or 3 as the channel encryption protocol. This is a
253 setting to use with servers for maximum compatibility with the other end of
254 an SSL connection, but it may cause the specific ciphers chosen for the
255 encryption to be of fairly low quality.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000256
257.. data:: PROTOCOL_SSLv3
258
Georg Brandla50d20a2009-09-16 15:57:46 +0000259 Selects SSL version 3 as the channel encryption protocol. For clients, this
260 is the maximally compatible SSL variant.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000261
262.. data:: PROTOCOL_TLSv1
263
Georg Brandla50d20a2009-09-16 15:57:46 +0000264 Selects TLS version 1 as the channel encryption protocol. This is the most
265 modern version, and probably the best choice for maximum protection, if both
266 sides can speak it.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000267
Antoine Pitrouf9de5342010-04-05 21:35:07 +0000268.. data:: OPENSSL_VERSION
269
270 The version string of the OpenSSL library loaded by the interpreter::
271
272 >>> ssl.OPENSSL_VERSION
273 'OpenSSL 0.9.8k 25 Mar 2009'
274
275 .. versionadded:: 2.7
276
277.. data:: OPENSSL_VERSION_INFO
278
279 A tuple of five integers representing version information about the
280 OpenSSL library::
281
282 >>> ssl.OPENSSL_VERSION_INFO
283 (0, 9, 8, 11, 15)
284
285 .. versionadded:: 2.7
286
287.. data:: OPENSSL_VERSION_NUMBER
288
289 The raw version number of the OpenSSL library, as a single integer::
290
291 >>> ssl.OPENSSL_VERSION_NUMBER
292 9470143L
293 >>> hex(ssl.OPENSSL_VERSION_NUMBER)
294 '0x9080bfL'
295
296 .. versionadded:: 2.7
297
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000298
Bill Janssen98d19da2007-09-10 21:51:02 +0000299SSLSocket Objects
300-----------------
301
302.. method:: SSLSocket.read([nbytes=1024])
303
304 Reads up to ``nbytes`` bytes from the SSL-encrypted channel and returns them.
305
306.. method:: SSLSocket.write(data)
307
Georg Brandla50d20a2009-09-16 15:57:46 +0000308 Writes the ``data`` to the other side of the connection, using the SSL
309 channel to encrypt. Returns the number of bytes written.
Bill Janssen98d19da2007-09-10 21:51:02 +0000310
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000311.. method:: SSLSocket.getpeercert(binary_form=False)
Bill Janssen98d19da2007-09-10 21:51:02 +0000312
Georg Brandla50d20a2009-09-16 15:57:46 +0000313 If there is no certificate for the peer on the other end of the connection,
314 returns ``None``.
Bill Janssen98d19da2007-09-10 21:51:02 +0000315
Georg Brandla50d20a2009-09-16 15:57:46 +0000316 If the parameter ``binary_form`` is :const:`False`, and a certificate was
317 received from the peer, this method returns a :class:`dict` instance. If the
318 certificate was not validated, the dict is empty. If the certificate was
319 validated, it returns a dict with the keys ``subject`` (the principal for
320 which the certificate was issued), and ``notAfter`` (the time after which the
321 certificate should not be trusted). The certificate was already validated,
322 so the ``notBefore`` and ``issuer`` fields are not returned. If a
323 certificate contains an instance of the *Subject Alternative Name* extension
324 (see :rfc:`3280`), there will also be a ``subjectAltName`` key in the
325 dictionary.
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000326
327 The "subject" field is a tuple containing the sequence of relative
Georg Brandla50d20a2009-09-16 15:57:46 +0000328 distinguished names (RDNs) given in the certificate's data structure for the
329 principal, and each RDN is a sequence of name-value pairs::
Bill Janssen98d19da2007-09-10 21:51:02 +0000330
331 {'notAfter': 'Feb 16 16:54:50 2013 GMT',
332 'subject': ((('countryName', u'US'),),
333 (('stateOrProvinceName', u'Delaware'),),
334 (('localityName', u'Wilmington'),),
335 (('organizationName', u'Python Software Foundation'),),
336 (('organizationalUnitName', u'SSL'),),
337 (('commonName', u'somemachine.python.org'),))}
338
Georg Brandla50d20a2009-09-16 15:57:46 +0000339 If the ``binary_form`` parameter is :const:`True`, and a certificate was
340 provided, this method returns the DER-encoded form of the entire certificate
341 as a sequence of bytes, or :const:`None` if the peer did not provide a
342 certificate. This return value is independent of validation; if validation
343 was required (:const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`), it will have
Bill Janssen296a59d2007-09-16 22:06:00 +0000344 been validated, but if :const:`CERT_NONE` was used to establish the
345 connection, the certificate, if present, will not have been validated.
Bill Janssen98d19da2007-09-10 21:51:02 +0000346
347.. method:: SSLSocket.cipher()
348
Georg Brandla50d20a2009-09-16 15:57:46 +0000349 Returns a three-value tuple containing the name of the cipher being used, the
350 version of the SSL protocol that defines its use, and the number of secret
351 bits being used. If no connection has been established, returns ``None``.
Bill Janssen98d19da2007-09-10 21:51:02 +0000352
Bill Janssen934b16d2008-06-28 22:19:33 +0000353.. method:: SSLSocket.do_handshake()
354
Georg Brandla50d20a2009-09-16 15:57:46 +0000355 Perform a TLS/SSL handshake. If this is used with a non-blocking socket, it
356 may raise :exc:`SSLError` with an ``arg[0]`` of :const:`SSL_ERROR_WANT_READ`
357 or :const:`SSL_ERROR_WANT_WRITE`, in which case it must be called again until
358 it completes successfully. For example, to simulate the behavior of a
359 blocking socket, one might write::
Bill Janssen934b16d2008-06-28 22:19:33 +0000360
361 while True:
362 try:
363 s.do_handshake()
364 break
365 except ssl.SSLError, err:
366 if err.args[0] == ssl.SSL_ERROR_WANT_READ:
367 select.select([s], [], [])
368 elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE:
369 select.select([], [s], [])
370 else:
371 raise
Bill Janssen98d19da2007-09-10 21:51:02 +0000372
Bill Janssen5bfbd762008-08-12 17:09:57 +0000373.. method:: SSLSocket.unwrap()
374
Georg Brandla50d20a2009-09-16 15:57:46 +0000375 Performs the SSL shutdown handshake, which removes the TLS layer from the
376 underlying socket, and returns the underlying socket object. This can be
377 used to go from encrypted operation over a connection to unencrypted. The
378 socket instance returned should always be used for further communication with
379 the other side of the connection, rather than the original socket instance
380 (which may not function properly after the unwrap).
Bill Janssen5bfbd762008-08-12 17:09:57 +0000381
Bill Janssen98d19da2007-09-10 21:51:02 +0000382.. index:: single: certificates
383
384.. index:: single: X509 certificate
385
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000386.. _ssl-certificates:
387
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000388Certificates
389------------
390
Georg Brandla50d20a2009-09-16 15:57:46 +0000391Certificates in general are part of a public-key / private-key system. In this
392system, each *principal*, (which may be a machine, or a person, or an
393organization) is assigned a unique two-part encryption key. One part of the key
394is public, and is called the *public key*; the other part is kept secret, and is
395called the *private key*. The two parts are related, in that if you encrypt a
396message with one of the parts, you can decrypt it with the other part, and
397**only** with the other part.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000398
Georg Brandla50d20a2009-09-16 15:57:46 +0000399A certificate contains information about two principals. It contains the name
400of a *subject*, and the subject's public key. It also contains a statement by a
401second principal, the *issuer*, that the subject is who he claims to be, and
402that this is indeed the subject's public key. The issuer's statement is signed
403with the issuer's private key, which only the issuer knows. However, anyone can
404verify the issuer's statement by finding the issuer's public key, decrypting the
405statement with it, and comparing it to the other information in the certificate.
406The certificate also contains information about the time period over which it is
407valid. This is expressed as two fields, called "notBefore" and "notAfter".
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000408
Georg Brandla50d20a2009-09-16 15:57:46 +0000409In the Python use of certificates, a client or server can use a certificate to
410prove who they are. The other side of a network connection can also be required
411to produce a certificate, and that certificate can be validated to the
412satisfaction of the client or server that requires such validation. The
413connection attempt can be set to raise an exception if the validation fails.
414Validation is done automatically, by the underlying OpenSSL framework; the
415application need not concern itself with its mechanics. But the application
416does usually need to provide sets of certificates to allow this process to take
417place.
Bill Janssen426ea0a2007-08-29 22:35:05 +0000418
Georg Brandla50d20a2009-09-16 15:57:46 +0000419Python uses files to contain certificates. They should be formatted as "PEM"
420(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
421and a footer line::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000422
423 -----BEGIN CERTIFICATE-----
424 ... (certificate in base64 PEM encoding) ...
425 -----END CERTIFICATE-----
426
Georg Brandla50d20a2009-09-16 15:57:46 +0000427The Python files which contain certificates can contain a sequence of
428certificates, sometimes called a *certificate chain*. This chain should start
429with the specific certificate for the principal who "is" the client or server,
430and then the certificate for the issuer of that certificate, and then the
431certificate for the issuer of *that* certificate, and so on up the chain till
432you get to a certificate which is *self-signed*, that is, a certificate which
433has the same subject and issuer, sometimes called a *root certificate*. The
434certificates should just be concatenated together in the certificate file. For
435example, suppose we had a three certificate chain, from our server certificate
436to the certificate of the certification authority that signed our server
437certificate, to the root certificate of the agency which issued the
438certification authority's certificate::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000439
440 -----BEGIN CERTIFICATE-----
441 ... (certificate for your server)...
442 -----END CERTIFICATE-----
443 -----BEGIN CERTIFICATE-----
444 ... (the certificate for the CA)...
445 -----END CERTIFICATE-----
446 -----BEGIN CERTIFICATE-----
447 ... (the root certificate for the CA's issuer)...
448 -----END CERTIFICATE-----
449
450If you are going to require validation of the other side of the connection's
451certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandla50d20a2009-09-16 15:57:46 +0000452chains for each issuer you are willing to trust. Again, this file just contains
453these chains concatenated together. For validation, Python will use the first
454chain it finds in the file which matches.
Bill Janssen934b16d2008-06-28 22:19:33 +0000455
Bill Janssen98d19da2007-09-10 21:51:02 +0000456Some "standard" root certificates are available from various certification
Georg Brandla50d20a2009-09-16 15:57:46 +0000457authorities: `CACert.org <http://www.cacert.org/index.php?id=3>`_, `Thawte
458<http://www.thawte.com/roots/>`_, `Verisign
459<http://www.verisign.com/support/roots.html>`_, `Positive SSL
460<http://www.PositiveSSL.com/ssl-certificate-support/cert_installation/UTN-USERFirst-Hardware.crt>`_
461(used by python.org), `Equifax and GeoTrust
462<http://www.geotrust.com/resources/root_certificates/index.asp>`_.
Bill Janssen98d19da2007-09-10 21:51:02 +0000463
Georg Brandla50d20a2009-09-16 15:57:46 +0000464In general, if you are using SSL3 or TLS1, you don't need to put the full chain
465in your "CA certs" file; you only need the root certificates, and the remote
466peer is supposed to furnish the other certificates necessary to chain from its
467certificate to a root certificate. See :rfc:`4158` for more discussion of the
468way in which certification chains can be built.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000469
Georg Brandla50d20a2009-09-16 15:57:46 +0000470If you are going to create a server that provides SSL-encrypted connection
471services, you will need to acquire a certificate for that service. There are
472many ways of acquiring appropriate certificates, such as buying one from a
473certification authority. Another common practice is to generate a self-signed
474certificate. The simplest way to do this is with the OpenSSL package, using
475something like the following::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000476
Bill Janssen98d19da2007-09-10 21:51:02 +0000477 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
478 Generating a 1024 bit RSA private key
479 .......++++++
480 .............................++++++
481 writing new private key to 'cert.pem'
482 -----
483 You are about to be asked to enter information that will be incorporated
484 into your certificate request.
485 What you are about to enter is what is called a Distinguished Name or a DN.
486 There are quite a few fields but you can leave some blank
487 For some fields there will be a default value,
488 If you enter '.', the field will be left blank.
489 -----
490 Country Name (2 letter code) [AU]:US
491 State or Province Name (full name) [Some-State]:MyState
492 Locality Name (eg, city) []:Some City
493 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
494 Organizational Unit Name (eg, section) []:My Group
495 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
496 Email Address []:ops@myserver.mygroup.myorganization.com
497 %
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000498
Georg Brandla50d20a2009-09-16 15:57:46 +0000499The disadvantage of a self-signed certificate is that it is its own root
500certificate, and no one else will have it in their cache of known (and trusted)
501root certificates.
Bill Janssen426ea0a2007-08-29 22:35:05 +0000502
503
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000504Examples
505--------
506
Bill Janssen426ea0a2007-08-29 22:35:05 +0000507Testing for SSL support
508^^^^^^^^^^^^^^^^^^^^^^^
509
Georg Brandla50d20a2009-09-16 15:57:46 +0000510To test for the presence of SSL support in a Python installation, user code
511should use the following idiom::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000512
513 try:
Georg Brandl28046022011-02-25 11:01:04 +0000514 import ssl
Bill Janssen426ea0a2007-08-29 22:35:05 +0000515 except ImportError:
Georg Brandl28046022011-02-25 11:01:04 +0000516 pass
Bill Janssen426ea0a2007-08-29 22:35:05 +0000517 else:
Georg Brandl28046022011-02-25 11:01:04 +0000518 ... # do something that requires SSL support
Bill Janssen426ea0a2007-08-29 22:35:05 +0000519
520Client-side operation
521^^^^^^^^^^^^^^^^^^^^^
522
Georg Brandla50d20a2009-09-16 15:57:46 +0000523This example connects to an SSL server, prints the server's address and
524certificate, sends some bytes, and reads part of the response::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000525
Benjamin Petersona7b55a32009-02-20 03:31:23 +0000526 import socket, ssl, pprint
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000527
528 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Bill Janssen98d19da2007-09-10 21:51:02 +0000529
530 # require a certificate from the server
531 ssl_sock = ssl.wrap_socket(s,
532 ca_certs="/etc/ca_certs_file",
533 cert_reqs=ssl.CERT_REQUIRED)
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000534
535 ssl_sock.connect(('www.verisign.com', 443))
536
537 print repr(ssl_sock.getpeername())
Bill Janssen98d19da2007-09-10 21:51:02 +0000538 print ssl_sock.cipher()
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000539 print pprint.pformat(ssl_sock.getpeercert())
540
541 # Set a simple HTTP request -- use httplib in actual code.
542 ssl_sock.write("""GET / HTTP/1.0\r
543 Host: www.verisign.com\r\n\r\n""")
544
545 # Read a chunk of data. Will not necessarily
546 # read all the data returned by the server.
547 data = ssl_sock.read()
548
Bill Janssen98d19da2007-09-10 21:51:02 +0000549 # note that closing the SSLSocket will also close the underlying socket
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000550 ssl_sock.close()
551
Georg Brandla50d20a2009-09-16 15:57:46 +0000552As of September 6, 2007, the certificate printed by this program looked like
553this::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000554
Bill Janssen98d19da2007-09-10 21:51:02 +0000555 {'notAfter': 'May 8 23:59:59 2009 GMT',
556 'subject': ((('serialNumber', u'2497886'),),
557 (('1.3.6.1.4.1.311.60.2.1.3', u'US'),),
558 (('1.3.6.1.4.1.311.60.2.1.2', u'Delaware'),),
559 (('countryName', u'US'),),
560 (('postalCode', u'94043'),),
561 (('stateOrProvinceName', u'California'),),
562 (('localityName', u'Mountain View'),),
563 (('streetAddress', u'487 East Middlefield Road'),),
564 (('organizationName', u'VeriSign, Inc.'),),
565 (('organizationalUnitName',
566 u'Production Security Services'),),
567 (('organizationalUnitName',
568 u'Terms of use at www.verisign.com/rpa (c)06'),),
569 (('commonName', u'www.verisign.com'),))}
570
571which is a fairly poorly-formed ``subject`` field.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000572
Bill Janssen426ea0a2007-08-29 22:35:05 +0000573Server-side operation
574^^^^^^^^^^^^^^^^^^^^^
575
Georg Brandla50d20a2009-09-16 15:57:46 +0000576For server operation, typically you'd need to have a server certificate, and
577private key, each in a file. You'd open a socket, bind it to a port, call
578:meth:`listen` on it, then start waiting for clients to connect::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000579
Benjamin Petersona7b55a32009-02-20 03:31:23 +0000580 import socket, ssl
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000581
582 bindsocket = socket.socket()
583 bindsocket.bind(('myaddr.mydomain.com', 10023))
584 bindsocket.listen(5)
585
Georg Brandla50d20a2009-09-16 15:57:46 +0000586When one did, you'd call :meth:`accept` on the socket to get the new socket from
587the other end, and use :func:`wrap_socket` to create a server-side SSL context
588for it::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000589
590 while True:
Antoine Pitrou9e7d6e52011-01-02 22:39:10 +0000591 newsocket, fromaddr = bindsocket.accept()
592 connstream = ssl.wrap_socket(newsocket,
593 server_side=True,
594 certfile="mycertfile",
595 keyfile="mykeyfile",
596 ssl_version=ssl.PROTOCOL_TLSv1)
597 try:
598 deal_with_client(connstream)
599 finally:
600 connstream.shutdown(socket.SHUT_RDWR)
601 connstream.close()
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000602
Georg Brandla50d20a2009-09-16 15:57:46 +0000603Then you'd read data from the ``connstream`` and do something with it till you
604are finished with the client (or the client is finished with you)::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000605
606 def deal_with_client(connstream):
Georg Brandl28046022011-02-25 11:01:04 +0000607 data = connstream.read()
608 # null data means the client is finished with us
609 while data:
610 if not do_something(connstream, data):
611 # we'll assume do_something returns False
612 # when we're finished with client
613 break
614 data = connstream.read()
615 # finished with client
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000616
617And go back to listening for new client connections.
618
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000619
Bill Janssen98d19da2007-09-10 21:51:02 +0000620.. seealso::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000621
Bill Janssen98d19da2007-09-10 21:51:02 +0000622 Class :class:`socket.socket`
623 Documentation of underlying :mod:`socket` class
Bill Janssen426ea0a2007-08-29 22:35:05 +0000624
Antoine Pitrou5472c1c2011-10-07 17:03:01 +0200625 `TLS (Transport Layer Security) and SSL (Secure Socket Layer) <http://www3.rad.com/networks/applications/secure/tls.htm>`_
626 Debby Koren
Bill Janssen426ea0a2007-08-29 22:35:05 +0000627
Bill Janssen98d19da2007-09-10 21:51:02 +0000628 `RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management <http://www.ietf.org/rfc/rfc1422>`_
629 Steve Kent
Bill Janssen426ea0a2007-08-29 22:35:05 +0000630
Bill Janssen98d19da2007-09-10 21:51:02 +0000631 `RFC 1750: Randomness Recommendations for Security <http://www.ietf.org/rfc/rfc1750>`_
632 D. Eastlake et. al.
Bill Janssenffe576d2007-09-05 00:46:27 +0000633
Bill Janssen98d19da2007-09-10 21:51:02 +0000634 `RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile <http://www.ietf.org/rfc/rfc3280>`_
635 Housley et. al.