blob: 8e1c6b00912eed84f0deb481ea82531a7b0675fa [file] [log] [blame]
Thomas Woutersed03b412007-08-28 21:37:11 +00001
Thomas Wouters47b49bf2007-08-30 22:15:33 +00002:mod:`ssl` --- SSL wrapper for socket objects
Thomas Woutersed03b412007-08-28 21:37:11 +00003====================================================================
4
5.. module:: ssl
Thomas Wouters47b49bf2007-08-30 22:15:33 +00006 :synopsis: SSL wrapper for socket objects
7
8.. moduleauthor:: Bill Janssen <bill.janssen@gmail.com>
Thomas Wouters47b49bf2007-08-30 22:15:33 +00009.. sectionauthor:: Bill Janssen <bill.janssen@gmail.com>
10
Thomas Woutersed03b412007-08-28 21:37:11 +000011
Thomas Wouters1b7f8912007-09-19 03:06:30 +000012.. index:: single: OpenSSL; (use in module ssl)
13
14.. index:: TLS, SSL, Transport Layer Security, Secure Sockets Layer
15
Thomas Woutersed03b412007-08-28 21:37:11 +000016This module provides access to Transport Layer Security (often known
17as "Secure Sockets Layer") encryption and peer authentication
18facilities for network sockets, both client-side and server-side.
19This module uses the OpenSSL library. It is available on all modern
20Unix systems, Windows, Mac OS X, and probably additional
21platforms, as long as OpenSSL is installed on that platform.
22
23.. note::
24
25 Some behavior may be platform dependent, since calls are made to the operating
Thomas Wouters1b7f8912007-09-19 03:06:30 +000026 system socket APIs. The installed version of OpenSSL may also cause
27 variations in behavior.
Thomas Woutersed03b412007-08-28 21:37:11 +000028
Thomas Wouters47b49bf2007-08-30 22:15:33 +000029This section documents the objects and functions in the ``ssl`` module;
Thomas Woutersed03b412007-08-28 21:37:11 +000030for more general information about TLS, SSL, and certificates, the
Thomas Wouters1b7f8912007-09-19 03:06:30 +000031reader is referred to the documents in the "See Also" section at
32the bottom.
Thomas Woutersed03b412007-08-28 21:37:11 +000033
Thomas Wouters1b7f8912007-09-19 03:06:30 +000034This module provides a class, :class:`ssl.SSLSocket`, which is
35derived from the :class:`socket.socket` type, and provides
36a socket-like wrapper that also encrypts and decrypts the data
37going over the socket with SSL. It supports additional
Thomas Woutersed03b412007-08-28 21:37:11 +000038:meth:`read` and :meth:`write` methods, along with a method, :meth:`getpeercert`,
Thomas Wouters1b7f8912007-09-19 03:06:30 +000039to retrieve the certificate of the other side of the connection, and
40a method, :meth:`cipher`, to retrieve the cipher being used for the
41secure connection.
Thomas Woutersed03b412007-08-28 21:37:11 +000042
Thomas Wouters1b7f8912007-09-19 03:06:30 +000043Functions, Constants, and Exceptions
44------------------------------------
45
46.. exception:: SSLError
47
48 Raised to signal an error from the underlying SSL implementation. This
49 signifies some problem in the higher-level
50 encryption and authentication layer that's superimposed on the underlying
51 network connection. This error is a subtype of :exc:`socket.error`, which
52 in turn is a subtype of :exc:`IOError`.
53
Bill Janssen48dc27c2007-12-05 03:38:10 +000054.. 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)
Thomas Wouters1b7f8912007-09-19 03:06:30 +000055
56 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance of :class:`ssl.SSLSocket`, a subtype
57 of :class:`socket.socket`, which wraps the underlying socket in an SSL context.
58 For client-side sockets, the context construction is lazy; if the underlying socket isn't
59 connected yet, the context construction will be performed after :meth:`connect` is called
60 on the socket. For server-side sockets, if the socket has no remote peer, it is assumed
61 to be a listening socket, and the server-side SSL wrapping is automatically performed
62 on client connections accepted via the :meth:`accept` method. :func:`wrap_socket` may
63 raise :exc:`SSLError`.
64
65 The ``keyfile`` and ``certfile`` parameters specify optional files which contain a certificate
66 to be used to identify the local side of the connection. See the discussion of :ref:`ssl-certificates`
67 for more information on how the certificate is stored in the ``certfile``.
68
69 Often the private key is stored
70 in the same file as the certificate; in this case, only the ``certfile`` parameter need be
71 passed. If the private key is stored in a separate file, both parameters must be used.
72 If the private key is stored in the ``certfile``, it should come before the first certificate
73 in the certificate chain::
74
75 -----BEGIN RSA PRIVATE KEY-----
76 ... (private key in base64 encoding) ...
77 -----END RSA PRIVATE KEY-----
78 -----BEGIN CERTIFICATE-----
79 ... (certificate in base64 PEM encoding) ...
80 -----END CERTIFICATE-----
81
82 The parameter ``server_side`` is a boolean which identifies whether server-side or client-side
83 behavior is desired from this socket.
84
85 The parameter ``cert_reqs`` specifies whether a certificate is
86 required from the other side of the connection, and whether it will
87 be validated if provided. It must be one of the three values
88 :const:`CERT_NONE` (certificates ignored), :const:`CERT_OPTIONAL` (not required,
89 but validated if provided), or :const:`CERT_REQUIRED` (required and
90 validated). If the value of this parameter is not :const:`CERT_NONE`, then
91 the ``ca_certs`` parameter must point to a file of CA certificates.
92
93 The ``ca_certs`` file contains a set of concatenated "certification authority" certificates,
94 which are used to validate certificates passed from the other end of the connection.
95 See the discussion of :ref:`ssl-certificates` for more information about how to arrange
96 the certificates in this file.
97
98 The parameter ``ssl_version`` specifies which version of the SSL protocol to use.
99 Typically, the server chooses a particular protocol version, and the client
100 must adapt to the server's choice. Most of the versions are not interoperable
101 with the other versions. If not specified, for client-side operation, the
102 default SSL version is SSLv3; for server-side operation, SSLv23. These
103 version selections provide the most compatibility with other versions.
104
105 Here's a table showing which versions in a client (down the side)
106 can connect to which versions in a server (along the top):
107
108 .. table::
109
110 ======================== ========= ========= ========== =========
111 *client* / **server** **SSLv2** **SSLv3** **SSLv23** **TLSv1**
Christian Heimes255f53b2007-12-08 15:33:56 +0000112 ------------------------ --------- --------- ---------- ---------
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000113 *SSLv2* yes no yes* no
114 *SSLv3* yes yes yes no
115 *SSLv23* yes no yes no
116 *TLSv1* no no yes yes
117 ======================== ========= ========= ========== =========
118
Christian Heimes255f53b2007-12-08 15:33:56 +0000119 In some older versions of OpenSSL (for instance, 0.9.7l on OS X 10.4),
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000120 an SSLv2 client could not connect to an SSLv23 server.
121
Bill Janssen48dc27c2007-12-05 03:38:10 +0000122 The parameter ``do_handshake_on_connect`` specifies whether to do the SSL
123 handshake automatically after doing a :meth:`socket.connect`, or whether the
124 application program will call it explicitly, by invoking the :meth:`SSLSocket.do_handshake`
125 method. Calling :meth:`SSLSocket.do_handshake` explicitly gives the program control over
126 the blocking behavior of the socket I/O involved in the handshake.
127
128 The parameter ``suppress_ragged_eofs`` specifies how the :meth:`SSLSocket.read`
129 method should signal unexpected EOF from the other end of the connection. If specified
130 as :const:`True` (the default), it returns a normal EOF in response to unexpected
131 EOF errors raised from the underlying socket; if :const:`False`, it will raise
Bill Janssen980f3142008-06-29 00:05:51 +0000132 the exceptions back to the caller.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000133
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000134.. function:: RAND_status()
135
136 Returns True if the SSL pseudo-random number generator has been
137 seeded with 'enough' randomness, and False otherwise. You can use
138 :func:`ssl.RAND_egd` and :func:`ssl.RAND_add` to increase the randomness
139 of the pseudo-random number generator.
140
141.. function:: RAND_egd(path)
142
143 If you are running an entropy-gathering daemon (EGD) somewhere, and ``path``
144 is the pathname of a socket connection open to it, this will read
145 256 bytes of randomness from the socket, and add it to the SSL pseudo-random number generator
146 to increase the security of generated secret keys. This is typically only
147 necessary on systems without better sources of randomness.
148
149 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for
150 sources of entropy-gathering daemons.
151
152.. function:: RAND_add(bytes, entropy)
153
154 Mixes the given ``bytes`` into the SSL pseudo-random number generator.
155 The parameter ``entropy`` (a float) is a lower bound on the entropy
156 contained in string (so you can always use :const:`0.0`).
157 See :rfc:`1750` for more information on sources of entropy.
Thomas Woutersed03b412007-08-28 21:37:11 +0000158
159.. function:: cert_time_to_seconds(timestring)
160
161 Returns a floating-point value containing a normal seconds-after-the-epoch time
162 value, given the time-string representing the "notBefore" or "notAfter" date
163 from a certificate.
164
165 Here's an example::
166
167 >>> import ssl
168 >>> ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT")
169 1178694000.0
170 >>> import time
171 >>> time.ctime(ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT"))
172 'Wed May 9 00:00:00 2007'
173 >>>
174
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000175.. function:: get_server_certificate (addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None)
Thomas Woutersed03b412007-08-28 21:37:11 +0000176
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000177 Given the address ``addr`` of an SSL-protected server, as a
178 (*hostname*, *port-number*) pair, fetches the server's certificate,
179 and returns it as a PEM-encoded string. If ``ssl_version`` is
180 specified, uses that version of the SSL protocol to attempt to
181 connect to the server. If ``ca_certs`` is specified, it should be
182 a file containing a list of root certificates, the same format as
183 used for the same parameter in :func:`wrap_socket`. The call will
184 attempt to validate the server certificate against that set of root
185 certificates, and will fail if the validation attempt fails.
186
187.. function:: DER_cert_to_PEM_cert (DER_cert_bytes)
188
189 Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded
190 string version of the same certificate.
191
192.. function:: PEM_cert_to_DER_cert (PEM_cert_string)
193
194 Given a certificate as an ASCII PEM string, returns a DER-encoded
195 sequence of bytes for that same certificate.
Thomas Woutersed03b412007-08-28 21:37:11 +0000196
197.. data:: CERT_NONE
198
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000199 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject`
Thomas Woutersed03b412007-08-28 21:37:11 +0000200 when no certificates will be required or validated from the other
201 side of the socket connection.
202
203.. data:: CERT_OPTIONAL
204
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000205 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject`
Thomas Woutersed03b412007-08-28 21:37:11 +0000206 when no certificates will be required from the other side of the
207 socket connection, but if they are provided, will be validated.
208 Note that use of this setting requires a valid certificate
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000209 validation file also be passed as a value of the ``ca_certs``
Thomas Woutersed03b412007-08-28 21:37:11 +0000210 parameter.
211
212.. data:: CERT_REQUIRED
213
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000214 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject`
Thomas Woutersed03b412007-08-28 21:37:11 +0000215 when certificates will be required from the other side of the
216 socket connection. Note that use of this setting requires a valid certificate
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000217 validation file also be passed as a value of the ``ca_certs``
Thomas Woutersed03b412007-08-28 21:37:11 +0000218 parameter.
219
220.. data:: PROTOCOL_SSLv2
221
222 Selects SSL version 2 as the channel encryption protocol.
223
224.. data:: PROTOCOL_SSLv23
225
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000226 Selects SSL version 2 or 3 as the channel encryption protocol.
227 This is a setting to use with servers for maximum compatibility
228 with the other end of an SSL connection, but it may cause the
229 specific ciphers chosen for the encryption to be of fairly low
230 quality.
Thomas Woutersed03b412007-08-28 21:37:11 +0000231
232.. data:: PROTOCOL_SSLv3
233
234 Selects SSL version 3 as the channel encryption protocol.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000235 For clients, this is the maximally compatible SSL variant.
Thomas Woutersed03b412007-08-28 21:37:11 +0000236
237.. data:: PROTOCOL_TLSv1
238
Georg Brandl9afde1c2007-11-01 20:32:30 +0000239 Selects TLS version 1 as the channel encryption protocol. This is
Thomas Woutersed03b412007-08-28 21:37:11 +0000240 the most modern version, and probably the best choice for maximum
241 protection, if both sides can speak it.
242
243
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000244SSLSocket Objects
245-----------------
246
Bill Janssen48dc27c2007-12-05 03:38:10 +0000247.. method:: SSLSocket.read(nbytes=1024, buffer=None)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000248
249 Reads up to ``nbytes`` bytes from the SSL-encrypted channel and returns them.
Bill Janssen48dc27c2007-12-05 03:38:10 +0000250 If the ``buffer`` is specified, it will attempt to read into the buffer
251 the minimum of the size of the buffer and ``nbytes``, if that is specified.
252 If no buffer is specified, an immutable buffer is allocated and returned
253 with the data read from the socket.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000254
255.. method:: SSLSocket.write(data)
256
257 Writes the ``data`` to the other side of the connection, using the
258 SSL channel to encrypt. Returns the number of bytes written.
259
Bill Janssen48dc27c2007-12-05 03:38:10 +0000260.. method:: SSLSocket.do_handshake()
261
262 Performs the SSL setup handshake. If the socket is non-blocking,
263 this method may raise :exc:`SSLError` with the value of the exception
264 instance's ``args[0]``
265 being either :const:`SSL_ERROR_WANT_READ` or
266 :const:`SSL_ERROR_WANT_WRITE`, and should be called again until
267 it stops raising those exceptions. Here's an example of how to do
268 that::
269
270 while True:
271 try:
272 sock.do_handshake()
273 break
274 except ssl.SSLError as err:
275 if err.args[0] == ssl.SSL_ERROR_WANT_READ:
276 select.select([sock], [], [])
277 elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE:
278 select.select([], [sock], [])
279 else:
280 raise
281
Bill Janssen688356f2008-08-12 17:09:27 +0000282.. method:: SSLSocket.unwrap()
283
284 Performs the SSL shutdown handshake, which removes the TLS layer
285 from the underlying socket, and returns the underlying socket
286 object. This can be used to go from encrypted operation over a
287 connection to unencrypted. The returned socket should always be
288 used for further communication with the other side of the
289 connection, rather than the original socket
290
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000291.. method:: SSLSocket.getpeercert(binary_form=False)
292
293 If there is no certificate for the peer on the other end of the
294 connection, returns ``None``.
295
296 If the the parameter ``binary_form`` is :const:`False`, and a
297 certificate was received from the peer, this method returns a
298 :class:`dict` instance. If the certificate was not validated, the
299 dict is empty. If the certificate was validated, it returns a dict
300 with the keys ``subject`` (the principal for which the certificate
301 was issued), and ``notAfter`` (the time after which the certificate
302 should not be trusted). The certificate was already validated, so
303 the ``notBefore`` and ``issuer`` fields are not returned. If a
304 certificate contains an instance of the *Subject Alternative Name*
305 extension (see :rfc:`3280`), there will also be a
306 ``subjectAltName`` key in the dictionary.
307
308 The "subject" field is a tuple containing the sequence of relative
309 distinguished names (RDNs) given in the certificate's data
310 structure for the principal, and each RDN is a sequence of
311 name-value pairs::
312
313 {'notAfter': 'Feb 16 16:54:50 2013 GMT',
314 'subject': ((('countryName', u'US'),),
315 (('stateOrProvinceName', u'Delaware'),),
316 (('localityName', u'Wilmington'),),
317 (('organizationName', u'Python Software Foundation'),),
318 (('organizationalUnitName', u'SSL'),),
319 (('commonName', u'somemachine.python.org'),))}
320
321 If the ``binary_form`` parameter is :const:`True`, and a
322 certificate was provided, this method returns the DER-encoded form
323 of the entire certificate as a sequence of bytes, or :const:`None` if the
324 peer did not provide a certificate. This return
325 value is independent of validation; if validation was required
326 (:const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`), it will have
327 been validated, but if :const:`CERT_NONE` was used to establish the
328 connection, the certificate, if present, will not have been validated.
329
330.. method:: SSLSocket.cipher()
331
332 Returns a three-value tuple containing the name of the cipher being
333 used, the version of the SSL protocol that defines its use, and the
334 number of secret bits being used. If no connection has been
335 established, returns ``None``.
336
337
Benjamin Peterson4aeec042008-08-19 21:42:13 +0000338.. method:: SSLSocket.unwrap()
339
340 Performs the SSL shutdown handshake, which removes the TLS layer
341 from the underlying socket, and returns the underlying socket
342 object. This can be used to go from encrypted operation over a
343 connection to unencrypted. The returned socket should always be
344 used for further communication with the other side of the
345 connection, rather than the original socket
346
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000347.. index:: single: certificates
348
349.. index:: single: X509 certificate
350
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000351.. _ssl-certificates:
352
Thomas Woutersed03b412007-08-28 21:37:11 +0000353Certificates
354------------
355
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000356Certificates in general are part of a public-key / private-key system. In this system, each *principal*,
Thomas Woutersed03b412007-08-28 21:37:11 +0000357(which may be a machine, or a person, or an organization) is assigned a unique two-part encryption key.
358One part of the key is public, and is called the *public key*; the other part is kept secret, and is called
359the *private key*. The two parts are related, in that if you encrypt a message with one of the parts, you can
360decrypt it with the other part, and **only** with the other part.
361
362A certificate contains information about two principals. It contains
363the name of a *subject*, and the subject's public key. It also
364contains a statement by a second principal, the *issuer*, that the
365subject is who he claims to be, and that this is indeed the subject's
366public key. The issuer's statement is signed with the issuer's
367private key, which only the issuer knows. However, anyone can verify
368the issuer's statement by finding the issuer's public key, decrypting
369the statement with it, and comparing it to the other information in
370the certificate. The certificate also contains information about the
371time period over which it is valid. This is expressed as two fields,
372called "notBefore" and "notAfter".
373
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000374In the Python use of certificates, a client or server
375can use a certificate to prove who they are. The other
376side of a network connection can also be required to produce a certificate,
377and that certificate can be validated to the satisfaction
378of the client or server that requires such validation.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000379The connection attempt can be set to raise an exception if
380the validation fails. Validation is done
381automatically, by the underlying OpenSSL framework; the
382application need not concern itself with its mechanics.
383But the application does usually need to provide
384sets of certificates to allow this process to take place.
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000385
386Python uses files to contain certificates. They should be formatted
387as "PEM" (see :rfc:`1422`), which is a base-64 encoded form wrapped
388with a header line and a footer line::
389
390 -----BEGIN CERTIFICATE-----
391 ... (certificate in base64 PEM encoding) ...
392 -----END CERTIFICATE-----
393
394The Python files which contain certificates can contain a sequence
395of certificates, sometimes called a *certificate chain*. This chain
396should start with the specific certificate for the principal who "is"
397the client or server, and then the certificate for the issuer of that
398certificate, and then the certificate for the issuer of *that* certificate,
399and so on up the chain till you get to a certificate which is *self-signed*,
400that is, a certificate which has the same subject and issuer,
401sometimes called a *root certificate*. The certificates should just
402be concatenated together in the certificate file. For example, suppose
403we had a three certificate chain, from our server certificate to the
404certificate of the certification authority that signed our server certificate,
405to the root certificate of the agency which issued the certification authority's
406certificate::
407
408 -----BEGIN CERTIFICATE-----
409 ... (certificate for your server)...
410 -----END CERTIFICATE-----
411 -----BEGIN CERTIFICATE-----
412 ... (the certificate for the CA)...
413 -----END CERTIFICATE-----
414 -----BEGIN CERTIFICATE-----
415 ... (the root certificate for the CA's issuer)...
416 -----END CERTIFICATE-----
417
418If you are going to require validation of the other side of the connection's
419certificate, you need to provide a "CA certs" file, filled with the certificate
420chains for each issuer you are willing to trust. Again, this file just
421contains these chains concatenated together. For validation, Python will
422use the first chain it finds in the file which matches.
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000423Some "standard" root certificates are available from various certification
424authorities:
425`CACert.org <http://www.cacert.org/index.php?id=3>`_,
426`Thawte <http://www.thawte.com/roots/>`_,
427`Verisign <http://www.verisign.com/support/roots.html>`_,
428`Positive SSL <http://www.PositiveSSL.com/ssl-certificate-support/cert_installation/UTN-USERFirst-Hardware.crt>`_ (used by python.org),
429`Equifax and GeoTrust <http://www.geotrust.com/resources/root_certificates/index.asp>`_.
430
431In general, if you are using
432SSL3 or TLS1, you don't need to put the full chain in your "CA certs" file;
433you only need the root certificates, and the remote peer is supposed to
434furnish the other certificates necessary to chain from its certificate to
435a root certificate.
436See :rfc:`4158` for more discussion of the way in which
Thomas Wouters89d996e2007-09-08 17:39:28 +0000437certification chains can be built.
Thomas Woutersed03b412007-08-28 21:37:11 +0000438
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000439If you are going to create a server that provides SSL-encrypted
440connection services, you will need to acquire a certificate for that
441service. There are many ways of acquiring appropriate certificates,
442such as buying one from a certification authority. Another common
443practice is to generate a self-signed certificate. The simplest
444way to do this is with the OpenSSL package, using something like
445the following::
Thomas Woutersed03b412007-08-28 21:37:11 +0000446
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000447 % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
448 Generating a 1024 bit RSA private key
449 .......++++++
450 .............................++++++
451 writing new private key to 'cert.pem'
452 -----
453 You are about to be asked to enter information that will be incorporated
454 into your certificate request.
455 What you are about to enter is what is called a Distinguished Name or a DN.
456 There are quite a few fields but you can leave some blank
457 For some fields there will be a default value,
458 If you enter '.', the field will be left blank.
459 -----
460 Country Name (2 letter code) [AU]:US
461 State or Province Name (full name) [Some-State]:MyState
462 Locality Name (eg, city) []:Some City
463 Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
464 Organizational Unit Name (eg, section) []:My Group
465 Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
466 Email Address []:ops@myserver.mygroup.myorganization.com
467 %
Thomas Woutersed03b412007-08-28 21:37:11 +0000468
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000469The disadvantage of a self-signed certificate is that it is its
470own root certificate, and no one else will have it in their cache
471of known (and trusted) root certificates.
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000472
473
Thomas Woutersed03b412007-08-28 21:37:11 +0000474Examples
475--------
476
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000477Testing for SSL support
478^^^^^^^^^^^^^^^^^^^^^^^
479
480To test for the presence of SSL support in a Python installation, user code should use the following idiom::
481
482 try:
483 import ssl
484 except ImportError:
485 pass
486 else:
487 [ do something that requires SSL support ]
488
489Client-side operation
490^^^^^^^^^^^^^^^^^^^^^
491
Thomas Woutersed03b412007-08-28 21:37:11 +0000492This example connects to an SSL server, prints the server's address and certificate,
493sends some bytes, and reads part of the response::
494
495 import socket, ssl, pprint
496
497 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000498
499 # require a certificate from the server
500 ssl_sock = ssl.wrap_socket(s,
501 ca_certs="/etc/ca_certs_file",
502 cert_reqs=ssl.CERT_REQUIRED)
Thomas Woutersed03b412007-08-28 21:37:11 +0000503
504 ssl_sock.connect(('www.verisign.com', 443))
505
Georg Brandl6911e3c2007-09-04 07:15:32 +0000506 print(repr(ssl_sock.getpeername()))
507 pprint.pprint(ssl_sock.getpeercert())
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000508 print(pprint.pformat(ssl_sock.getpeercert()))
Thomas Woutersed03b412007-08-28 21:37:11 +0000509
Georg Brandl24420152008-05-26 16:32:26 +0000510 # Set a simple HTTP request -- use http.client in actual code.
Thomas Woutersed03b412007-08-28 21:37:11 +0000511 ssl_sock.write("""GET / HTTP/1.0\r
512 Host: www.verisign.com\r\n\r\n""")
513
514 # Read a chunk of data. Will not necessarily
515 # read all the data returned by the server.
516 data = ssl_sock.read()
517
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000518 # note that closing the SSLSocket will also close the underlying socket
Thomas Woutersed03b412007-08-28 21:37:11 +0000519 ssl_sock.close()
520
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000521As of September 6, 2007, the certificate printed by this program
Thomas Woutersed03b412007-08-28 21:37:11 +0000522looked like this::
523
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000524 {'notAfter': 'May 8 23:59:59 2009 GMT',
525 'subject': ((('serialNumber', u'2497886'),),
526 (('1.3.6.1.4.1.311.60.2.1.3', u'US'),),
527 (('1.3.6.1.4.1.311.60.2.1.2', u'Delaware'),),
528 (('countryName', u'US'),),
529 (('postalCode', u'94043'),),
530 (('stateOrProvinceName', u'California'),),
531 (('localityName', u'Mountain View'),),
532 (('streetAddress', u'487 East Middlefield Road'),),
533 (('organizationName', u'VeriSign, Inc.'),),
534 (('organizationalUnitName',
535 u'Production Security Services'),),
536 (('organizationalUnitName',
537 u'Terms of use at www.verisign.com/rpa (c)06'),),
538 (('commonName', u'www.verisign.com'),))}
539
540which is a fairly poorly-formed ``subject`` field.
Thomas Woutersed03b412007-08-28 21:37:11 +0000541
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000542Server-side operation
543^^^^^^^^^^^^^^^^^^^^^
544
Thomas Woutersed03b412007-08-28 21:37:11 +0000545For server operation, typically you'd need to have a server certificate, and private key, each in a file.
546You'd open a socket, bind it to a port, call :meth:`listen` on it, then start waiting for clients
547to connect::
548
549 import socket, ssl
550
551 bindsocket = socket.socket()
552 bindsocket.bind(('myaddr.mydomain.com', 10023))
553 bindsocket.listen(5)
554
555When one did, you'd call :meth:`accept` on the socket to get the new socket from the other
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000556end, and use :func:`wrap_socket` to create a server-side SSL context for it::
Thomas Woutersed03b412007-08-28 21:37:11 +0000557
558 while True:
559 newsocket, fromaddr = bindsocket.accept()
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000560 connstream = ssl.wrap_socket(newsocket,
561 server_side=True,
562 certfile="mycertfile",
563 keyfile="mykeyfile",
Christian Heimesdae2a892008-04-19 00:55:37 +0000564 ssl_version=ssl.PROTOCOL_TLSv1)
Thomas Woutersed03b412007-08-28 21:37:11 +0000565 deal_with_client(connstream)
566
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000567Then you'd read data from the ``connstream`` and do something with it till you are finished with the client (or the client is finished with you)::
Thomas Woutersed03b412007-08-28 21:37:11 +0000568
569 def deal_with_client(connstream):
570
571 data = connstream.read()
572 # null data means the client is finished with us
573 while data:
574 if not do_something(connstream, data):
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000575 # we'll assume do_something returns False
576 # when we're finished with client
Thomas Woutersed03b412007-08-28 21:37:11 +0000577 break
578 data = connstream.read()
579 # finished with client
580 connstream.close()
581
582And go back to listening for new client connections.
583
584
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000585.. seealso::
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000586
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000587 Class :class:`socket.socket`
588 Documentation of underlying :mod:`socket` class
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000589
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000590 `Introducing SSL and Certificates using OpenSSL <http://old.pseudonym.org/ssl/wwwj-index.html>`_
591 Frederick J. Hirsch
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000592
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000593 `RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management <http://www.ietf.org/rfc/rfc1422>`_
594 Steve Kent
Thomas Wouters47b49bf2007-08-30 22:15:33 +0000595
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000596 `RFC 1750: Randomness Recommendations for Security <http://www.ietf.org/rfc/rfc1750>`_
597 D. Eastlake et. al.
Thomas Wouters89d996e2007-09-08 17:39:28 +0000598
Thomas Wouters1b7f8912007-09-19 03:06:30 +0000599 `RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile <http://www.ietf.org/rfc/rfc3280>`_
600 Housley et. al.