Mercurial > cpython-lru_cache-weakref
annotate Lib/ssl.py @ 65035:87f4b32905df 2.7
Cosmetic fix to use print function.
| author | Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp> |
|---|---|
| date | Fri, 01 Oct 2010 10:48:47 +0000 |
| parents | 7f99ac53014a |
| children | 742d73a99425 |
| rev | line source |
|---|---|
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 # Wrapper module for _ssl, providing some additional facilities |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 # implemented in Python. Written by Bill Janssen. |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 """\ |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 This module provides some more Pythonic support for SSL. |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 Object types: |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
9 SSLSocket -- subtype of socket.socket which does SSL over the socket |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 Exceptions: |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
13 SSLError -- exception raised for I/O errors |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 Functions: |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 cert_time_to_seconds -- convert time string used for certificate |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 notBefore and notAfter functions to integer |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 seconds past the Epoch (the time values |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 returned from time.time()) |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 fetch_server_certificate (HOST, PORT) -- fetch the certificate provided |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 by the server running on HOST at port PORT. No |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 validation of the certificate is performed. |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 Integer constants: |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 SSL_ERROR_ZERO_RETURN |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 SSL_ERROR_WANT_READ |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 SSL_ERROR_WANT_WRITE |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 SSL_ERROR_WANT_X509_LOOKUP |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 SSL_ERROR_SYSCALL |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 SSL_ERROR_SSL |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 SSL_ERROR_WANT_CONNECT |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 SSL_ERROR_EOF |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 SSL_ERROR_INVALID_ERROR_CODE |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 The following group define certificate requirements that one side is |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 allowing/requiring from the other side: |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 CERT_NONE - no certificates from the other side are required (or will |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 be looked at if provided) |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 CERT_OPTIONAL - certificates are not required, but if provided will be |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 validated, and if validation fails, the connection will |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 also fail |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 CERT_REQUIRED - certificates are required, and will be validated, and |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 if validation fails, the connection will also fail |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 The following constants identify various SSL protocol variants: |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 PROTOCOL_SSLv2 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 PROTOCOL_SSLv3 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 PROTOCOL_SSLv23 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 PROTOCOL_TLSv1 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 """ |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 |
|
45468
1d84bf5f9478
Patch #2167 from calvin: Remove unused imports
Christian Heimes <christian@cheimes.de>
parents:
43375
diff
changeset
|
58 import textwrap |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 import _ssl # if we can't import it, let the error propagate |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
61 |
|
60372
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59844
diff
changeset
|
62 from _ssl import OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_INFO, OPENSSL_VERSION |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
63 from _ssl import SSLError |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 from _ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 from _ssl import PROTOCOL_SSLv2, PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
66 from _ssl import RAND_status, RAND_egd, RAND_add |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
67 from _ssl import \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
68 SSL_ERROR_ZERO_RETURN, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
69 SSL_ERROR_WANT_READ, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
70 SSL_ERROR_WANT_WRITE, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
71 SSL_ERROR_WANT_X509_LOOKUP, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
72 SSL_ERROR_SYSCALL, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
73 SSL_ERROR_SSL, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
74 SSL_ERROR_WANT_CONNECT, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
75 SSL_ERROR_EOF, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
76 SSL_ERROR_INVALID_ERROR_CODE |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 |
|
60904
2c31dac694ff
Issue #7943: Fix circular reference created when instantiating an SSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60659
diff
changeset
|
78 from socket import socket, _fileobject, _delegate_methods, error as socket_error |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
79 from socket import getnameinfo as _getnameinfo |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
80 import base64 # for DER-to-PEM translation |
|
60985
7fc211df3d5b
When calling getpeername() in SSLSocket.__init__, only silence exceptions
Antoine Pitrou <solipsis@pitrou.net>
parents:
60933
diff
changeset
|
81 import errno |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
82 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
83 class SSLSocket(socket): |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
85 """This class implements a subtype of socket.socket that wraps |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
86 the underlying OS socket in an SSL context when necessary, and |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
87 provides read and write methods over that channel.""" |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
88 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 def __init__(self, sock, keyfile=None, certfile=None, |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 server_side=False, cert_reqs=CERT_NONE, |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
91 ssl_version=PROTOCOL_SSLv23, ca_certs=None, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
92 do_handshake_on_connect=True, |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
93 suppress_ragged_eofs=True, ciphers=None): |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 socket.__init__(self, _sock=sock._sock) |
|
60904
2c31dac694ff
Issue #7943: Fix circular reference created when instantiating an SSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60659
diff
changeset
|
95 # The initializer for socket overrides the methods send(), recv(), etc. |
|
2c31dac694ff
Issue #7943: Fix circular reference created when instantiating an SSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60659
diff
changeset
|
96 # in the instancce, which we don't need -- but we want to provide the |
|
2c31dac694ff
Issue #7943: Fix circular reference created when instantiating an SSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60659
diff
changeset
|
97 # methods defined in SSLSocket. |
|
2c31dac694ff
Issue #7943: Fix circular reference created when instantiating an SSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60659
diff
changeset
|
98 for attr in _delegate_methods: |
|
2c31dac694ff
Issue #7943: Fix circular reference created when instantiating an SSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60659
diff
changeset
|
99 try: |
|
2c31dac694ff
Issue #7943: Fix circular reference created when instantiating an SSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60659
diff
changeset
|
100 delattr(self, attr) |
|
2c31dac694ff
Issue #7943: Fix circular reference created when instantiating an SSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60659
diff
changeset
|
101 except AttributeError: |
|
2c31dac694ff
Issue #7943: Fix circular reference created when instantiating an SSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60659
diff
changeset
|
102 pass |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
103 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 if certfile and not keyfile: |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
105 keyfile = certfile |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
106 # see if it's connected |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
107 try: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
108 socket.getpeername(self) |
|
60985
7fc211df3d5b
When calling getpeername() in SSLSocket.__init__, only silence exceptions
Antoine Pitrou <solipsis@pitrou.net>
parents:
60933
diff
changeset
|
109 except socket_error, e: |
|
7fc211df3d5b
When calling getpeername() in SSLSocket.__init__, only silence exceptions
Antoine Pitrou <solipsis@pitrou.net>
parents:
60933
diff
changeset
|
110 if e.errno != errno.ENOTCONN: |
|
7fc211df3d5b
When calling getpeername() in SSLSocket.__init__, only silence exceptions
Antoine Pitrou <solipsis@pitrou.net>
parents:
60933
diff
changeset
|
111 raise |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
112 # no, no connection yet |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
113 self._sslobj = None |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 else: |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
115 # yes, create the SSL object |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
116 self._sslobj = _ssl.sslwrap(self._sock, server_side, |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
117 keyfile, certfile, |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
118 cert_reqs, ssl_version, ca_certs, |
|
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
119 ciphers) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
120 if do_handshake_on_connect: |
|
60933
76a052eedee6
Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents:
60909
diff
changeset
|
121 self.do_handshake() |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
122 self.keyfile = keyfile |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 self.certfile = certfile |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
124 self.cert_reqs = cert_reqs |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 self.ssl_version = ssl_version |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
126 self.ca_certs = ca_certs |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
127 self.ciphers = ciphers |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
128 self.do_handshake_on_connect = do_handshake_on_connect |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
129 self.suppress_ragged_eofs = suppress_ragged_eofs |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
130 self._makefile_refs = 0 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
131 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
132 def read(self, len=1024): |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
133 |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
134 """Read up to LEN bytes and return them. |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
135 Return zero-length string on EOF.""" |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
136 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
137 try: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
138 return self._sslobj.read(len) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
139 except SSLError, x: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
140 if x.args[0] == SSL_ERROR_EOF and self.suppress_ragged_eofs: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
141 return '' |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
142 else: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
143 raise |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
145 def write(self, data): |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
146 |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
147 """Write DATA to the underlying SSL channel. Returns |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
148 number of bytes of DATA actually transmitted.""" |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
149 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 return self._sslobj.write(data) |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
151 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
152 def getpeercert(self, binary_form=False): |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
153 |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
154 """Returns a formatted version of the data in the |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
155 certificate provided by the other end of the SSL channel. |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
156 Return None if no certificate was provided, {} if a |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
157 certificate was provided, but not validated.""" |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
158 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
159 return self._sslobj.peer_certificate(binary_form) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
160 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
161 def cipher(self): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
162 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
163 if not self._sslobj: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
164 return None |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
165 else: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
166 return self._sslobj.cipher() |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
167 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
168 def send(self, data, flags=0): |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
169 if self._sslobj: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
170 if flags != 0: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
171 raise ValueError( |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
172 "non-zero flags not allowed in calls to send() on %s" % |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
173 self.__class__) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
174 while True: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
175 try: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
176 v = self._sslobj.write(data) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
177 except SSLError, x: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
178 if x.args[0] == SSL_ERROR_WANT_READ: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
179 return 0 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
180 elif x.args[0] == SSL_ERROR_WANT_WRITE: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
181 return 0 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
182 else: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
183 raise |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
184 else: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
185 return v |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
186 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
187 return self._sock.send(data, flags) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
188 |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
189 def sendto(self, data, flags_or_addr, addr=None): |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
190 if self._sslobj: |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
191 raise ValueError("sendto not allowed on instances of %s" % |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
192 self.__class__) |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
193 elif addr is None: |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
194 return self._sock.sendto(data, flags_or_addr) |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
195 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
196 return self._sock.sendto(data, flags_or_addr, addr) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
198 def sendall(self, data, flags=0): |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
199 if self._sslobj: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
200 if flags != 0: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
201 raise ValueError( |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
202 "non-zero flags not allowed in calls to sendall() on %s" % |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
203 self.__class__) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
204 amount = len(data) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
205 count = 0 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
206 while (count < amount): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
207 v = self.send(data[count:]) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
208 count += v |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
209 return amount |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
210 else: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
211 return socket.sendall(self, data, flags) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
212 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
213 def recv(self, buflen=1024, flags=0): |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
214 if self._sslobj: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
215 if flags != 0: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
216 raise ValueError( |
|
59844
1bf48a5ddead
Issue #3890: Fix recv() and recv_into() on non-blocking SSL sockets.
Antoine Pitrou <solipsis@pitrou.net>
parents:
58406
diff
changeset
|
217 "non-zero flags not allowed in calls to recv() on %s" % |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
218 self.__class__) |
|
59844
1bf48a5ddead
Issue #3890: Fix recv() and recv_into() on non-blocking SSL sockets.
Antoine Pitrou <solipsis@pitrou.net>
parents:
58406
diff
changeset
|
219 return self.read(buflen) |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
220 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
221 return self._sock.recv(buflen, flags) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
222 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
223 def recv_into(self, buffer, nbytes=None, flags=0): |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
224 if buffer and (nbytes is None): |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
225 nbytes = len(buffer) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
226 elif nbytes is None: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
227 nbytes = 1024 |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
228 if self._sslobj: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
229 if flags != 0: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
230 raise ValueError( |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
231 "non-zero flags not allowed in calls to recv_into() on %s" % |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
232 self.__class__) |
|
59844
1bf48a5ddead
Issue #3890: Fix recv() and recv_into() on non-blocking SSL sockets.
Antoine Pitrou <solipsis@pitrou.net>
parents:
58406
diff
changeset
|
233 tmp_buffer = self.read(nbytes) |
|
1bf48a5ddead
Issue #3890: Fix recv() and recv_into() on non-blocking SSL sockets.
Antoine Pitrou <solipsis@pitrou.net>
parents:
58406
diff
changeset
|
234 v = len(tmp_buffer) |
|
1bf48a5ddead
Issue #3890: Fix recv() and recv_into() on non-blocking SSL sockets.
Antoine Pitrou <solipsis@pitrou.net>
parents:
58406
diff
changeset
|
235 buffer[:v] = tmp_buffer |
|
1bf48a5ddead
Issue #3890: Fix recv() and recv_into() on non-blocking SSL sockets.
Antoine Pitrou <solipsis@pitrou.net>
parents:
58406
diff
changeset
|
236 return v |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
237 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
238 return self._sock.recv_into(buffer, nbytes, flags) |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
239 |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
240 def recvfrom(self, buflen=1024, flags=0): |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
241 if self._sslobj: |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
242 raise ValueError("recvfrom not allowed on instances of %s" % |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
243 self.__class__) |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
244 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
245 return self._sock.recvfrom(buflen, flags) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
247 def recvfrom_into(self, buffer, nbytes=None, flags=0): |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
248 if self._sslobj: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
249 raise ValueError("recvfrom_into not allowed on instances of %s" % |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
250 self.__class__) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
251 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
252 return self._sock.recvfrom_into(buffer, nbytes, flags) |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
253 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
254 def pending(self): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
255 if self._sslobj: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
256 return self._sslobj.pending() |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
257 else: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
258 return 0 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
259 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
260 def unwrap(self): |
|
48222
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
47848
diff
changeset
|
261 if self._sslobj: |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
47848
diff
changeset
|
262 s = self._sslobj.shutdown() |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
47848
diff
changeset
|
263 self._sslobj = None |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
47848
diff
changeset
|
264 return s |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
47848
diff
changeset
|
265 else: |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
47848
diff
changeset
|
266 raise ValueError("No SSL wrapper around " + str(self)) |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
47848
diff
changeset
|
267 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
268 def shutdown(self, how): |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
269 self._sslobj = None |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
270 socket.shutdown(self, how) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
271 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
272 def close(self): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
273 if self._makefile_refs < 1: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
274 self._sslobj = None |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
275 socket.close(self) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
276 else: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
277 self._makefile_refs -= 1 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
278 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
279 def do_handshake(self): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
280 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
281 """Perform a TLS/SSL handshake.""" |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
282 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
283 self._sslobj.do_handshake() |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
284 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
285 def connect(self, addr): |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
286 |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
287 """Connects to remote ADDR, and then wraps the connection in |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
288 an SSL channel.""" |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
289 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
290 # Here we assume that the socket is client-side, and not |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
291 # connected at the time of the call. We connect it, then wrap it. |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
292 if self._sslobj: |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
293 raise ValueError("attempt to connect already-connected SSLSocket!") |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
294 socket.connect(self, addr) |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
295 self._sslobj = _ssl.sslwrap(self._sock, False, self.keyfile, self.certfile, |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
296 self.cert_reqs, self.ssl_version, |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
297 self.ca_certs, self.ciphers) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
298 if self.do_handshake_on_connect: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
299 self.do_handshake() |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
300 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
301 def accept(self): |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
302 |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
303 """Accepts a new connection from a remote client, and returns |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
304 a tuple containing that new connection wrapped with a server-side |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
305 SSL channel, and the address of the remote client.""" |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
306 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
307 newsock, addr = socket.accept(self) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
308 return (SSLSocket(newsock, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
309 keyfile=self.keyfile, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
310 certfile=self.certfile, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
311 server_side=True, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
312 cert_reqs=self.cert_reqs, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
313 ssl_version=self.ssl_version, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
314 ca_certs=self.ca_certs, |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
315 ciphers=self.ciphers, |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
316 do_handshake_on_connect=self.do_handshake_on_connect, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
317 suppress_ragged_eofs=self.suppress_ragged_eofs), |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
318 addr) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
319 |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
320 def makefile(self, mode='r', bufsize=-1): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
321 |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
322 """Make and return a file-like object that |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
323 works with the SSL connection. Just use the code |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
324 from the socket module.""" |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
325 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
326 self._makefile_refs += 1 |
|
60909
d7c783ef4548
Issue #5238: Calling makefile() on an SSL object would prevent the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60904
diff
changeset
|
327 # close=True so as to decrement the reference count when done with |
|
d7c783ef4548
Issue #5238: Calling makefile() on an SSL object would prevent the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60904
diff
changeset
|
328 # the file-like object. |
|
d7c783ef4548
Issue #5238: Calling makefile() on an SSL object would prevent the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60904
diff
changeset
|
329 return _fileobject(self, mode, bufsize, close=True) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
330 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
331 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
332 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
333 def wrap_socket(sock, keyfile=None, certfile=None, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
334 server_side=False, cert_reqs=CERT_NONE, |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
335 ssl_version=PROTOCOL_SSLv23, ca_certs=None, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
336 do_handshake_on_connect=True, |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
337 suppress_ragged_eofs=True, ciphers=None): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
338 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
339 return SSLSocket(sock, keyfile=keyfile, certfile=certfile, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
340 server_side=server_side, cert_reqs=cert_reqs, |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
341 ssl_version=ssl_version, ca_certs=ca_certs, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
342 do_handshake_on_connect=do_handshake_on_connect, |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
343 suppress_ragged_eofs=suppress_ragged_eofs, |
|
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
344 ciphers=ciphers) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
345 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
346 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
347 # some utility functions |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
348 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
349 def cert_time_to_seconds(cert_time): |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
350 |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
351 """Takes a date-time string in standard ASN1_print form |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
352 ("MON DAY 24HOUR:MINUTE:SEC YEAR TIMEZONE") and return |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
353 a Python time value in seconds past the epoch.""" |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
354 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
355 import time |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
356 return time.mktime(time.strptime(cert_time, "%b %d %H:%M:%S %Y GMT")) |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
357 |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
358 PEM_HEADER = "-----BEGIN CERTIFICATE-----" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
359 PEM_FOOTER = "-----END CERTIFICATE-----" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
360 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
361 def DER_cert_to_PEM_cert(der_cert_bytes): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
362 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
363 """Takes a certificate in binary DER format and returns the |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
364 PEM version of it as a string.""" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
365 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
366 if hasattr(base64, 'standard_b64encode'): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
367 # preferred because older API gets line-length wrong |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
368 f = base64.standard_b64encode(der_cert_bytes) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
369 return (PEM_HEADER + '\n' + |
|
61032
fd3abf82ac96
Issue #8086: In :func:`ssl.DER_cert_to_PEM_cert()`, fix missing newline
Antoine Pitrou <solipsis@pitrou.net>
parents:
60985
diff
changeset
|
370 textwrap.fill(f, 64) + '\n' + |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
371 PEM_FOOTER + '\n') |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
372 else: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
373 return (PEM_HEADER + '\n' + |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
374 base64.encodestring(der_cert_bytes) + |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
375 PEM_FOOTER + '\n') |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
376 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
377 def PEM_cert_to_DER_cert(pem_cert_string): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
378 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
379 """Takes a certificate in ASCII PEM format and returns the |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
380 DER-encoded version of it as a byte sequence""" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
381 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
382 if not pem_cert_string.startswith(PEM_HEADER): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
383 raise ValueError("Invalid PEM encoding; must start with %s" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
384 % PEM_HEADER) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
385 if not pem_cert_string.strip().endswith(PEM_FOOTER): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
386 raise ValueError("Invalid PEM encoding; must end with %s" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
387 % PEM_FOOTER) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
388 d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)] |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
389 return base64.decodestring(d) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
390 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
391 def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None): |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
392 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
393 """Retrieve the certificate from the server at the specified address, |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
394 and return it as a PEM-encoded string. |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
395 If 'ca_certs' is specified, validate the server cert against it. |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
396 If 'ssl_version' is specified, use it in the connection attempt.""" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
397 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
398 host, port = addr |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
399 if (ca_certs is not None): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
400 cert_reqs = CERT_REQUIRED |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
401 else: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
402 cert_reqs = CERT_NONE |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
403 s = wrap_socket(socket(), ssl_version=ssl_version, |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
404 cert_reqs=cert_reqs, ca_certs=ca_certs) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
405 s.connect(addr) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
406 dercert = s.getpeercert(True) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
407 s.close() |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
408 return DER_cert_to_PEM_cert(dercert) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
409 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
410 def get_protocol_name(protocol_code): |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
411 if protocol_code == PROTOCOL_TLSv1: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
412 return "TLSv1" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
413 elif protocol_code == PROTOCOL_SSLv23: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
414 return "SSLv23" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
415 elif protocol_code == PROTOCOL_SSLv2: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
416 return "SSLv2" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
417 elif protocol_code == PROTOCOL_SSLv3: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
418 return "SSLv3" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
419 else: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
420 return "<unknown>" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
421 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
422 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
423 # a replacement for the old socket.ssl function |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
424 |
|
58406
feacaa6e40b8
#7730: remove spaces after functions names
Ezio Melotti <ezio.melotti@gmail.com>
parents:
50389
diff
changeset
|
425 def sslwrap_simple(sock, keyfile=None, certfile=None): |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
426 |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
427 """A replacement for the old socket.ssl function. Designed |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
428 for compability with Python 2.5 and earlier. Will disappear in |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
429 Python 3.0.""" |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
430 |
|
49340
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
431 if hasattr(sock, "_sock"): |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
432 sock = sock._sock |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
433 |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
434 ssl_sock = _ssl.sslwrap(sock, 0, keyfile, certfile, CERT_NONE, |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
435 PROTOCOL_SSLv23, None) |
|
49340
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
436 try: |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
437 sock.getpeername() |
|
50389
06f4c37d65f9
fix name collision issues
Benjamin Peterson <benjamin@python.org>
parents:
50386
diff
changeset
|
438 except socket_error: |
|
49340
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
439 # no, no connection yet |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
440 pass |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
441 else: |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
442 # yes, do the handshake |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
443 ssl_sock.do_handshake() |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
444 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
445 return ssl_sock |
