blob: 5c76df9f2711f38ef25376c770fba1529e136e83 [file] [log] [blame]
Bill Janssen426ea0a2007-08-29 22:35:05 +00001:mod:`ssl` --- SSL wrapper for socket objects
Georg Brandl5be70d42009-10-27 14:50:20 +00002=============================================
Guido van Rossum8ee23bb2007-08-27 19:11:11 +00003
4.. module:: ssl
Bill Janssen426ea0a2007-08-29 22:35:05 +00005 :synopsis: SSL wrapper for socket objects
6
7.. moduleauthor:: Bill Janssen <bill.janssen@gmail.com>
Guido van Rossum8ee23bb2007-08-27 19:11:11 +00008
9.. versionadded:: 2.6
10
Bill Janssen426ea0a2007-08-29 22:35:05 +000011.. sectionauthor:: Bill Janssen <bill.janssen@gmail.com>
12
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000013
Bill Janssen98d19da2007-09-10 21:51:02 +000014.. index:: single: OpenSSL; (use in module ssl)
15
16.. index:: TLS, SSL, Transport Layer Security, Secure Sockets Layer
17
Georg Brandl5be70d42009-10-27 14:50:20 +000018This module provides access to Transport Layer Security (often known as "Secure
19Sockets Layer") encryption and peer authentication facilities for network
20sockets, both client-side and server-side. This module uses the OpenSSL
21library. It is available on all modern Unix systems, Windows, Mac OS X, and
22probably additional platforms, as long as OpenSSL is installed on that platform.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000023
24.. note::
25
Georg Brandl5be70d42009-10-27 14:50:20 +000026 Some behavior may be platform dependent, since calls are made to the
27 operating system socket APIs. The installed version of OpenSSL may also
28 cause variations in behavior.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000029
Georg Brandl5be70d42009-10-27 14:50:20 +000030This section documents the objects and functions in the ``ssl`` module; for more
31general information about TLS, SSL, and certificates, the reader is referred to
32the documents in the "See Also" section at the bottom.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000033
Georg Brandl5be70d42009-10-27 14:50:20 +000034This module provides a class, :class:`ssl.SSLSocket`, which is derived from the
35:class:`socket.socket` type, and provides a socket-like wrapper that also
36encrypts and decrypts the data going over the socket with SSL. It supports
37additional :meth:`read` and :meth:`write` methods, along with a method,
38:meth:`getpeercert`, to retrieve the certificate of the other side of the
39connection, and a method, :meth:`cipher`, to retrieve the cipher being used for
40the secure connection.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000041
Bill Janssen93bf9ce2007-09-11 02:42:07 +000042Functions, Constants, and Exceptions
43------------------------------------
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000044
Bill Janssen93bf9ce2007-09-11 02:42:07 +000045.. exception:: SSLError
46
Georg Brandl734373c2009-01-03 21:55:17 +000047 Raised to signal an error from the underlying SSL implementation. This
Georg Brandl5be70d42009-10-27 14:50:20 +000048 signifies some problem in the higher-level encryption and authentication
49 layer that's superimposed on the underlying network connection. This error
50 is a subtype of :exc:`socket.error`, which in turn is a subtype of
51 :exc:`IOError`.
Bill Janssen93bf9ce2007-09-11 02:42:07 +000052
Bill Janssen934b16d2008-06-28 22:19:33 +000053.. 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)
Bill Janssen98d19da2007-09-10 21:51:02 +000054
Georg Brandl5be70d42009-10-27 14:50:20 +000055 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance
56 of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, which wraps
57 the underlying socket in an SSL context. For client-side sockets, the
58 context construction is lazy; if the underlying socket isn't connected yet,
59 the context construction will be performed after :meth:`connect` is called on
60 the socket. For server-side sockets, if the socket has no remote peer, it is
61 assumed to be a listening socket, and the server-side SSL wrapping is
62 automatically performed on client connections accepted via the :meth:`accept`
63 method. :func:`wrap_socket` may raise :exc:`SSLError`.
Bill Janssen98d19da2007-09-10 21:51:02 +000064
Georg Brandl5be70d42009-10-27 14:50:20 +000065 The ``keyfile`` and ``certfile`` parameters specify optional files which
66 contain a certificate to be used to identify the local side of the
67 connection. See the discussion of :ref:`ssl-certificates` for more
68 information on how the certificate is stored in the ``certfile``.
Bill Janssen98d19da2007-09-10 21:51:02 +000069
Georg Brandl5be70d42009-10-27 14:50:20 +000070 Often the private key is stored in the same file as the certificate; in this
71 case, only the ``certfile`` parameter need be passed. If the private key is
72 stored in a separate file, both parameters must be used. If the private key
73 is stored in the ``certfile``, it should come before the first certificate in
74 the certificate chain::
Bill Janssen98d19da2007-09-10 21:51:02 +000075
76 -----BEGIN RSA PRIVATE KEY-----
77 ... (private key in base64 encoding) ...
78 -----END RSA PRIVATE KEY-----
79 -----BEGIN CERTIFICATE-----
80 ... (certificate in base64 PEM encoding) ...
81 -----END CERTIFICATE-----
82
Georg Brandl5be70d42009-10-27 14:50:20 +000083 The parameter ``server_side`` is a boolean which identifies whether
84 server-side or client-side behavior is desired from this socket.
Bill Janssen98d19da2007-09-10 21:51:02 +000085
Georg Brandl5be70d42009-10-27 14:50:20 +000086 The parameter ``cert_reqs`` specifies whether a certificate is required from
87 the other side of the connection, and whether it will be validated if
88 provided. It must be one of the three values :const:`CERT_NONE`
89 (certificates ignored), :const:`CERT_OPTIONAL` (not required, but validated
90 if provided), or :const:`CERT_REQUIRED` (required and validated). If the
91 value of this parameter is not :const:`CERT_NONE`, then the ``ca_certs``
92 parameter must point to a file of CA certificates.
Bill Janssen98d19da2007-09-10 21:51:02 +000093
Georg Brandl5be70d42009-10-27 14:50:20 +000094 The ``ca_certs`` file contains a set of concatenated "certification
95 authority" certificates, which are used to validate certificates passed from
96 the other end of the connection. See the discussion of
97 :ref:`ssl-certificates` for more information about how to arrange the
98 certificates in this file.
Bill Janssen98d19da2007-09-10 21:51:02 +000099
Georg Brandl5be70d42009-10-27 14:50:20 +0000100 The parameter ``ssl_version`` specifies which version of the SSL protocol to
101 use. Typically, the server chooses a particular protocol version, and the
102 client must adapt to the server's choice. Most of the versions are not
103 interoperable with the other versions. If not specified, for client-side
104 operation, the default SSL version is SSLv3; for server-side operation,
105 SSLv23. These version selections provide the most compatibility with other
106 versions.
Bill Janssen98d19da2007-09-10 21:51:02 +0000107
Georg Brandl5be70d42009-10-27 14:50:20 +0000108 Here's a table showing which versions in a client (down the side) can connect
109 to which versions in a server (along the top):
Bill Janssen98d19da2007-09-10 21:51:02 +0000110
111 .. table::
112
113 ======================== ========= ========= ========== =========
114 *client* / **server** **SSLv2** **SSLv3** **SSLv23** **TLSv1**
Georg Brandl2b92f6b2007-12-06 01:52:24 +0000115 ------------------------ --------- --------- ---------- ---------
Bill Janssen98d19da2007-09-10 21:51:02 +0000116 *SSLv2* yes no yes* no
117 *SSLv3* yes yes yes no
118 *SSLv23* yes no yes no
119 *TLSv1* no no yes yes
120 ======================== ========= ========= ========== =========
121
Georg Brandl5be70d42009-10-27 14:50:20 +0000122 In some older versions of OpenSSL (for instance, 0.9.7l on OS X 10.4), an
123 SSLv2 client could not connect to an SSLv23 server.
Bill Janssen98d19da2007-09-10 21:51:02 +0000124
Bill Janssen934b16d2008-06-28 22:19:33 +0000125 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
126 handshake automatically after doing a :meth:`socket.connect`, or whether the
Georg Brandl5be70d42009-10-27 14:50:20 +0000127 application program will call it explicitly, by invoking the
128 :meth:`SSLSocket.do_handshake` method. Calling
129 :meth:`SSLSocket.do_handshake` explicitly gives the program control over the
130 blocking behavior of the socket I/O involved in the handshake.
Bill Janssen934b16d2008-06-28 22:19:33 +0000131
Georg Brandl5be70d42009-10-27 14:50:20 +0000132 The parameter ``suppress_ragged_eofs`` specifies how the
133 :meth:`SSLSocket.read` method should signal unexpected EOF from the other end
134 of the connection. If specified as :const:`True` (the default), it returns a
135 normal EOF in response to unexpected EOF errors raised from the underlying
136 socket; if :const:`False`, it will raise the exceptions back to the caller.
Bill Janssen934b16d2008-06-28 22:19:33 +0000137
Bill Janssen98d19da2007-09-10 21:51:02 +0000138.. function:: RAND_status()
139
Georg Brandl5be70d42009-10-27 14:50:20 +0000140 Returns True if the SSL pseudo-random number generator has been seeded with
141 'enough' randomness, and False otherwise. You can use :func:`ssl.RAND_egd`
142 and :func:`ssl.RAND_add` to increase the randomness of the pseudo-random
143 number generator.
Bill Janssen98d19da2007-09-10 21:51:02 +0000144
145.. function:: RAND_egd(path)
146
147 If you are running an entropy-gathering daemon (EGD) somewhere, and ``path``
Georg Brandl5be70d42009-10-27 14:50:20 +0000148 is the pathname of a socket connection open to it, this will read 256 bytes
149 of randomness from the socket, and add it to the SSL pseudo-random number
150 generator to increase the security of generated secret keys. This is
151 typically only necessary on systems without better sources of randomness.
Bill Janssen98d19da2007-09-10 21:51:02 +0000152
Georg Brandl5be70d42009-10-27 14:50:20 +0000153 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources
154 of entropy-gathering daemons.
Bill Janssen98d19da2007-09-10 21:51:02 +0000155
156.. function:: RAND_add(bytes, entropy)
157
Georg Brandl5be70d42009-10-27 14:50:20 +0000158 Mixes the given ``bytes`` into the SSL pseudo-random number generator. The
159 parameter ``entropy`` (a float) is a lower bound on the entropy contained in
160 string (so you can always use :const:`0.0`). See :rfc:`1750` for more
161 information on sources of entropy.
Bill Janssen98d19da2007-09-10 21:51:02 +0000162
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000163.. function:: cert_time_to_seconds(timestring)
164
Georg Brandl5be70d42009-10-27 14:50:20 +0000165 Returns a floating-point value containing a normal seconds-after-the-epoch
166 time value, given the time-string representing the "notBefore" or "notAfter"
167 date from a certificate.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000168
169 Here's an example::
170
171 >>> import ssl
172 >>> ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT")
173 1178694000.0
174 >>> import time
175 >>> time.ctime(ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT"))
176 'Wed May 9 00:00:00 2007'
Georg Brandl734373c2009-01-03 21:55:17 +0000177 >>>
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000178
Bill Janssen296a59d2007-09-16 22:06:00 +0000179.. function:: get_server_certificate (addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None)
180
Georg Brandl5be70d42009-10-27 14:50:20 +0000181 Given the address ``addr`` of an SSL-protected server, as a (*hostname*,
182 *port-number*) pair, fetches the server's certificate, and returns it as a
183 PEM-encoded string. If ``ssl_version`` is specified, uses that version of
184 the SSL protocol to attempt to connect to the server. If ``ca_certs`` is
185 specified, it should be a file containing a list of root certificates, the
186 same format as used for the same parameter in :func:`wrap_socket`. The call
187 will attempt to validate the server certificate against that set of root
Bill Janssen296a59d2007-09-16 22:06:00 +0000188 certificates, and will fail if the validation attempt fails.
189
190.. function:: DER_cert_to_PEM_cert (DER_cert_bytes)
191
192 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
193 string version of the same certificate.
194
195.. function:: PEM_cert_to_DER_cert (PEM_cert_string)
196
Georg Brandl5be70d42009-10-27 14:50:20 +0000197 Given a certificate as an ASCII PEM string, returns a DER-encoded sequence of
198 bytes for that same certificate.
Bill Janssen296a59d2007-09-16 22:06:00 +0000199
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000200.. data:: CERT_NONE
201
Georg Brandl5be70d42009-10-27 14:50:20 +0000202 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject` when no
203 certificates will be required or validated from the other side of the socket
204 connection.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000205
206.. data:: CERT_OPTIONAL
207
Georg Brandl5be70d42009-10-27 14:50:20 +0000208 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject` when no
209 certificates will be required from the other side of the socket connection,
210 but if they are provided, will be validated. Note that use of this setting
211 requires a valid certificate validation file also be passed as a value of the
212 ``ca_certs`` parameter.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000213
214.. data:: CERT_REQUIRED
215
Georg Brandl5be70d42009-10-27 14:50:20 +0000216 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject` when
217 certificates will be required from the other side of the socket connection.
218 Note that use of this setting requires a valid certificate validation file
219 also be passed as a value of the ``ca_certs`` parameter.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000220
221.. data:: PROTOCOL_SSLv2
222
223 Selects SSL version 2 as the channel encryption protocol.
224
Antoine Pitrouec0a3882010-05-16 14:17:51 +0000225 .. warning::
226
227 SSL version 2 is insecure. Its use is highly discouraged.
228
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000229.. data:: PROTOCOL_SSLv23
230
Georg Brandl5be70d42009-10-27 14:50:20 +0000231 Selects SSL version 2 or 3 as the channel encryption protocol. This is a
232 setting to use with servers for maximum compatibility with the other end of
233 an SSL connection, but it may cause the specific ciphers chosen for the
234 encryption to be of fairly low quality.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000235
236.. data:: PROTOCOL_SSLv3
237
Georg Brandl5be70d42009-10-27 14:50:20 +0000238 Selects SSL version 3 as the channel encryption protocol. For clients, this
239 is the maximally compatible SSL variant.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000240
241.. data:: PROTOCOL_TLSv1
242
Georg Brandl5be70d42009-10-27 14:50:20 +0000243 Selects TLS version 1 as the channel encryption protocol. This is the most
244 modern version, and probably the best choice for maximum protection, if both
245 sides can speak it.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000246
247
Bill Janssen98d19da2007-09-10 21:51:02 +0000248SSLSocket Objects
249-----------------
250
251.. method:: SSLSocket.read([nbytes=1024])
252
253 Reads up to ``nbytes`` bytes from the SSL-encrypted channel and returns them.
254
255.. method:: SSLSocket.write(data)
256
Georg Brandl5be70d42009-10-27 14:50:20 +0000257 Writes the ``data`` to the other side of the connection, using the SSL
258 channel to encrypt. Returns the number of bytes written.
Bill Janssen98d19da2007-09-10 21:51:02 +0000259
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000260.. method:: SSLSocket.getpeercert(binary_form=False)
Bill Janssen98d19da2007-09-10 21:51:02 +0000261
Georg Brandl5be70d42009-10-27 14:50:20 +0000262 If there is no certificate for the peer on the other end of the connection,
263 returns ``None``.
Bill Janssen98d19da2007-09-10 21:51:02 +0000264
Georg Brandl5be70d42009-10-27 14:50:20 +0000265 If the parameter ``binary_form`` is :const:`False`, and a certificate was
266 received from the peer, this method returns a :class:`dict` instance. If the
267 certificate was not validated, the dict is empty. If the certificate was
268 validated, it returns a dict with the keys ``subject`` (the principal for
269 which the certificate was issued), and ``notAfter`` (the time after which the
270 certificate should not be trusted). The certificate was already validated,
271 so the ``notBefore`` and ``issuer`` fields are not returned. If a
272 certificate contains an instance of the *Subject Alternative Name* extension
273 (see :rfc:`3280`), there will also be a ``subjectAltName`` key in the
274 dictionary.
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000275
276 The "subject" field is a tuple containing the sequence of relative
Georg Brandl5be70d42009-10-27 14:50:20 +0000277 distinguished names (RDNs) given in the certificate's data structure for the
278 principal, and each RDN is a sequence of name-value pairs::
Bill Janssen98d19da2007-09-10 21:51:02 +0000279
280 {'notAfter': 'Feb 16 16:54:50 2013 GMT',
281 'subject': ((('countryName', u'US'),),
282 (('stateOrProvinceName', u'Delaware'),),
283 (('localityName', u'Wilmington'),),
284 (('organizationName', u'Python Software Foundation'),),
285 (('organizationalUnitName', u'SSL'),),
286 (('commonName', u'somemachine.python.org'),))}
287
Georg Brandl5be70d42009-10-27 14:50:20 +0000288 If the ``binary_form`` parameter is :const:`True`, and a certificate was
289 provided, this method returns the DER-encoded form of the entire certificate
290 as a sequence of bytes, or :const:`None` if the peer did not provide a
291 certificate. This return value is independent of validation; if validation
292 was required (:const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`), it will have
Bill Janssen296a59d2007-09-16 22:06:00 +0000293 been validated, but if :const:`CERT_NONE` was used to establish the
294 connection, the certificate, if present, will not have been validated.
Bill Janssen98d19da2007-09-10 21:51:02 +0000295
296.. method:: SSLSocket.cipher()
297
Georg Brandl5be70d42009-10-27 14:50:20 +0000298 Returns a three-value tuple containing the name of the cipher being used, the
299 version of the SSL protocol that defines its use, and the number of secret
300 bits being used. If no connection has been established, returns ``None``.
Bill Janssen98d19da2007-09-10 21:51:02 +0000301
Bill Janssen934b16d2008-06-28 22:19:33 +0000302.. method:: SSLSocket.do_handshake()
303
Georg Brandl5be70d42009-10-27 14:50:20 +0000304 Perform a TLS/SSL handshake. If this is used with a non-blocking socket, it
305 may raise :exc:`SSLError` with an ``arg[0]`` of :const:`SSL_ERROR_WANT_READ`
306 or :const:`SSL_ERROR_WANT_WRITE`, in which case it must be called again until
307 it completes successfully. For example, to simulate the behavior of a
308 blocking socket, one might write::
Bill Janssen934b16d2008-06-28 22:19:33 +0000309
310 while True:
311 try:
312 s.do_handshake()
313 break
314 except ssl.SSLError, err:
315 if err.args[0] == ssl.SSL_ERROR_WANT_READ:
316 select.select([s], [], [])
317 elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE:
318 select.select([], [s], [])
319 else:
320 raise
Bill Janssen98d19da2007-09-10 21:51:02 +0000321
Bill Janssen5bfbd762008-08-12 17:09:57 +0000322.. method:: SSLSocket.unwrap()
323
Georg Brandl5be70d42009-10-27 14:50:20 +0000324 Performs the SSL shutdown handshake, which removes the TLS layer from the
325 underlying socket, and returns the underlying socket object. This can be
326 used to go from encrypted operation over a connection to unencrypted. The
327 socket instance returned should always be used for further communication with
328 the other side of the connection, rather than the original socket instance
329 (which may not function properly after the unwrap).
Bill Janssen5bfbd762008-08-12 17:09:57 +0000330
Bill Janssen98d19da2007-09-10 21:51:02 +0000331.. index:: single: certificates
332
333.. index:: single: X509 certificate
334
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000335.. _ssl-certificates:
336
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000337Certificates
338------------
339
Georg Brandl5be70d42009-10-27 14:50:20 +0000340Certificates in general are part of a public-key / private-key system. In this
341system, each *principal*, (which may be a machine, or a person, or an
342organization) is assigned a unique two-part encryption key. One part of the key
343is public, and is called the *public key*; the other part is kept secret, and is
344called the *private key*. The two parts are related, in that if you encrypt a
345message with one of the parts, you can decrypt it with the other part, and
346**only** with the other part.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000347
Georg Brandl5be70d42009-10-27 14:50:20 +0000348A certificate contains information about two principals. It contains the name
349of a *subject*, and the subject's public key. It also contains a statement by a
350second principal, the *issuer*, that the subject is who he claims to be, and
351that this is indeed the subject's public key. The issuer's statement is signed
352with the issuer's private key, which only the issuer knows. However, anyone can
353verify the issuer's statement by finding the issuer's public key, decrypting the
354statement with it, and comparing it to the other information in the certificate.
355The certificate also contains information about the time period over which it is
356valid. This is expressed as two fields, called "notBefore" and "notAfter".
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000357
Georg Brandl5be70d42009-10-27 14:50:20 +0000358In the Python use of certificates, a client or server can use a certificate to
359prove who they are. The other side of a network connection can also be required
360to produce a certificate, and that certificate can be validated to the
361satisfaction of the client or server that requires such validation. The
362connection attempt can be set to raise an exception if the validation fails.
363Validation is done automatically, by the underlying OpenSSL framework; the
364application need not concern itself with its mechanics. But the application
365does usually need to provide sets of certificates to allow this process to take
366place.
Bill Janssen426ea0a2007-08-29 22:35:05 +0000367
Georg Brandl5be70d42009-10-27 14:50:20 +0000368Python uses files to contain certificates. They should be formatted as "PEM"
369(see :rfc:`1422`), which is a base-64 encoded form wrapped with a header line
370and a footer line::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000371
372 -----BEGIN CERTIFICATE-----
373 ... (certificate in base64 PEM encoding) ...
374 -----END CERTIFICATE-----
375
Georg Brandl5be70d42009-10-27 14:50:20 +0000376The Python files which contain certificates can contain a sequence of
377certificates, sometimes called a *certificate chain*. This chain should start
378with the specific certificate for the principal who "is" the client or server,
379and then the certificate for the issuer of that certificate, and then the
380certificate for the issuer of *that* certificate, and so on up the chain till
381you get to a certificate which is *self-signed*, that is, a certificate which
382has the same subject and issuer, sometimes called a *root certificate*. The
383certificates should just be concatenated together in the certificate file. For
384example, suppose we had a three certificate chain, from our server certificate
385to the certificate of the certification authority that signed our server
386certificate, to the root certificate of the agency which issued the
387certification authority's certificate::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000388
389 -----BEGIN CERTIFICATE-----
390 ... (certificate for your server)...
391 -----END CERTIFICATE-----
392 -----BEGIN CERTIFICATE-----
393 ... (the certificate for the CA)...
394 -----END CERTIFICATE-----
395 -----BEGIN CERTIFICATE-----
396 ... (the root certificate for the CA's issuer)...
397 -----END CERTIFICATE-----
398
399If you are going to require validation of the other side of the connection's
400certificate, you need to provide a "CA certs" file, filled with the certificate
Georg Brandl5be70d42009-10-27 14:50:20 +0000401chains for each issuer you are willing to trust. Again, this file just contains
402these chains concatenated together. For validation, Python will use the first
403chain it finds in the file which matches.
Bill Janssen934b16d2008-06-28 22:19:33 +0000404
Bill Janssen98d19da2007-09-10 21:51:02 +0000405Some "standard" root certificates are available from various certification
Georg Brandl5be70d42009-10-27 14:50:20 +0000406authorities: `CACert.org <http://www.cacert.org/index.php?id=3>`_, `Thawte
407<http://www.thawte.com/roots/>`_, `Verisign
408<http://www.verisign.com/support/roots.html>`_, `Positive SSL
409<http://www.PositiveSSL.com/ssl-certificate-support/cert_installation/UTN-USERFirst-Hardware.crt>`_
410(used by python.org), `Equifax and GeoTrust
411<http://www.geotrust.com/resources/root_certificates/index.asp>`_.
Bill Janssen98d19da2007-09-10 21:51:02 +0000412
Georg Brandl5be70d42009-10-27 14:50:20 +0000413In general, if you are using SSL3 or TLS1, you don't need to put the full chain
414in your "CA certs" file; you only need the root certificates, and the remote
415peer is supposed to furnish the other certificates necessary to chain from its
416certificate to a root certificate. See :rfc:`4158` for more discussion of the
417way in which certification chains can be built.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000418
Georg Brandl5be70d42009-10-27 14:50:20 +0000419If you are going to create a server that provides SSL-encrypted connection
420services, you will need to acquire a certificate for that service. There are
421many ways of acquiring appropriate certificates, such as buying one from a
422certification authority. Another common practice is to generate a self-signed
423certificate. The simplest way to do this is with the OpenSSL package, using
424something like the following::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000425
Bill Janssen98d19da2007-09-10 21:51:02 +0000426 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
427 Generating a 1024 bit RSA private key
428 .......++++++
429 .............................++++++
430 writing new private key to 'cert.pem'
431 -----
432 You are about to be asked to enter information that will be incorporated
433 into your certificate request.
434 What you are about to enter is what is called a Distinguished Name or a DN.
435 There are quite a few fields but you can leave some blank
436 For some fields there will be a default value,
437 If you enter '.', the field will be left blank.
438 -----
439 Country Name (2 letter code) [AU]:US
440 State or Province Name (full name) [Some-State]:MyState
441 Locality Name (eg, city) []:Some City
442 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
443 Organizational Unit Name (eg, section) []:My Group
444 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
445 Email Address []:ops@myserver.mygroup.myorganization.com
446 %
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000447
Georg Brandl5be70d42009-10-27 14:50:20 +0000448The disadvantage of a self-signed certificate is that it is its own root
449certificate, and no one else will have it in their cache of known (and trusted)
450root certificates.
Bill Janssen426ea0a2007-08-29 22:35:05 +0000451
452
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000453Examples
454--------
455
Bill Janssen426ea0a2007-08-29 22:35:05 +0000456Testing for SSL support
457^^^^^^^^^^^^^^^^^^^^^^^
458
Georg Brandl5be70d42009-10-27 14:50:20 +0000459To test for the presence of SSL support in a Python installation, user code
460should use the following idiom::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000461
462 try:
463 import ssl
464 except ImportError:
465 pass
466 else:
467 [ do something that requires SSL support ]
468
469Client-side operation
470^^^^^^^^^^^^^^^^^^^^^
471
Georg Brandl5be70d42009-10-27 14:50:20 +0000472This example connects to an SSL server, prints the server's address and
473certificate, sends some bytes, and reads part of the response::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000474
475 import socket, ssl, pprint
476
477 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Bill Janssen98d19da2007-09-10 21:51:02 +0000478
479 # require a certificate from the server
480 ssl_sock = ssl.wrap_socket(s,
481 ca_certs="/etc/ca_certs_file",
482 cert_reqs=ssl.CERT_REQUIRED)
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000483
484 ssl_sock.connect(('www.verisign.com', 443))
485
486 print repr(ssl_sock.getpeername())
Bill Janssen98d19da2007-09-10 21:51:02 +0000487 print ssl_sock.cipher()
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000488 print pprint.pformat(ssl_sock.getpeercert())
489
490 # Set a simple HTTP request -- use httplib in actual code.
491 ssl_sock.write("""GET / HTTP/1.0\r
492 Host: www.verisign.com\r\n\r\n""")
493
494 # Read a chunk of data. Will not necessarily
495 # read all the data returned by the server.
496 data = ssl_sock.read()
497
Bill Janssen98d19da2007-09-10 21:51:02 +0000498 # note that closing the SSLSocket will also close the underlying socket
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000499 ssl_sock.close()
500
Georg Brandl5be70d42009-10-27 14:50:20 +0000501As of September 6, 2007, the certificate printed by this program looked like
502this::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000503
Bill Janssen98d19da2007-09-10 21:51:02 +0000504 {'notAfter': 'May 8 23:59:59 2009 GMT',
505 'subject': ((('serialNumber', u'2497886'),),
506 (('1.3.6.1.4.1.311.60.2.1.3', u'US'),),
507 (('1.3.6.1.4.1.311.60.2.1.2', u'Delaware'),),
508 (('countryName', u'US'),),
509 (('postalCode', u'94043'),),
510 (('stateOrProvinceName', u'California'),),
511 (('localityName', u'Mountain View'),),
512 (('streetAddress', u'487 East Middlefield Road'),),
513 (('organizationName', u'VeriSign, Inc.'),),
514 (('organizationalUnitName',
515 u'Production Security Services'),),
516 (('organizationalUnitName',
517 u'Terms of use at www.verisign.com/rpa (c)06'),),
518 (('commonName', u'www.verisign.com'),))}
519
520which is a fairly poorly-formed ``subject`` field.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000521
Bill Janssen426ea0a2007-08-29 22:35:05 +0000522Server-side operation
523^^^^^^^^^^^^^^^^^^^^^
524
Georg Brandl5be70d42009-10-27 14:50:20 +0000525For server operation, typically you'd need to have a server certificate, and
526private key, each in a file. You'd open a socket, bind it to a port, call
527:meth:`listen` on it, then start waiting for clients to connect::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000528
529 import socket, ssl
530
531 bindsocket = socket.socket()
532 bindsocket.bind(('myaddr.mydomain.com', 10023))
533 bindsocket.listen(5)
534
Georg Brandl5be70d42009-10-27 14:50:20 +0000535When one did, you'd call :meth:`accept` on the socket to get the new socket from
536the other end, and use :func:`wrap_socket` to create a server-side SSL context
537for it::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000538
539 while True:
540 newsocket, fromaddr = bindsocket.accept()
Bill Janssen98d19da2007-09-10 21:51:02 +0000541 connstream = ssl.wrap_socket(newsocket,
542 server_side=True,
543 certfile="mycertfile",
544 keyfile="mykeyfile",
Andrew M. Kuchlingaea8d2e2008-04-18 02:40:47 +0000545 ssl_version=ssl.PROTOCOL_TLSv1)
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000546 deal_with_client(connstream)
547
Georg Brandl5be70d42009-10-27 14:50:20 +0000548Then you'd read data from the ``connstream`` and do something with it till you
549are finished with the client (or the client is finished with you)::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000550
551 def deal_with_client(connstream):
552
553 data = connstream.read()
554 # null data means the client is finished with us
555 while data:
556 if not do_something(connstream, data):
Bill Janssen98d19da2007-09-10 21:51:02 +0000557 # we'll assume do_something returns False
558 # when we're finished with client
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000559 break
560 data = connstream.read()
561 # finished with client
562 connstream.close()
563
564And go back to listening for new client connections.
565
Georg Brandl734373c2009-01-03 21:55:17 +0000566
Bill Janssen98d19da2007-09-10 21:51:02 +0000567.. seealso::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000568
Bill Janssen98d19da2007-09-10 21:51:02 +0000569 Class :class:`socket.socket`
570 Documentation of underlying :mod:`socket` class
Bill Janssen426ea0a2007-08-29 22:35:05 +0000571
Bill Janssen98d19da2007-09-10 21:51:02 +0000572 `Introducing SSL and Certificates using OpenSSL <http://old.pseudonym.org/ssl/wwwj-index.html>`_
573 Frederick J. Hirsch
Bill Janssen426ea0a2007-08-29 22:35:05 +0000574
Bill Janssen98d19da2007-09-10 21:51:02 +0000575 `RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management <http://www.ietf.org/rfc/rfc1422>`_
576 Steve Kent
Bill Janssen426ea0a2007-08-29 22:35:05 +0000577
Bill Janssen98d19da2007-09-10 21:51:02 +0000578 `RFC 1750: Randomness Recommendations for Security <http://www.ietf.org/rfc/rfc1750>`_
579 D. Eastlake et. al.
Bill Janssenffe576d2007-09-05 00:46:27 +0000580
Bill Janssen98d19da2007-09-10 21:51:02 +0000581 `RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile <http://www.ietf.org/rfc/rfc3280>`_
582 Housley et. al.