blob: 89ae6a1c2677af4cddf8169b0d71150dc66373f1 [file] [log] [blame]
Jonathan Ballet6381da32011-07-20 16:43:38 +09001.. _openssl-ssl:
2
3:py:mod:`SSL` --- An interface to the SSL-specific parts of OpenSSL
4===================================================================
5
Jonathan Balletc9e066c2011-07-17 22:56:05 +09006.. py:module:: OpenSSL.SSL
Jonathan Ballet6381da32011-07-20 16:43:38 +09007 :synopsis: An interface to the SSL-specific parts of OpenSSL
Jonathan Balletc9e066c2011-07-17 22:56:05 +09008
Jonathan Balletc9e066c2011-07-17 22:56:05 +09009
10This module handles things specific to SSL. There are two objects defined:
11Context, Connection.
12
13.. py:data:: SSLv2_METHOD
Jonathan Ballet6381da32011-07-20 16:43:38 +090014 SSLv3_METHOD
15 SSLv23_METHOD
16 TLSv1_METHOD
Jean-Paul Calderone1461c492013-10-03 16:05:00 -040017 TLSv1_1_METHOD
18 TLSv1_2_METHOD
Jonathan Balletc9e066c2011-07-17 22:56:05 +090019
20 These constants represent the different SSL methods to use when creating a
Jean-Paul Calderone1461c492013-10-03 16:05:00 -040021 context object. If the underlying OpenSSL build is missing support for any
22 of these protocols, constructing a :py:class:`Context` using the
23 corresponding :py:const:`*_METHOD` will raise an exception.
Jonathan Balletc9e066c2011-07-17 22:56:05 +090024
25
26.. py:data:: VERIFY_NONE
Jonathan Ballet6381da32011-07-20 16:43:38 +090027 VERIFY_PEER
28 VERIFY_FAIL_IF_NO_PEER_CERT
Jonathan Balletc9e066c2011-07-17 22:56:05 +090029
30 These constants represent the verification mode used by the Context
31 object's :py:meth:`set_verify` method.
32
33
34.. py:data:: FILETYPE_PEM
Jonathan Ballet6381da32011-07-20 16:43:38 +090035 FILETYPE_ASN1
Jonathan Balletc9e066c2011-07-17 22:56:05 +090036
37 File type constants used with the :py:meth:`use_certificate_file` and
38 :py:meth:`use_privatekey_file` methods of Context objects.
39
40
41.. py:data:: OP_SINGLE_DH_USE
Jean-Paul Calderone1461c492013-10-03 16:05:00 -040042
43 Constant used with :py:meth:`set_options` of Context objects.
44
45 When this option is used, a new key will always be created when using
46 ephemeral Diffie-Hellman.
47
48
49.. py:data:: OP_EPHEMERAL_RSA
50
51 Constant used with :py:meth:`set_options` of Context objects.
52
53 When this option is used, ephemeral RSA keys will always be used when doing
54 RSA operations.
55
56
57.. py:data:: OP_NO_TICKET
58
59 Constant used with :py:meth:`set_options` of Context objects.
60
61 When this option is used, the session ticket extension will not be used.
62
63
64.. py:data:: OP_NO_COMPRESSION
65
66 Constant used with :py:meth:`set_options` of Context objects.
67
68 When this option is used, compression will not be used.
69
70
71.. py:data:: OP_NO_SSLv2
Jonathan Ballet6381da32011-07-20 16:43:38 +090072 OP_NO_SSLv3
73 OP_NO_TLSv1
Jean-Paul Calderone1461c492013-10-03 16:05:00 -040074 OP_NO_TLSv1_1
75 OP_NO_TLSv1_2
Jonathan Balletc9e066c2011-07-17 22:56:05 +090076
77 Constants used with :py:meth:`set_options` of Context objects.
78
Jean-Paul Calderone1461c492013-10-03 16:05:00 -040079 Each of these options disables one version of the SSL/TLS protocol. This
80 is interesting if you're using e.g. :py:const:`SSLv23_METHOD` to get an
81 SSLv2-compatible handshake, but don't want to use SSLv2. If the underlying
82 OpenSSL build is missing support for any of these protocols, the
83 :py:const:`OP_NO_*` constant may be undefined.
Jonathan Balletc9e066c2011-07-17 22:56:05 +090084
85
86.. py:data:: SSLEAY_VERSION
Jonathan Ballet6381da32011-07-20 16:43:38 +090087 SSLEAY_CFLAGS
88 SSLEAY_BUILT_ON
89 SSLEAY_PLATFORM
90 SSLEAY_DIR
Jonathan Balletc9e066c2011-07-17 22:56:05 +090091
92 Constants used with :py:meth:`SSLeay_version` to specify what OpenSSL version
93 information to retrieve. See the man page for the :py:func:`SSLeay_version` C
94 API for details.
95
Jean-Paul Calderone1461c492013-10-03 16:05:00 -040096
Jean-Paul Calderone8e8f90c2012-02-08 13:16:26 -050097.. py:data:: SESS_CACHE_OFF
98 SESS_CACHE_CLIENT
99 SESS_CACHE_SERVER
100 SESS_CACHE_BOTH
101 SESS_CACHE_NO_AUTO_CLEAR
102 SESS_CACHE_NO_INTERNAL_LOOKUP
103 SESS_CACHE_NO_INTERNAL_STORE
104 SESS_CACHE_NO_INTERNAL
105
106 Constants used with :py:meth:`Context.set_session_cache_mode` to specify
107 the behavior of the session cache and potential session reuse. See the man
108 page for the :py:func:`SSL_CTX_set_session_cache_mode` C API for details.
109
110 .. versionadded:: 0.14
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900111
Jean-Paul Calderone1461c492013-10-03 16:05:00 -0400112
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900113.. py:data:: OPENSSL_VERSION_NUMBER
114
115 An integer giving the version number of the OpenSSL library used to build this
116 version of pyOpenSSL. See the man page for the :py:func:`SSLeay_version` C API
117 for details.
118
119
120.. py:function:: SSLeay_version(type)
121
122 Retrieve a string describing some aspect of the underlying OpenSSL version. The
123 type passed in should be one of the :py:const:`SSLEAY_*` constants defined in
124 this module.
125
126
127.. py:data:: ContextType
128
129 See :py:class:`Context`.
130
131
132.. py:class:: Context(method)
133
134 A class representing SSL contexts. Contexts define the parameters of one or
135 more SSL connections.
136
137 *method* should be :py:const:`SSLv2_METHOD`, :py:const:`SSLv3_METHOD`,
Jean-Paul Calderone1461c492013-10-03 16:05:00 -0400138 :py:const:`SSLv23_METHOD`, :py:const:`TLSv1_METHOD`, :py:const:`TLSv1_1_METHOD`,
139 or :py:const:`TLSv1_2_METHOD`.
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900140
141
Jean-Paul Calderone6c896fe2012-02-16 08:10:04 -0500142.. py:class:: Session()
143
144 A class representing an SSL session. A session defines certain connection
145 parameters which may be re-used to speed up the setup of subsequent
146 connections.
147
148 .. versionadded:: 0.14
149
150
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900151.. py:data:: ConnectionType
152
153 See :py:class:`Connection`.
154
155
156.. py:class:: Connection(context, socket)
157
158 A class representing SSL connections.
159
160 *context* should be an instance of :py:class:`Context` and *socket*
161 should be a socket [#connection-context-socket]_ object. *socket* may be
162 *None*; in this case, the Connection is created with a memory BIO: see
163 the :py:meth:`bio_read`, :py:meth:`bio_write`, and :py:meth:`bio_shutdown`
164 methods.
165
166.. py:exception:: Error
167
168 This exception is used as a base class for the other SSL-related
169 exceptions, but may also be raised directly.
170
171 Whenever this exception is raised directly, it has a list of error messages
172 from the OpenSSL error queue, where each item is a tuple *(lib, function,
173 reason)*. Here *lib*, *function* and *reason* are all strings, describing
174 where and what the problem is. See :manpage:`err(3)` for more information.
175
176
177.. py:exception:: ZeroReturnError
178
179 This exception matches the error return code
180 :py:data:`SSL_ERROR_ZERO_RETURN`, and is raised when the SSL Connection has
181 been closed. In SSL 3.0 and TLS 1.0, this only occurs if a closure alert has
182 occurred in the protocol, i.e. the connection has been closed cleanly. Note
183 that this does not necessarily mean that the transport layer (e.g. a socket)
184 has been closed.
185
186 It may seem a little strange that this is an exception, but it does match an
187 :py:data:`SSL_ERROR` code, and is very convenient.
188
189
190.. py:exception:: WantReadError
191
192 The operation did not complete; the same I/O method should be called again
193 later, with the same arguments. Any I/O method can lead to this since new
194 handshakes can occur at any time.
195
196 The wanted read is for **dirty** data sent over the network, not the
197 **clean** data inside the tunnel. For a socket based SSL connection,
198 **read** means data coming at us over the network. Until that read
199 succeeds, the attempted :py:meth:`OpenSSL.SSL.Connection.recv`,
200 :py:meth:`OpenSSL.SSL.Connection.send`, or
201 :py:meth:`OpenSSL.SSL.Connection.do_handshake` is prevented or incomplete. You
202 probably want to :py:meth:`select()` on the socket before trying again.
203
204
205.. py:exception:: WantWriteError
206
207 See :py:exc:`WantReadError`. The socket send buffer may be too full to
208 write more data.
209
210
211.. py:exception:: WantX509LookupError
212
213 The operation did not complete because an application callback has asked to be
214 called again. The I/O method should be called again later, with the same
215 arguments.
216
217 .. note:: This won't occur in this version, as there are no such
218 callbacks in this version.
219
220
221.. py:exception:: SysCallError
222
223 The :py:exc:`SysCallError` occurs when there's an I/O error and OpenSSL's
224 error queue does not contain any information. This can mean two things: An
225 error in the transport protocol, or an end of file that violates the protocol.
226 The parameter to the exception is always a pair *(errnum,
227 errstr)*.
228
229
230
231.. _openssl-context:
232
233Context objects
234---------------
235
236Context objects have the following methods:
237
238.. :py:class:: OpenSSL.SSL.Context
239
240.. py:method:: Context.check_privatekey()
241
242 Check if the private key (loaded with :py:meth:`use_privatekey`) matches the
243 certificate (loaded with :py:meth:`use_certificate`). Returns
244 :py:data:`None` if they match, raises :py:exc:`Error` otherwise.
245
246
247.. py:method:: Context.get_app_data()
248
249 Retrieve application data as set by :py:meth:`set_app_data`.
250
251
252.. py:method:: Context.get_cert_store()
253
254 Retrieve the certificate store (a X509Store object) that the context uses.
Alex Gaynor6b5028d2014-03-31 14:23:57 -0700255 This can be used to add "trusted" certificates without using the
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900256 :py:meth:`load_verify_locations` method.
257
258
259.. py:method:: Context.get_timeout()
260
261 Retrieve session timeout, as set by :py:meth:`set_timeout`. The default is 300
262 seconds.
263
264
265.. py:method:: Context.get_verify_depth()
266
267 Retrieve the Context object's verify depth, as set by
268 :py:meth:`set_verify_depth`.
269
270
271.. py:method:: Context.get_verify_mode()
272
273 Retrieve the Context object's verify mode, as set by :py:meth:`set_verify`.
274
275
276.. py:method:: Context.load_client_ca(pemfile)
277
278 Read a file with PEM-formatted certificates that will be sent to the client
279 when requesting a client certificate.
280
281
282.. py:method:: Context.set_client_ca_list(certificate_authorities)
283
284 Replace the current list of preferred certificate signers that would be
285 sent to the client when requesting a client certificate with the
286 *certificate_authorities* sequence of :py:class:`OpenSSL.crypto.X509Name`'s.
287
288 .. versionadded:: 0.10
289
290
291.. py:method:: Context.add_client_ca(certificate_authority)
292
293 Extract a :py:class:`OpenSSL.crypto.X509Name` from the *certificate_authority*
294 :py:class:`OpenSSL.crypto.X509` certificate and add it to the list of preferred
295 certificate signers sent to the client when requesting a client certificate.
296
297 .. versionadded:: 0.10
298
299
300.. py:method:: Context.load_verify_locations(pemfile, capath)
301
302 Specify where CA certificates for verification purposes are located. These
303 are trusted certificates. Note that the certificates have to be in PEM
304 format. If capath is passed, it must be a directory prepared using the
Jonathan Ballet6381da32011-07-20 16:43:38 +0900305 ``c_rehash`` tool included with OpenSSL. Either, but not both, of
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900306 *pemfile* or *capath* may be :py:data:`None`.
307
308
309.. py:method:: Context.set_default_verify_paths()
310
311 Specify that the platform provided CA certificates are to be used for
312 verification purposes. This method may not work properly on OS X.
313
314
315.. py:method:: Context.load_tmp_dh(dhfile)
316
317 Load parameters for Ephemeral Diffie-Hellman from *dhfile*.
318
Jean-Paul Calderonec09fd582014-04-18 22:00:10 -0400319
Jean-Paul Calderone3e4e3352014-04-19 09:28:28 -0400320.. py:method:: Context.set_tmp_ecdh(curve)
Alex Gaynord5419e22014-01-19 21:03:36 -0600321
Andy Lutomirskif05a2732014-03-13 17:22:25 -0700322 Select a curve to use for ECDHE key exchange.
Alex Gaynord5419e22014-01-19 21:03:36 -0600323
Jean-Paul Calderonec09fd582014-04-18 22:00:10 -0400324 The valid values of *curve* are the objects returned by
325 :py:func:`OpenSSL.crypto.get_elliptic_curves` or
326 :py:func:`OpenSSL.crypto.get_elliptic_curve`.
Alex Gaynord5419e22014-01-19 21:03:36 -0600327
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900328
329.. py:method:: Context.set_app_data(data)
330
331 Associate *data* with this Context object. *data* can be retrieved
332 later using the :py:meth:`get_app_data` method.
333
334
335.. py:method:: Context.set_cipher_list(ciphers)
336
337 Set the list of ciphers to be used in this context. See the OpenSSL manual for
338 more information (e.g. :manpage:`ciphers(1)`)
339
340
341.. py:method:: Context.set_info_callback(callback)
342
343 Set the information callback to *callback*. This function will be called
344 from time to time during SSL handshakes.
345
Jonathan Ballet6381da32011-07-20 16:43:38 +0900346 *callback* should take three arguments: a Connection object and two integers.
347 The first integer specifies where in the SSL handshake the function was
348 called, and the other the return code from a (possibly failed) internal
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900349 function call.
350
351
352.. py:method:: Context.set_options(options)
353
354 Add SSL options. Options you have set before are not cleared!
355 This method should be used with the :py:const:`OP_*` constants.
356
357
Jean-Paul Calderone21641542011-09-11 09:18:14 -0400358.. py:method:: Context.set_mode(mode)
359
360 Add SSL mode. Modes you have set before are not cleared! This method should
361 be used with the :py:const:`MODE_*` constants.
362
363
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900364.. py:method:: Context.set_passwd_cb(callback[, userdata])
365
366 Set the passphrase callback to *callback*. This function will be called
367 when a private key with a passphrase is loaded. *callback* must accept
368 three positional arguments. First, an integer giving the maximum length of
369 the passphrase it may return. If the returned passphrase is longer than
370 this, it will be truncated. Second, a boolean value which will be true if
371 the user should be prompted for the passphrase twice and the callback should
372 verify that the two values supplied are equal. Third, the value given as the
373 *userdata* parameter to :py:meth:`set_passwd_cb`. If an error occurs,
374 *callback* should return a false value (e.g. an empty string).
375
376
Jean-Paul Calderone8e8f90c2012-02-08 13:16:26 -0500377.. py:method:: Context.set_session_cache_mode(mode)
378
379 Set the behavior of the session cache used by all connections using this
380 Context. The previously set mode is returned. See :py:const:`SESS_CACHE_*`
381 for details about particular modes.
382
383 .. versionadded:: 0.14
384
385
386.. py:method:: Context.get_session_cache_mode()
387
388 Get the current session cache mode.
389
390 .. versionadded:: 0.14
391
392
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900393.. py:method:: Context.set_session_id(name)
394
395 Set the context *name* within which a session can be reused for this
396 Context object. This is needed when doing session resumption, because there is
397 no way for a stored session to know which Context object it is associated with.
398 *name* may be any binary data.
399
400
401.. py:method:: Context.set_timeout(timeout)
402
403 Set the timeout for newly created sessions for this Context object to
404 *timeout*. *timeout* must be given in (whole) seconds. The default
405 value is 300 seconds. See the OpenSSL manual for more information (e.g.
406 :manpage:`SSL_CTX_set_timeout(3)`).
407
408
409.. py:method:: Context.set_verify(mode, callback)
410
411 Set the verification flags for this Context object to *mode* and specify
412 that *callback* should be used for verification callbacks. *mode* should be
413 one of :py:const:`VERIFY_NONE` and :py:const:`VERIFY_PEER`. If
414 :py:const:`VERIFY_PEER` is used, *mode* can be OR:ed with
415 :py:const:`VERIFY_FAIL_IF_NO_PEER_CERT` and :py:const:`VERIFY_CLIENT_ONCE`
416 to further control the behaviour.
417
418 *callback* should take five arguments: A Connection object, an X509 object,
419 and three integer variables, which are in turn potential error number, error
420 depth and return code. *callback* should return true if verification passes
421 and false otherwise.
422
423
424.. py:method:: Context.set_verify_depth(depth)
425
426 Set the maximum depth for the certificate chain verification that shall be
427 allowed for this Context object.
428
429
430.. py:method:: Context.use_certificate(cert)
431
432 Use the certificate *cert* which has to be a X509 object.
433
434
435.. py:method:: Context.add_extra_chain_cert(cert)
436
437 Adds the certificate *cert*, which has to be a X509 object, to the
438 certificate chain presented together with the certificate.
439
440
441.. py:method:: Context.use_certificate_chain_file(file)
442
443 Load a certificate chain from *file* which must be PEM encoded.
444
445
446.. py:method:: Context.use_privatekey(pkey)
447
448 Use the private key *pkey* which has to be a PKey object.
449
450
451.. py:method:: Context.use_certificate_file(file[, format])
452
453 Load the first certificate found in *file*. The certificate must be in the
454 format specified by *format*, which is either :py:const:`FILETYPE_PEM` or
455 :py:const:`FILETYPE_ASN1`. The default is :py:const:`FILETYPE_PEM`.
456
457
458.. py:method:: Context.use_privatekey_file(file[, format])
459
460 Load the first private key found in *file*. The private key must be in the
461 format specified by *format*, which is either :py:const:`FILETYPE_PEM` or
462 :py:const:`FILETYPE_ASN1`. The default is :py:const:`FILETYPE_PEM`.
463
464
465.. py:method:: Context.set_tlsext_servername_callback(callback)
466
467 Specify a one-argument callable to use as the TLS extension server name
Jonathan Ballet6381da32011-07-20 16:43:38 +0900468 callback. When a connection using the server name extension is made using
469 this context, the callback will be invoked with the :py:class:`Connection`
470 instance.
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900471
472 .. versionadded:: 0.13
473
474
Cory Benfieldbe3e7b82014-05-10 09:48:55 +0100475.. py:method:: Context.set_npn_advertise_callback(callback)
476
477 Specify a callback function that will be called when offering `Next
478 Protocol Negotiation
479 <https://technotes.googlecode.com/git/nextprotoneg.html>`_ as a server.
480
481 *callback* should be the callback function. It will be invoked with one
482 argument, the :py:class:`Connection` instance. It should return a list of
483 bytestrings representing the advertised protocols, like
484 ``[b'http/1.1', b'spdy/2']``.
485
486 .. versionadded:: 0.15
487
488
489.. py:method:: Context.set_npn_select_callback(callback):
490
491 Specify a callback function that will be called when a server offers Next
492 Protocol Negotiation options.
493
494 *callback* should be the callback function. It will be invoked with two
495 arguments: the :py:class:`Connection`, and a list of offered protocols as
496 bytestrings, e.g. ``[b'http/1.1', b'spdy/2']``. It should return one of
497 those bytestrings, the chosen protocol.
498
499 .. versionadded:: 0.15
500
Cory Benfield12eae892014-06-07 15:42:56 +0100501.. py:method:: Context.set_alpn_protos(protos)
502
503 Specify the protocols that the client is prepared to speak after the TLS
Cory Benfielde58a93a2015-04-13 18:26:05 -0400504 connection has been negotiated using Application Layer Protocol
Cory Benfield12eae892014-06-07 15:42:56 +0100505 Negotiation.
506
507 *protos* should be a list of protocols that the client is offering, each
508 as a bytestring. For example, ``[b'http/1.1', b'spdy/2']``.
509
510
511.. py:method:: Context.set_alpn_select_callback(callback)
512
513 Specify a callback function that will be called on the server when a client
514 offers protocols using Application Layer Protocol Negotiation.
515
516 *callback* should be the callback function. It will be invoked with two
Cory Benfielde58a93a2015-04-13 18:26:05 -0400517 arguments: the :py:class:`Connection` and a list of offered protocols as
Cory Benfield12eae892014-06-07 15:42:56 +0100518 bytestrings, e.g. ``[b'http/1.1', b'spdy/2']``. It should return one of
519 these bytestrings, the chosen protocol.
520
Cory Benfieldbe3e7b82014-05-10 09:48:55 +0100521
Jean-Paul Calderone6c896fe2012-02-16 08:10:04 -0500522.. _openssl-session:
523
524Session objects
525---------------
526
527Session objects have no methods.
528
529
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900530.. _openssl-connection:
531
532Connection objects
533------------------
534
535Connection objects have the following methods:
536
537.. py:method:: Connection.accept()
538
539 Call the :py:meth:`accept` method of the underlying socket and set up SSL on the
540 returned socket, using the Context object supplied to this Connection object at
541 creation. Returns a pair *(conn, address)*. where *conn* is the new
542 Connection object created, and *address* is as returned by the socket's
543 :py:meth:`accept`.
544
545
546.. py:method:: Connection.bind(address)
547
548 Call the :py:meth:`bind` method of the underlying socket.
549
550
551.. py:method:: Connection.close()
552
553 Call the :py:meth:`close` method of the underlying socket. Note: If you want
554 correct SSL closure, you need to call the :py:meth:`shutdown` method first.
555
556
557.. py:method:: Connection.connect(address)
558
559 Call the :py:meth:`connect` method of the underlying socket and set up SSL on the
560 socket, using the Context object supplied to this Connection object at
561 creation.
562
563
564.. py:method:: Connection.connect_ex(address)
565
566 Call the :py:meth:`connect_ex` method of the underlying socket and set up SSL on
567 the socket, using the Context object supplied to this Connection object at
568 creation. Note that if the :py:meth:`connect_ex` method of the socket doesn't
569 return 0, SSL won't be initialized.
570
571
572.. py:method:: Connection.do_handshake()
573
574 Perform an SSL handshake (usually called after :py:meth:`renegotiate` or one of
575 :py:meth:`set_accept_state` or :py:meth:`set_accept_state`). This can raise the
576 same exceptions as :py:meth:`send` and :py:meth:`recv`.
577
578
579.. py:method:: Connection.fileno()
580
581 Retrieve the file descriptor number for the underlying socket.
582
583
584.. py:method:: Connection.listen(backlog)
585
586 Call the :py:meth:`listen` method of the underlying socket.
587
588
589.. py:method:: Connection.get_app_data()
590
591 Retrieve application data as set by :py:meth:`set_app_data`.
592
593
594.. py:method:: Connection.get_cipher_list()
595
596 Retrieve the list of ciphers used by the Connection object. WARNING: This API
597 has changed. It used to take an optional parameter and just return a string,
598 but not it returns the entire list in one go.
599
600
Jim Shaver2637c3b2015-04-27 00:35:09 -0400601.. py:method:: Connection.get_protocol_version()
602
Jim Shaverabff1882015-05-27 09:15:55 -0400603 Retrieve the version of the SSL or TLS protocol used by the Connection.
Jim Shaver208438c2015-05-28 09:52:38 -0400604 For example, it will return ``0x769`` for connections made over TLS
605 version 1.
Jim Shaverabff1882015-05-27 09:15:55 -0400606
607
608.. py:method:: Connection.get_protocol_version_name()
609
Jim Shaverb5b6b0e2015-05-28 16:47:36 -0400610 Retrieve the version of the SSL or TLS protocol used by the Connection as
611 a unicode string. For example, it will return ``TLSv1`` for connections
612 made over TLS version 1, or ``Unknown`` for connections that were not
613 successfully established.
Jim Shaver2637c3b2015-04-27 00:35:09 -0400614
615
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900616.. py:method:: Connection.get_client_ca_list()
617
618 Retrieve the list of preferred client certificate issuers sent by the server
619 as :py:class:`OpenSSL.crypto.X509Name` objects.
620
621 If this is a client :py:class:`Connection`, the list will be empty until the
622 connection with the server is established.
623
624 If this is a server :py:class:`Connection`, return the list of certificate
625 authorities that will be sent or has been sent to the client, as controlled
626 by this :py:class:`Connection`'s :py:class:`Context`.
627
628 .. versionadded:: 0.10
629
630
631.. py:method:: Connection.get_context()
632
633 Retrieve the Context object associated with this Connection.
634
635
636.. py:method:: Connection.set_context(context)
637
638 Specify a replacement Context object for this Connection.
639
640
641.. py:method:: Connection.get_peer_certificate()
642
643 Retrieve the other side's certificate (if any)
644
645
646.. py:method:: Connection.get_peer_cert_chain()
647
648 Retrieve the tuple of the other side's certificate chain (if any)
649
650
651.. py:method:: Connection.getpeername()
652
653 Call the :py:meth:`getpeername` method of the underlying socket.
654
655
656.. py:method:: Connection.getsockname()
657
658 Call the :py:meth:`getsockname` method of the underlying socket.
659
660
661.. py:method:: Connection.getsockopt(level, optname[, buflen])
662
663 Call the :py:meth:`getsockopt` method of the underlying socket.
664
665
666.. py:method:: Connection.pending()
667
668 Retrieve the number of bytes that can be safely read from the SSL buffer
669 (**not** the underlying transport buffer).
670
671
672.. py:method:: Connection.recv(bufsize)
673
674 Receive data from the Connection. The return value is a string representing the
675 data received. The maximum amount of data to be received at once, is specified
676 by *bufsize*.
677
678
Jean-Paul Calderone0191a182015-03-21 07:41:35 -0400679.. py:method:: Connection.recv_into(buffer[, nbytes[, flags]])
Cory Benfield62d10332014-06-15 10:03:41 +0100680
681 Receive data from the Connection and copy it directly into the provided
682 buffer. The return value is the number of bytes read from the connection.
683 The maximum amount of data to be received at once is specified by *nbytes*.
Jean-Paul Calderone0191a182015-03-21 07:41:35 -0400684 *flags* is accepted for compatibility with ``socket.recv_into`` but its
685 value is ignored.
Cory Benfield62d10332014-06-15 10:03:41 +0100686
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900687.. py:method:: Connection.bio_write(bytes)
688
689 If the Connection was created with a memory BIO, this method can be used to add
690 bytes to the read end of that memory BIO. The Connection can then read the
691 bytes (for example, in response to a call to :py:meth:`recv`).
692
693
694.. py:method:: Connection.renegotiate()
695
696 Renegotiate the SSL session. Call this if you wish to change cipher suites or
697 anything like that.
698
699
700.. py:method:: Connection.send(string)
701
702 Send the *string* data to the Connection.
703
704
705.. py:method:: Connection.bio_read(bufsize)
706
707 If the Connection was created with a memory BIO, this method can be used to
708 read bytes from the write end of that memory BIO. Many Connection methods will
709 add bytes which must be read in this manner or the buffer will eventually fill
710 up and the Connection will be able to take no further actions.
711
712
713.. py:method:: Connection.sendall(string)
714
715 Send all of the *string* data to the Connection. This calls :py:meth:`send`
716 repeatedly until all data is sent. If an error occurs, it's impossible to tell
717 how much data has been sent.
718
719
720.. py:method:: Connection.set_accept_state()
721
722 Set the connection to work in server mode. The handshake will be handled
723 automatically by read/write.
724
725
726.. py:method:: Connection.set_app_data(data)
727
728 Associate *data* with this Connection object. *data* can be retrieved
729 later using the :py:meth:`get_app_data` method.
730
731
732.. py:method:: Connection.set_connect_state()
733
734 Set the connection to work in client mode. The handshake will be handled
735 automatically by read/write.
736
737
738.. py:method:: Connection.setblocking(flag)
739
740 Call the :py:meth:`setblocking` method of the underlying socket.
741
742
743.. py:method:: Connection.setsockopt(level, optname, value)
744
745 Call the :py:meth:`setsockopt` method of the underlying socket.
746
747
748.. py:method:: Connection.shutdown()
749
750 Send the shutdown message to the Connection. Returns true if the shutdown
751 message exchange is completed and false otherwise (in which case you call
752 :py:meth:`recv` or :py:meth:`send` when the connection becomes
753 readable/writeable.
754
755
756.. py:method:: Connection.get_shutdown()
757
758 Get the shutdown state of the Connection. Returns a bitvector of either or
759 both of *SENT_SHUTDOWN* and *RECEIVED_SHUTDOWN*.
760
761
762.. py:method:: Connection.set_shutdown(state)
763
764 Set the shutdown state of the Connection. *state* is a bitvector of
765 either or both of *SENT_SHUTDOWN* and *RECEIVED_SHUTDOWN*.
766
767
768.. py:method:: Connection.sock_shutdown(how)
769
770 Call the :py:meth:`shutdown` method of the underlying socket.
771
772
773.. py:method:: Connection.bio_shutdown()
774
775 If the Connection was created with a memory BIO, this method can be used to
776 indicate that *end of file* has been reached on the read end of that memory
777 BIO.
778
779
780.. py:method:: Connection.state_string()
781
782 Retrieve a verbose string detailing the state of the Connection.
783
784
785.. py:method:: Connection.client_random()
786
787 Retrieve the random value used with the client hello message.
788
789
790.. py:method:: Connection.server_random()
791
792 Retrieve the random value used with the server hello message.
793
794
795.. py:method:: Connection.master_key()
796
797 Retrieve the value of the master key for this session.
798
799
800.. py:method:: Connection.want_read()
801
802 Checks if more data has to be read from the transport layer to complete an
803 operation.
804
805
806.. py:method:: Connection.want_write()
807
808 Checks if there is data to write to the transport layer to complete an
809 operation.
810
811
812.. py:method:: Connection.set_tlsext_host_name(name)
813
814 Specify the byte string to send as the server name in the client hello message.
815
816 .. versionadded:: 0.13
817
818
819.. py:method:: Connection.get_servername()
820
821 Get the value of the server name received in the client hello message.
822
823 .. versionadded:: 0.13
824
825
Jean-Paul Calderone6c896fe2012-02-16 08:10:04 -0500826.. py:method:: Connection.get_session()
827
828 Get a :py:class:`Session` instance representing the SSL session in use by
829 the connection, or :py:obj:`None` if there is no session.
830
831 .. versionadded:: 0.14
832
833
834.. py:method:: Connection.set_session(session)
835
836 Set a new SSL session (using a :py:class:`Session` instance) to be used by
837 the connection.
838
839 .. versionadded:: 0.14
840
841
Fedor Brunner416f4a12014-03-28 13:18:38 +0100842.. py:method:: Connection.get_finished()
843
844 Obtain latest TLS Finished message that we sent, or :py:obj:`None` if
845 handshake is not completed.
846
847 .. versionadded:: 0.15
848
Jean-Paul Calderone7c556ef2014-03-30 10:45:00 -0400849
Fedor Brunner416f4a12014-03-28 13:18:38 +0100850.. py:method:: Connection.get_peer_finished()
851
852 Obtain latest TLS Finished message that we expected from peer, or
853 :py:obj:`None` if handshake is not completed.
854
855 .. versionadded:: 0.15
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900856
Jean-Paul Calderone7c556ef2014-03-30 10:45:00 -0400857
Fedor Brunner2cffdbc2014-03-10 10:35:23 +0100858.. py:method:: Connection.get_cipher_name()
859
860 Obtain the name of the currently used cipher.
861
862 .. versionadded:: 0.15
863
Jean-Paul Calderone7c556ef2014-03-30 10:45:00 -0400864
Fedor Brunner2cffdbc2014-03-10 10:35:23 +0100865.. py:method:: Connection.get_cipher_bits()
866
867 Obtain the number of secret bits of the currently used cipher.
868
869 .. versionadded:: 0.15
870
Jean-Paul Calderone7c556ef2014-03-30 10:45:00 -0400871
Fedor Brunner2cffdbc2014-03-10 10:35:23 +0100872.. py:method:: Connection.get_cipher_version()
873
874 Obtain the protocol name of the currently used cipher.
875
876 .. versionadded:: 0.15
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900877
Jean-Paul Calderone7c556ef2014-03-30 10:45:00 -0400878
Cory Benfieldbe3e7b82014-05-10 09:48:55 +0100879.. py:method:: Connection.get_next_proto_negotiated():
880
Cory Benfieldcd010f62014-05-15 19:00:27 +0100881 Get the protocol that was negotiated by Next Protocol Negotiation. Returns
882 a bytestring of the protocol name. If no protocol has been negotiated yet,
883 returns an empty string.
Cory Benfieldbe3e7b82014-05-10 09:48:55 +0100884
885 .. versionadded:: 0.15
886
Cory Benfield12eae892014-06-07 15:42:56 +0100887.. py:method:: Connection.set_alpn_protos(protos)
888
889 Specify the protocols that the client is prepared to speak after the TLS
Cory Benfielde58a93a2015-04-13 18:26:05 -0400890 connection has been negotiated using Application Layer Protocol
Cory Benfield12eae892014-06-07 15:42:56 +0100891 Negotiation.
892
893 *protos* should be a list of protocols that the client is offering, each
894 as a bytestring. For example, ``[b'http/1.1', b'spdy/2']``.
895
896
897.. py:method:: Connection.get_alpn_proto_negotiated()
898
899 Get the protocol that was negotiated by Application Layer Protocol
900 Negotiation. Returns a bytestring of the protocol name. If no protocol has
901 been negotiated yet, returns an empty string.
902
Cory Benfieldbe3e7b82014-05-10 09:48:55 +0100903
Jonathan Balletc9e066c2011-07-17 22:56:05 +0900904.. Rubric:: Footnotes
905
906.. [#connection-context-socket] Actually, all that is required is an object that
907 **behaves** like a socket, you could even use files, even though it'd be
908 tricky to get the handshakes right!