Mercurial > cpython-lru_cache-weakref
annotate Lib/ssl.py @ 80661:94de77bd0b4b 2.7
Issue #16194: document imp.load_dynamic problems
when read several extension modules from the same binary object file.
| author | Andrew Svetlov <andrew.svetlov@gmail.com> |
|---|---|
| date | Thu, 29 Nov 2012 19:51:28 +0200 |
| parents | f9122975fd80 |
| children | 3436769a7964 |
| 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 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
65 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
|
66 from _ssl import \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
67 SSL_ERROR_ZERO_RETURN, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
68 SSL_ERROR_WANT_READ, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
69 SSL_ERROR_WANT_WRITE, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
70 SSL_ERROR_WANT_X509_LOOKUP, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
71 SSL_ERROR_SYSCALL, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
72 SSL_ERROR_SSL, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
73 SSL_ERROR_WANT_CONNECT, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
74 SSL_ERROR_EOF, \ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
75 SSL_ERROR_INVALID_ERROR_CODE |
|
70001
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
76 from _ssl import PROTOCOL_SSLv3, PROTOCOL_SSLv23, PROTOCOL_TLSv1 |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
77 _PROTOCOL_NAMES = { |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
78 PROTOCOL_TLSv1: "TLSv1", |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
79 PROTOCOL_SSLv23: "SSLv23", |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
80 PROTOCOL_SSLv3: "SSLv3", |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
81 } |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
82 try: |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
83 from _ssl import PROTOCOL_SSLv2 |
|
74252
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
70001
diff
changeset
|
84 _SSLv2_IF_EXISTS = PROTOCOL_SSLv2 |
|
70001
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
85 except ImportError: |
|
74252
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
70001
diff
changeset
|
86 _SSLv2_IF_EXISTS = None |
|
70001
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
87 else: |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
88 _PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2" |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 |
|
60904
2c31dac694ff
Issue #7943: Fix circular reference created when instantiating an SSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60659
diff
changeset
|
90 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
|
91 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
|
92 import base64 # for DER-to-PEM translation |
|
60986
860073505aca
Merged revisions 80507 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
93 import errno |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
94 |
|
74252
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
70001
diff
changeset
|
95 # Disable weak or insecure ciphers by default |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
70001
diff
changeset
|
96 # (OpenSSL's default setting is 'DEFAULT:!aNULL:!eNULL') |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
70001
diff
changeset
|
97 _DEFAULT_CIPHERS = 'DEFAULT:!aNULL:!eNULL:!LOW:!EXPORT:!SSLv2' |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
70001
diff
changeset
|
98 |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
70001
diff
changeset
|
99 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
100 class SSLSocket(socket): |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
102 """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
|
103 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
|
104 provides read and write methods over that channel.""" |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
105 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
106 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
|
107 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
|
108 ssl_version=PROTOCOL_SSLv23, ca_certs=None, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
109 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
|
110 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
|
111 socket.__init__(self, _sock=sock._sock) |
|
60906
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59908
diff
changeset
|
112 # The initializer for socket overrides the methods send(), recv(), etc. |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59908
diff
changeset
|
113 # in the instancce, which we don't need -- but we want to provide the |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59908
diff
changeset
|
114 # methods defined in SSLSocket. |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59908
diff
changeset
|
115 for attr in _delegate_methods: |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59908
diff
changeset
|
116 try: |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59908
diff
changeset
|
117 delattr(self, attr) |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59908
diff
changeset
|
118 except AttributeError: |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59908
diff
changeset
|
119 pass |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
120 |
|
74252
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
70001
diff
changeset
|
121 if ciphers is None and ssl_version != _SSLv2_IF_EXISTS: |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
70001
diff
changeset
|
122 ciphers = _DEFAULT_CIPHERS |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
70001
diff
changeset
|
123 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
124 if certfile and not keyfile: |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 keyfile = certfile |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
126 # see if it's connected |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
127 try: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
128 socket.getpeername(self) |
|
60986
860073505aca
Merged revisions 80507 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
129 except socket_error, e: |
|
860073505aca
Merged revisions 80507 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
130 if e.errno != errno.ENOTCONN: |
|
860073505aca
Merged revisions 80507 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
131 raise |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
132 # no, no connection yet |
|
68047
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
133 self._connected = False |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
134 self._sslobj = None |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
135 else: |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
136 # yes, create the SSL object |
|
68047
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
137 self._connected = True |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
138 self._sslobj = _ssl.sslwrap(self._sock, server_side, |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
139 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
|
140 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
|
141 ciphers) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
142 if do_handshake_on_connect: |
|
60934
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60912
diff
changeset
|
143 self.do_handshake() |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 self.keyfile = keyfile |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
145 self.certfile = certfile |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
146 self.cert_reqs = cert_reqs |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
147 self.ssl_version = ssl_version |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 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
|
149 self.ciphers = ciphers |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
150 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
|
151 self.suppress_ragged_eofs = suppress_ragged_eofs |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
152 self._makefile_refs = 0 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
154 def read(self, len=1024): |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
155 |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
156 """Read up to LEN bytes and return them. |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
157 Return zero-length string on EOF.""" |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
158 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
159 try: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
160 return self._sslobj.read(len) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
161 except SSLError, x: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
162 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
|
163 return '' |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
164 else: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
165 raise |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
166 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
167 def write(self, data): |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
168 |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
169 """Write DATA to the underlying SSL channel. Returns |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
170 number of bytes of DATA actually transmitted.""" |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
171 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
172 return self._sslobj.write(data) |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
173 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
174 def getpeercert(self, binary_form=False): |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
175 |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
176 """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
|
177 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
|
178 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
|
179 certificate was provided, but not validated.""" |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
180 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
181 return self._sslobj.peer_certificate(binary_form) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
182 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
183 def cipher(self): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
184 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
185 if not self._sslobj: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
186 return None |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
187 else: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
188 return self._sslobj.cipher() |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
190 def send(self, data, flags=0): |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
191 if self._sslobj: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
192 if flags != 0: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
193 raise ValueError( |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
194 "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
|
195 self.__class__) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
196 while True: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
197 try: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
198 v = self._sslobj.write(data) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
199 except SSLError, x: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
200 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
|
201 return 0 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
202 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
|
203 return 0 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
204 else: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
205 raise |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
206 else: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
207 return v |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
208 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
209 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
|
210 |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
211 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
|
212 if self._sslobj: |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
213 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
|
214 self.__class__) |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
215 elif addr is None: |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
216 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
|
217 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
218 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
|
219 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
220 def sendall(self, data, flags=0): |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
221 if self._sslobj: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
222 if flags != 0: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
223 raise ValueError( |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
224 "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
|
225 self.__class__) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
226 amount = len(data) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
227 count = 0 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
228 while (count < amount): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
229 v = self.send(data[count:]) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
230 count += v |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
231 return amount |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
232 else: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
233 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
|
234 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
235 def recv(self, buflen=1024, flags=0): |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
236 if self._sslobj: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
237 if flags != 0: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
238 raise ValueError( |
|
59908
7f435c385da2
Merged revisions 79226 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58407
diff
changeset
|
239 "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
|
240 self.__class__) |
|
59908
7f435c385da2
Merged revisions 79226 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58407
diff
changeset
|
241 return self.read(buflen) |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
242 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
243 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
|
244 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
245 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
|
246 if buffer and (nbytes is None): |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
247 nbytes = len(buffer) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
248 elif nbytes is None: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
249 nbytes = 1024 |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
250 if self._sslobj: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
251 if flags != 0: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
252 raise ValueError( |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
253 "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
|
254 self.__class__) |
|
59908
7f435c385da2
Merged revisions 79226 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58407
diff
changeset
|
255 tmp_buffer = self.read(nbytes) |
|
7f435c385da2
Merged revisions 79226 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58407
diff
changeset
|
256 v = len(tmp_buffer) |
|
7f435c385da2
Merged revisions 79226 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58407
diff
changeset
|
257 buffer[:v] = tmp_buffer |
|
7f435c385da2
Merged revisions 79226 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58407
diff
changeset
|
258 return v |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
259 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
260 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
|
261 |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
262 def recvfrom(self, buflen=1024, flags=0): |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
263 if self._sslobj: |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
264 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
|
265 self.__class__) |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
266 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
267 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
|
268 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
269 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
|
270 if self._sslobj: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
271 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
|
272 self.__class__) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
273 else: |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
274 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
|
275 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
276 def pending(self): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
277 if self._sslobj: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
278 return self._sslobj.pending() |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
279 else: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
280 return 0 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
281 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
282 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
|
283 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
|
284 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
|
285 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
|
286 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
|
287 else: |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
47848
diff
changeset
|
288 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
|
289 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
290 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
|
291 self._sslobj = None |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
292 socket.shutdown(self, how) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
293 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
294 def close(self): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
295 if self._makefile_refs < 1: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
296 self._sslobj = None |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
297 socket.close(self) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
298 else: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
299 self._makefile_refs -= 1 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
300 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
301 def do_handshake(self): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
302 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
303 """Perform a TLS/SSL handshake.""" |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
304 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
305 self._sslobj.do_handshake() |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
306 |
|
68047
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
307 def _real_connect(self, addr, return_errno): |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
308 # 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
|
309 # connected at the time of the call. We connect it, then wrap it. |
|
68047
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
310 if self._connected: |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
311 raise ValueError("attempt to connect already-connected SSLSocket!") |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
312 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
|
313 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
|
314 self.ca_certs, self.ciphers) |
|
68047
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
315 try: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
316 socket.connect(self, addr) |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
317 if self.do_handshake_on_connect: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
318 self.do_handshake() |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
319 except socket_error as e: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
320 if return_errno: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
321 return e.errno |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
322 else: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
323 self._sslobj = None |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
324 raise e |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
325 self._connected = True |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
326 return 0 |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
327 |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
328 def connect(self, addr): |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
329 """Connects to remote ADDR, and then wraps the connection in |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
330 an SSL channel.""" |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
331 self._real_connect(addr, False) |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
332 |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
333 def connect_ex(self, addr): |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
334 """Connects to remote ADDR, and then wraps the connection in |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
335 an SSL channel.""" |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
336 return self._real_connect(addr, True) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
337 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
338 def accept(self): |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
339 |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
340 """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
|
341 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
|
342 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
|
343 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
42868
diff
changeset
|
344 newsock, addr = socket.accept(self) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
345 return (SSLSocket(newsock, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
346 keyfile=self.keyfile, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
347 certfile=self.certfile, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
348 server_side=True, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
349 cert_reqs=self.cert_reqs, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
350 ssl_version=self.ssl_version, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
351 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
|
352 ciphers=self.ciphers, |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
353 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
|
354 suppress_ragged_eofs=self.suppress_ragged_eofs), |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
355 addr) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
356 |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
357 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
|
358 |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48222
diff
changeset
|
359 """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
|
360 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
|
361 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
|
362 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
363 self._makefile_refs += 1 |
|
60912
068a2e7157ac
Merged revisions 80428 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60906
diff
changeset
|
364 # close=True so as to decrement the reference count when done with |
|
068a2e7157ac
Merged revisions 80428 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60906
diff
changeset
|
365 # the file-like object. |
|
068a2e7157ac
Merged revisions 80428 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60906
diff
changeset
|
366 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
|
367 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
368 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
369 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
370 def wrap_socket(sock, keyfile=None, certfile=None, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
371 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
|
372 ssl_version=PROTOCOL_SSLv23, ca_certs=None, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
373 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
|
374 suppress_ragged_eofs=True, ciphers=None): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
375 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
376 return SSLSocket(sock, keyfile=keyfile, certfile=certfile, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43056
diff
changeset
|
377 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
|
378 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
|
379 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
|
380 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
|
381 ciphers=ciphers) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
382 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
383 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
384 # some utility functions |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
385 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
386 def cert_time_to_seconds(cert_time): |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
387 |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
388 """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
|
389 ("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
|
390 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
|
391 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
392 import time |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
393 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
|
394 |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
395 PEM_HEADER = "-----BEGIN CERTIFICATE-----" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
396 PEM_FOOTER = "-----END CERTIFICATE-----" |
|
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 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
|
399 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
400 """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
|
401 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
|
402 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
403 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
|
404 # 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
|
405 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
|
406 return (PEM_HEADER + '\n' + |
|
61033
316b57017d0f
Merged revisions 80557 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60986
diff
changeset
|
407 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
|
408 PEM_FOOTER + '\n') |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
409 else: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
410 return (PEM_HEADER + '\n' + |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
411 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
|
412 PEM_FOOTER + '\n') |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
413 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
414 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
|
415 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
416 """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
|
417 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
|
418 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
419 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
|
420 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
|
421 % PEM_HEADER) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
422 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
|
423 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
|
424 % PEM_FOOTER) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
425 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
|
426 return base64.decodestring(d) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
427 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
428 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
|
429 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
430 """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
|
431 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
|
432 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
|
433 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
|
434 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
435 host, port = addr |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
436 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
|
437 cert_reqs = CERT_REQUIRED |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
438 else: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
439 cert_reqs = CERT_NONE |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
440 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
|
441 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
|
442 s.connect(addr) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
443 dercert = s.getpeercert(True) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
444 s.close() |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
445 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
|
446 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
447 def get_protocol_name(protocol_code): |
|
70001
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
448 return _PROTOCOL_NAMES.get(protocol_code, '<unknown>') |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
449 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43325
diff
changeset
|
450 |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
451 # 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
|
452 |
|
58407
a9d518fada59
Merged revisions 77595 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
49340
diff
changeset
|
453 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
|
454 |
|
43056
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
455 """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
|
456 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
|
457 Python 3.0.""" |
|
3bf1b8b34080
Added docstrings to methods and functions.
Bill Janssen <janssen@parc.com>
parents:
43008
diff
changeset
|
458 |
|
49340
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
459 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
|
460 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
|
461 |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
462 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
|
463 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
|
464 try: |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
465 sock.getpeername() |
|
50389
06f4c37d65f9
fix name collision issues
Benjamin Peterson <benjamin@python.org>
parents:
50386
diff
changeset
|
466 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
|
467 # 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
|
468 pass |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
469 else: |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
470 # 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
|
471 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
|
472 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
45468
diff
changeset
|
473 return ssl_sock |
