blob: a41c6ea6217c1d4f2d76d52a8a2e699049b6448f [file] [log] [blame]
Guido van Rossum8ee23bb2007-08-27 19:11:11 +00001
Bill Janssen426ea0a2007-08-29 22:35:05 +00002:mod:`ssl` --- SSL wrapper for socket objects
Guido van Rossum8ee23bb2007-08-27 19:11:11 +00003====================================================================
4
5.. module:: ssl
Bill Janssen426ea0a2007-08-29 22:35:05 +00006 :synopsis: SSL wrapper for socket objects
7
8.. moduleauthor:: Bill Janssen <bill.janssen@gmail.com>
Guido van Rossum8ee23bb2007-08-27 19:11:11 +00009
10.. versionadded:: 2.6
11
Bill Janssen426ea0a2007-08-29 22:35:05 +000012.. sectionauthor:: Bill Janssen <bill.janssen@gmail.com>
13
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000014
Bill Janssen98d19da2007-09-10 21:51:02 +000015.. index:: single: OpenSSL; (use in module ssl)
16
17.. index:: TLS, SSL, Transport Layer Security, Secure Sockets Layer
18
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000019This module provides access to Transport Layer Security (often known
20as "Secure Sockets Layer") encryption and peer authentication
21facilities for network sockets, both client-side and server-side.
22This module uses the OpenSSL library. It is available on all modern
23Unix systems, Windows, Mac OS X, and probably additional
24platforms, as long as OpenSSL is installed on that platform.
25
26.. note::
27
28 Some behavior may be platform dependent, since calls are made to the operating
Bill Janssen98d19da2007-09-10 21:51:02 +000029 system socket APIs. The installed version of OpenSSL may also cause
30 variations in behavior.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000031
Bill Janssen426ea0a2007-08-29 22:35:05 +000032This section documents the objects and functions in the ``ssl`` module;
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000033for more general information about TLS, SSL, and certificates, the
Bill Janssen98d19da2007-09-10 21:51:02 +000034reader is referred to the documents in the "See Also" section at
35the bottom.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000036
Bill Janssen93bf9ce2007-09-11 02:42:07 +000037This module provides a class, :class:`ssl.SSLSocket`, which is
38derived from the :class:`socket.socket` type, and provides
39a socket-like wrapper that also encrypts and decrypts the data
40going over the socket with SSL. It supports additional
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000041:meth:`read` and :meth:`write` methods, along with a method, :meth:`getpeercert`,
Bill Janssen93bf9ce2007-09-11 02:42:07 +000042to retrieve the certificate of the other side of the connection, and
43a method, :meth:`cipher`, to retrieve the cipher being used for the
44secure connection.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000045
Bill Janssen93bf9ce2007-09-11 02:42:07 +000046Functions, Constants, and Exceptions
47------------------------------------
Guido van Rossum8ee23bb2007-08-27 19:11:11 +000048
Bill Janssen93bf9ce2007-09-11 02:42:07 +000049.. exception:: SSLError
50
51 Raised to signal an error from the underlying SSL implementation. This
52 signifies some problem in the higher-level
53 encryption and authentication layer that's superimposed on the underlying
54 network connection. This error is a subtype of :exc:`socket.error`, which
55 in turn is a subtype of :exc:`IOError`.
56
Bill Janssen934b16d2008-06-28 22:19:33 +000057.. 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 +000058
59 Takes an instance ``sock`` of :class:`socket.socket`, and returns an instance of :class:`ssl.SSLSocket`, a subtype
60 of :class:`socket.socket`, which wraps the underlying socket in an SSL context.
61 For client-side sockets, the context construction is lazy; if the underlying socket isn't
62 connected yet, the context construction will be performed after :meth:`connect` is called
63 on the socket. For server-side sockets, if the socket has no remote peer, it is assumed
64 to be a listening socket, and the server-side SSL wrapping is automatically performed
Bill Janssen93bf9ce2007-09-11 02:42:07 +000065 on client connections accepted via the :meth:`accept` method. :func:`wrap_socket` may
66 raise :exc:`SSLError`.
Bill Janssen98d19da2007-09-10 21:51:02 +000067
68 The ``keyfile`` and ``certfile`` parameters specify optional files which contain a certificate
69 to be used to identify the local side of the connection. See the discussion of :ref:`ssl-certificates`
70 for more information on how the certificate is stored in the ``certfile``.
71
72 Often the private key is stored
73 in the same file as the certificate; in this case, only the ``certfile`` parameter need be
74 passed. If the private key is stored in a separate file, both parameters must be used.
75 If the private key is stored in the ``certfile``, it should come before the first certificate
76 in the certificate chain::
77
78 -----BEGIN RSA PRIVATE KEY-----
79 ... (private key in base64 encoding) ...
80 -----END RSA PRIVATE KEY-----
81 -----BEGIN CERTIFICATE-----
82 ... (certificate in base64 PEM encoding) ...
83 -----END CERTIFICATE-----
84
85 The parameter ``server_side`` is a boolean which identifies whether server-side or client-side
86 behavior is desired from this socket.
87
88 The parameter ``cert_reqs`` specifies whether a certificate is
89 required from the other side of the connection, and whether it will
90 be validated if provided. It must be one of the three values
91 :const:`CERT_NONE` (certificates ignored), :const:`CERT_OPTIONAL` (not required,
92 but validated if provided), or :const:`CERT_REQUIRED` (required and
93 validated). If the value of this parameter is not :const:`CERT_NONE`, then
94 the ``ca_certs`` parameter must point to a file of CA certificates.
95
96 The ``ca_certs`` file contains a set of concatenated "certification authority" certificates,
97 which are used to validate certificates passed from the other end of the connection.
98 See the discussion of :ref:`ssl-certificates` for more information about how to arrange
99 the certificates in this file.
100
101 The parameter ``ssl_version`` specifies which version of the SSL protocol to use.
102 Typically, the server chooses a particular protocol version, and the client
103 must adapt to the server's choice. Most of the versions are not interoperable
104 with the other versions. If not specified, for client-side operation, the
105 default SSL version is SSLv3; for server-side operation, SSLv23. These
106 version selections provide the most compatibility with other versions.
107
108 Here's a table showing which versions in a client (down the side)
109 can connect to which versions in a server (along the top):
110
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 Brandl2b92f6b2007-12-06 01:52:24 +0000122 In some older versions of OpenSSL (for instance, 0.9.7l on OS X 10.4),
Bill Janssen98d19da2007-09-10 21:51:02 +0000123 an SSLv2 client could not connect to an SSLv23 server.
124
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
127 application program will call it explicitly, by invoking the :meth:`SSLSocket.do_handshake`
128 method. Calling :meth:`SSLSocket.do_handshake` explicitly gives the program control over
129 the blocking behavior of the socket I/O involved in the handshake.
130
131 The parameter ``suppress_ragged_eofs`` specifies how the :meth:`SSLSocket.read`
132 method should signal unexpected EOF from the other end of the connection. If specified
133 as :const:`True` (the default), it returns a normal EOF in response to unexpected
134 EOF errors raised from the underlying socket; if :const:`False`, it will raise
135 the exceptions back to the caller.
136
Bill Janssen98d19da2007-09-10 21:51:02 +0000137.. function:: RAND_status()
138
139 Returns True if the SSL pseudo-random number generator has been
140 seeded with 'enough' randomness, and False otherwise. You can use
141 :func:`ssl.RAND_egd` and :func:`ssl.RAND_add` to increase the randomness
142 of the pseudo-random number generator.
143
144.. function:: RAND_egd(path)
145
146 If you are running an entropy-gathering daemon (EGD) somewhere, and ``path``
147 is the pathname of a socket connection open to it, this will read
148 256 bytes of randomness from the socket, and add it to the SSL pseudo-random number generator
149 to increase the security of generated secret keys. This is typically only
150 necessary on systems without better sources of randomness.
151
152 See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000153 sources of entropy-gathering daemons.
Bill Janssen98d19da2007-09-10 21:51:02 +0000154
155.. function:: RAND_add(bytes, entropy)
156
157 Mixes the given ``bytes`` into the SSL pseudo-random number generator.
158 The parameter ``entropy`` (a float) is a lower bound on the entropy
159 contained in string (so you can always use :const:`0.0`).
160 See :rfc:`1750` for more information on sources of entropy.
161
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000162.. function:: cert_time_to_seconds(timestring)
163
164 Returns a floating-point value containing a normal seconds-after-the-epoch time
165 value, given the time-string representing the "notBefore" or "notAfter" date
166 from a certificate.
167
168 Here's an example::
169
170 >>> import ssl
171 >>> ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT")
172 1178694000.0
173 >>> import time
174 >>> time.ctime(ssl.cert_time_to_seconds("May 9 00:00:00 2007 GMT"))
175 'Wed May 9 00:00:00 2007'
176 >>>
177
Bill Janssen296a59d2007-09-16 22:06:00 +0000178.. function:: get_server_certificate (addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None)
179
180 Given the address ``addr`` of an SSL-protected server, as a
181 (*hostname*, *port-number*) pair, fetches the server's certificate,
182 and returns it as a PEM-encoded string. If ``ssl_version`` is
183 specified, uses that version of the SSL protocol to attempt to
184 connect to the server. If ``ca_certs`` is specified, it should be
185 a file containing a list of root certificates, the same format as
186 used for the same parameter in :func:`wrap_socket`. The call will
187 attempt to validate the server certificate against that set of root
188 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
197 Given a certificate as an ASCII PEM string, returns a DER-encoded
198 sequence of bytes for that same certificate.
199
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000200.. data:: CERT_NONE
201
Bill Janssen426ea0a2007-08-29 22:35:05 +0000202 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject`
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000203 when no certificates will be required or validated from the other
204 side of the socket connection.
205
206.. data:: CERT_OPTIONAL
207
Bill Janssen426ea0a2007-08-29 22:35:05 +0000208 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject`
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000209 when no certificates will be required from the other side of the
210 socket connection, but if they are provided, will be validated.
211 Note that use of this setting requires a valid certificate
Bill Janssen426ea0a2007-08-29 22:35:05 +0000212 validation file also be passed as a value of the ``ca_certs``
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000213 parameter.
214
215.. data:: CERT_REQUIRED
216
Bill Janssen426ea0a2007-08-29 22:35:05 +0000217 Value to pass to the ``cert_reqs`` parameter to :func:`sslobject`
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000218 when certificates will be required from the other side of the
219 socket connection. Note that use of this setting requires a valid certificate
Bill Janssen426ea0a2007-08-29 22:35:05 +0000220 validation file also be passed as a value of the ``ca_certs``
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000221 parameter.
222
223.. data:: PROTOCOL_SSLv2
224
225 Selects SSL version 2 as the channel encryption protocol.
226
227.. data:: PROTOCOL_SSLv23
228
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000229 Selects SSL version 2 or 3 as the channel encryption protocol.
230 This is a setting to use with servers for maximum compatibility
231 with the other end of an SSL connection, but it may cause the
232 specific ciphers chosen for the encryption to be of fairly low
233 quality.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000234
235.. data:: PROTOCOL_SSLv3
236
237 Selects SSL version 3 as the channel encryption protocol.
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000238 For clients, this is the maximally compatible SSL variant.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000239
240.. data:: PROTOCOL_TLSv1
241
Andrew M. Kuchling529b1a92007-10-20 19:25:37 +0000242 Selects TLS version 1 as the channel encryption protocol. This is
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000243 the most modern version, and probably the best choice for maximum
244 protection, if both sides can speak it.
245
246
Bill Janssen98d19da2007-09-10 21:51:02 +0000247SSLSocket Objects
248-----------------
249
250.. method:: SSLSocket.read([nbytes=1024])
251
252 Reads up to ``nbytes`` bytes from the SSL-encrypted channel and returns them.
253
254.. method:: SSLSocket.write(data)
255
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000256 Writes the ``data`` to the other side of the connection, using the
257 SSL channel to encrypt. Returns the number of bytes written.
Bill Janssen98d19da2007-09-10 21:51:02 +0000258
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000259.. method:: SSLSocket.getpeercert(binary_form=False)
Bill Janssen98d19da2007-09-10 21:51:02 +0000260
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000261 If there is no certificate for the peer on the other end of the
262 connection, returns ``None``.
Bill Janssen98d19da2007-09-10 21:51:02 +0000263
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000264 If the the parameter ``binary_form`` is :const:`False`, and a
265 certificate was received from the peer, this method returns a
266 :class:`dict` instance. If the certificate was not validated, the
267 dict is empty. If the certificate was validated, it returns a dict
268 with the keys ``subject`` (the principal for which the certificate
269 was issued), and ``notAfter`` (the time after which the certificate
270 should not be trusted). The certificate was already validated, so
271 the ``notBefore`` and ``issuer`` fields are not returned. If a
272 certificate contains an instance of the *Subject Alternative Name*
273 extension (see :rfc:`3280`), there will also be a
274 ``subjectAltName`` key in the dictionary.
275
276 The "subject" field is a tuple containing the sequence of relative
277 distinguished names (RDNs) given in the certificate's data
278 structure for the principal, and each RDN is a sequence of
279 name-value pairs::
Bill Janssen98d19da2007-09-10 21:51:02 +0000280
281 {'notAfter': 'Feb 16 16:54:50 2013 GMT',
282 'subject': ((('countryName', u'US'),),
283 (('stateOrProvinceName', u'Delaware'),),
284 (('localityName', u'Wilmington'),),
285 (('organizationName', u'Python Software Foundation'),),
286 (('organizationalUnitName', u'SSL'),),
287 (('commonName', u'somemachine.python.org'),))}
288
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000289 If the ``binary_form`` parameter is :const:`True`, and a
290 certificate was provided, this method returns the DER-encoded form
Bill Janssen296a59d2007-09-16 22:06:00 +0000291 of the entire certificate as a sequence of bytes, or :const:`None` if the
292 peer did not provide a certificate. This return
293 value is independent of validation; if validation was required
294 (:const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`), it will have
295 been validated, but if :const:`CERT_NONE` was used to establish the
296 connection, the certificate, if present, will not have been validated.
Bill Janssen98d19da2007-09-10 21:51:02 +0000297
298.. method:: SSLSocket.cipher()
299
300 Returns a three-value tuple containing the name of the cipher being
301 used, the version of the SSL protocol that defines its use, and the
302 number of secret bits being used. If no connection has been
303 established, returns ``None``.
304
Bill Janssen934b16d2008-06-28 22:19:33 +0000305.. method:: SSLSocket.do_handshake()
306
307 Perform a TLS/SSL handshake. If this is used with a non-blocking socket,
308 it may raise :exc:`SSLError` with an ``arg[0]`` of :const:`SSL_ERROR_WANT_READ`
309 or :const:`SSL_ERROR_WANT_WRITE`, in which case it must be called again until it
310 completes successfully. For example, to simulate the behavior of a blocking socket,
311 one might write::
312
313 while True:
314 try:
315 s.do_handshake()
316 break
317 except ssl.SSLError, err:
318 if err.args[0] == ssl.SSL_ERROR_WANT_READ:
319 select.select([s], [], [])
320 elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE:
321 select.select([], [s], [])
322 else:
323 raise
Bill Janssen98d19da2007-09-10 21:51:02 +0000324
325.. index:: single: certificates
326
327.. index:: single: X509 certificate
328
Bill Janssen93bf9ce2007-09-11 02:42:07 +0000329.. _ssl-certificates:
330
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000331Certificates
332------------
333
Bill Janssen426ea0a2007-08-29 22:35:05 +0000334Certificates in general are part of a public-key / private-key system. In this system, each *principal*,
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000335(which may be a machine, or a person, or an organization) is assigned a unique two-part encryption key.
336One part of the key is public, and is called the *public key*; the other part is kept secret, and is called
337the *private key*. The two parts are related, in that if you encrypt a message with one of the parts, you can
338decrypt it with the other part, and **only** with the other part.
339
340A certificate contains information about two principals. It contains
341the name of a *subject*, and the subject's public key. It also
342contains a statement by a second principal, the *issuer*, that the
343subject is who he claims to be, and that this is indeed the subject's
344public key. The issuer's statement is signed with the issuer's
345private key, which only the issuer knows. However, anyone can verify
346the issuer's statement by finding the issuer's public key, decrypting
347the statement with it, and comparing it to the other information in
348the certificate. The certificate also contains information about the
349time period over which it is valid. This is expressed as two fields,
350called "notBefore" and "notAfter".
351
Bill Janssen426ea0a2007-08-29 22:35:05 +0000352In the Python use of certificates, a client or server
353can use a certificate to prove who they are. The other
354side of a network connection can also be required to produce a certificate,
355and that certificate can be validated to the satisfaction
356of the client or server that requires such validation.
Bill Janssen98d19da2007-09-10 21:51:02 +0000357The connection attempt can be set to raise an exception if
358the validation fails. Validation is done
359automatically, by the underlying OpenSSL framework; the
360application need not concern itself with its mechanics.
361But the application does usually need to provide
362sets of certificates to allow this process to take place.
Bill Janssen426ea0a2007-08-29 22:35:05 +0000363
364Python uses files to contain certificates. They should be formatted
365as "PEM" (see :rfc:`1422`), which is a base-64 encoded form wrapped
366with a header line and a footer line::
367
368 -----BEGIN CERTIFICATE-----
369 ... (certificate in base64 PEM encoding) ...
370 -----END CERTIFICATE-----
371
372The Python files which contain certificates can contain a sequence
373of certificates, sometimes called a *certificate chain*. This chain
374should start with the specific certificate for the principal who "is"
375the client or server, and then the certificate for the issuer of that
376certificate, and then the certificate for the issuer of *that* certificate,
377and so on up the chain till you get to a certificate which is *self-signed*,
378that is, a certificate which has the same subject and issuer,
379sometimes called a *root certificate*. The certificates should just
380be concatenated together in the certificate file. For example, suppose
381we had a three certificate chain, from our server certificate to the
382certificate of the certification authority that signed our server certificate,
383to the root certificate of the agency which issued the certification authority's
384certificate::
385
386 -----BEGIN CERTIFICATE-----
387 ... (certificate for your server)...
388 -----END CERTIFICATE-----
389 -----BEGIN CERTIFICATE-----
390 ... (the certificate for the CA)...
391 -----END CERTIFICATE-----
392 -----BEGIN CERTIFICATE-----
393 ... (the root certificate for the CA's issuer)...
394 -----END CERTIFICATE-----
395
396If you are going to require validation of the other side of the connection's
397certificate, you need to provide a "CA certs" file, filled with the certificate
398chains for each issuer you are willing to trust. Again, this file just
399contains these chains concatenated together. For validation, Python will
400use the first chain it finds in the file which matches.
Bill Janssen934b16d2008-06-28 22:19:33 +0000401
Bill Janssen98d19da2007-09-10 21:51:02 +0000402Some "standard" root certificates are available from various certification
403authorities:
404`CACert.org <http://www.cacert.org/index.php?id=3>`_,
405`Thawte <http://www.thawte.com/roots/>`_,
406`Verisign <http://www.verisign.com/support/roots.html>`_,
Bill Janssen296a59d2007-09-16 22:06:00 +0000407`Positive SSL <http://www.PositiveSSL.com/ssl-certificate-support/cert_installation/UTN-USERFirst-Hardware.crt>`_ (used by python.org),
Bill Janssen98d19da2007-09-10 21:51:02 +0000408`Equifax and GeoTrust <http://www.geotrust.com/resources/root_certificates/index.asp>`_.
409
410In general, if you are using
411SSL3 or TLS1, you don't need to put the full chain in your "CA certs" file;
412you only need the root certificates, and the remote peer is supposed to
413furnish the other certificates necessary to chain from its certificate to
414a root certificate.
415See :rfc:`4158` for more discussion of the way in which
Bill Janssenffe576d2007-09-05 00:46:27 +0000416certification chains can be built.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000417
Bill Janssen98d19da2007-09-10 21:51:02 +0000418If you are going to create a server that provides SSL-encrypted
419connection services, you will need to acquire a certificate for that
420service. There are many ways of acquiring appropriate certificates,
421such as buying one from a certification authority. Another common
422practice is to generate a self-signed certificate. The simplest
423way to do this is with the OpenSSL package, using something like
424the 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
Bill Janssen98d19da2007-09-10 21:51:02 +0000448The disadvantage of a self-signed certificate is that it is its
449own root certificate, and no one else will have it in their cache
450of known (and trusted) root 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
459To test for the presence of SSL support in a Python installation, user code should use the following idiom::
460
461 try:
462 import ssl
463 except ImportError:
464 pass
465 else:
466 [ do something that requires SSL support ]
467
468Client-side operation
469^^^^^^^^^^^^^^^^^^^^^
470
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000471This example connects to an SSL server, prints the server's address and certificate,
472sends some bytes, and reads part of the response::
473
474 import socket, ssl, pprint
475
476 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Bill Janssen98d19da2007-09-10 21:51:02 +0000477
478 # require a certificate from the server
479 ssl_sock = ssl.wrap_socket(s,
480 ca_certs="/etc/ca_certs_file",
481 cert_reqs=ssl.CERT_REQUIRED)
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000482
483 ssl_sock.connect(('www.verisign.com', 443))
484
485 print repr(ssl_sock.getpeername())
Bill Janssen98d19da2007-09-10 21:51:02 +0000486 print ssl_sock.cipher()
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000487 print pprint.pformat(ssl_sock.getpeercert())
488
489 # Set a simple HTTP request -- use httplib in actual code.
490 ssl_sock.write("""GET / HTTP/1.0\r
491 Host: www.verisign.com\r\n\r\n""")
492
493 # Read a chunk of data. Will not necessarily
494 # read all the data returned by the server.
495 data = ssl_sock.read()
496
Bill Janssen98d19da2007-09-10 21:51:02 +0000497 # note that closing the SSLSocket will also close the underlying socket
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000498 ssl_sock.close()
499
Bill Janssen98d19da2007-09-10 21:51:02 +0000500As of September 6, 2007, the certificate printed by this program
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000501looked like this::
502
Bill Janssen98d19da2007-09-10 21:51:02 +0000503 {'notAfter': 'May 8 23:59:59 2009 GMT',
504 'subject': ((('serialNumber', u'2497886'),),
505 (('1.3.6.1.4.1.311.60.2.1.3', u'US'),),
506 (('1.3.6.1.4.1.311.60.2.1.2', u'Delaware'),),
507 (('countryName', u'US'),),
508 (('postalCode', u'94043'),),
509 (('stateOrProvinceName', u'California'),),
510 (('localityName', u'Mountain View'),),
511 (('streetAddress', u'487 East Middlefield Road'),),
512 (('organizationName', u'VeriSign, Inc.'),),
513 (('organizationalUnitName',
514 u'Production Security Services'),),
515 (('organizationalUnitName',
516 u'Terms of use at www.verisign.com/rpa (c)06'),),
517 (('commonName', u'www.verisign.com'),))}
518
519which is a fairly poorly-formed ``subject`` field.
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000520
Bill Janssen426ea0a2007-08-29 22:35:05 +0000521Server-side operation
522^^^^^^^^^^^^^^^^^^^^^
523
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000524For server operation, typically you'd need to have a server certificate, and private key, each in a file.
525You'd open a socket, bind it to a port, call :meth:`listen` on it, then start waiting for clients
526to connect::
527
528 import socket, ssl
529
530 bindsocket = socket.socket()
531 bindsocket.bind(('myaddr.mydomain.com', 10023))
532 bindsocket.listen(5)
533
534When one did, you'd call :meth:`accept` on the socket to get the new socket from the other
Bill Janssen98d19da2007-09-10 21:51:02 +0000535end, and use :func:`wrap_socket` to create a server-side SSL context for it::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000536
537 while True:
538 newsocket, fromaddr = bindsocket.accept()
Bill Janssen98d19da2007-09-10 21:51:02 +0000539 connstream = ssl.wrap_socket(newsocket,
540 server_side=True,
541 certfile="mycertfile",
542 keyfile="mykeyfile",
Andrew M. Kuchlingaea8d2e2008-04-18 02:40:47 +0000543 ssl_version=ssl.PROTOCOL_TLSv1)
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000544 deal_with_client(connstream)
545
Bill Janssen426ea0a2007-08-29 22:35:05 +0000546Then 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)::
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000547
548 def deal_with_client(connstream):
549
550 data = connstream.read()
551 # null data means the client is finished with us
552 while data:
553 if not do_something(connstream, data):
Bill Janssen98d19da2007-09-10 21:51:02 +0000554 # we'll assume do_something returns False
555 # when we're finished with client
Guido van Rossum8ee23bb2007-08-27 19:11:11 +0000556 break
557 data = connstream.read()
558 # finished with client
559 connstream.close()
560
561And go back to listening for new client connections.
562
563
Bill Janssen98d19da2007-09-10 21:51:02 +0000564.. seealso::
Bill Janssen426ea0a2007-08-29 22:35:05 +0000565
Bill Janssen98d19da2007-09-10 21:51:02 +0000566 Class :class:`socket.socket`
567 Documentation of underlying :mod:`socket` class
Bill Janssen426ea0a2007-08-29 22:35:05 +0000568
Bill Janssen98d19da2007-09-10 21:51:02 +0000569 `Introducing SSL and Certificates using OpenSSL <http://old.pseudonym.org/ssl/wwwj-index.html>`_
570 Frederick J. Hirsch
Bill Janssen426ea0a2007-08-29 22:35:05 +0000571
Bill Janssen98d19da2007-09-10 21:51:02 +0000572 `RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management <http://www.ietf.org/rfc/rfc1422>`_
573 Steve Kent
Bill Janssen426ea0a2007-08-29 22:35:05 +0000574
Bill Janssen98d19da2007-09-10 21:51:02 +0000575 `RFC 1750: Randomness Recommendations for Security <http://www.ietf.org/rfc/rfc1750>`_
576 D. Eastlake et. al.
Bill Janssenffe576d2007-09-05 00:46:27 +0000577
Bill Janssen98d19da2007-09-10 21:51:02 +0000578 `RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile <http://www.ietf.org/rfc/rfc3280>`_
579 Housley et. al.