# `SSL` — An interface to the SSL-specific parts of OpenSSL

This module handles things specific to SSL. There are two objects defined: Context, Connection.

OpenSSL.SSL.TLS_METHOD
OpenSSL.SSL.TLS_SERVER_METHOD
OpenSSL.SSL.TLS_CLIENT_METHOD
OpenSSL.SSL.SSLv2_METHOD
OpenSSL.SSL.SSLv3_METHOD
OpenSSL.SSL.SSLv23_METHOD
OpenSSL.SSL.TLSv1_METHOD
OpenSSL.SSL.TLSv1_1_METHOD
OpenSSL.SSL.TLSv1_2_METHOD

  These constants represent the different SSL methods to use when creating a context object. New code should only use `TLS_METHOD`, `TLS_SERVER_METHOD`, or `TLS_CLIENT_METHOD`. If the underlying OpenSSL build is missing support for any of these protocols, constructing a `Context` using the corresponding `*_METHOD` will raise an exception.

OpenSSL.SSL.SSL3_VERSION
OpenSSL.SSL.TLS1_VERSION
OpenSSL.SSL.TLS1_1_VERSION
OpenSSL.SSL.TLS1_2_VERSION
OpenSSL.SSL.TLS1_3_VERSION

  These constants represent the different TLS versions to use when setting the minimum or maximum TLS version.

OpenSSL.SSL.VERIFY_NONE
OpenSSL.SSL.VERIFY_PEER
OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT

  These constants represent the verification mode used by the Context object’s `set_verify()` method.

OpenSSL.SSL.FILETYPE_PEM
OpenSSL.SSL.FILETYPE_ASN1

  File type constants used with the `use_certificate_file()` and `use_privatekey_file()` methods of Context objects.

OpenSSL.SSL.OP_SINGLE_DH_USE
OpenSSL.SSL.OP_SINGLE_ECDH_USE

  Constants used with `set_options()` of Context objects.

  When these options are used, a new key will always be created when using ephemeral (Elliptic curve) Diffie-Hellman.

OpenSSL.SSL.OP_EPHEMERAL_RSA

  Constant used with `set_options()` of Context objects.

  When this option is used, ephemeral RSA keys will always be used when doing RSA operations.

OpenSSL.SSL.OP_NO_TICKET

  Constant used with `set_options()` of Context objects.

  When this option is used, the session ticket extension will not be used.

OpenSSL.SSL.OP_NO_COMPRESSION

  Constant used with `set_options()` of Context objects.

  When this option is used, compression will not be used.

OpenSSL.SSL.OP_NO_SSLv2
OpenSSL.SSL.OP_NO_SSLv3
OpenSSL.SSL.OP_NO_TLSv1
OpenSSL.SSL.OP_NO_TLSv1_1
OpenSSL.SSL.OP_NO_TLSv1_2
OpenSSL.SSL.OP_NO_TLSv1_3

  Constants used with `set_options()` of Context objects.

  Each of these options disables one version of the SSL/TLS protocol. This is interesting if you’re using e.g. `SSLv23_METHOD` to get an SSLv2-compatible handshake, but don’t want to use SSLv2. If the underlying OpenSSL build is missing support for any of these protocols, the `OP_NO_*` constant may be undefined.

OpenSSL.SSL.SSLEAY_VERSION
OpenSSL.SSL.SSLEAY_CFLAGS
OpenSSL.SSL.SSLEAY_BUILT_ON
OpenSSL.SSL.SSLEAY_PLATFORM
OpenSSL.SSL.SSLEAY_DIR

  Constants used with `SSLeay_version()` to specify what OpenSSL version information to retrieve. See the man page for the `SSLeay_version()` C API for details.

OpenSSL.SSL.SESS_CACHE_OFF
OpenSSL.SSL.SESS_CACHE_CLIENT
OpenSSL.SSL.SESS_CACHE_SERVER
OpenSSL.SSL.SESS_CACHE_BOTH
OpenSSL.SSL.SESS_CACHE_NO_AUTO_CLEAR
OpenSSL.SSL.SESS_CACHE_NO_INTERNAL_LOOKUP
OpenSSL.SSL.SESS_CACHE_NO_INTERNAL_STORE
OpenSSL.SSL.SESS_CACHE_NO_INTERNAL

  Constants used with `Context.set_session_cache_mode()` to specify the behavior of the session cache and potential session reuse. See the man page for the `SSL_CTX_set_session_cache_mode()` C API for details.

  New in version 0.14.

OpenSSL.SSL.OPENSSL_VERSION_NUMBER

  An integer giving the version number of the OpenSSL library used to build this version of pyOpenSSL. See the man page for the `SSLeay_version()` C API for details.

OpenSSL.SSL.NO_OVERLAPPING_PROTOCOLS

  A sentinel value that can be returned by the callback passed to `Context.set_alpn_select_callback()` to indicate that the handshake can continue without a specific application protocol.

  New in version 19.1.

OpenSSL.SSL.ContextType

  See `Context`.

OpenSSL.SSL.ConnectionType

  See `Connection`.

class OpenSSL.SSL.Connection(context, socket)

  A class representing SSL connections.

  context should be an instance of `Context` and socket should be a socket 1 object. socket may be None; in this case, the Connection is created with a memory BIO: see the `bio_read()`, `bio_write()`, and `bio_shutdown()` methods.

exception OpenSSL.SSL.Error

  This exception is used as a base class for the other SSL-related exceptions, but may also be raised directly.

  Whenever this exception is raised directly, it has a list of error messages from the OpenSSL error queue, where each item is a tuple (lib, function, reason). Here lib, function and reason are all strings, describing where and what the problem is. See err(3) for more information.

exception OpenSSL.SSL.ZeroReturnError

  This exception matches the error return code `SSL_ERROR_ZERO_RETURN`, and is raised when the SSL Connection has been closed. In SSL 3.0 and TLS 1.0, this only occurs if a closure alert has occurred in the protocol, i.e. the connection has been closed cleanly. Note that this does not necessarily mean that the transport layer (e.g. a socket) has been closed.

  It may seem a little strange that this is an exception, but it does match an `SSL_ERROR` code, and is very convenient.

exception OpenSSL.SSL.WantReadError

  The operation did not complete; the same I/O method should be called again later, with the same arguments. Any I/O method can lead to this since new handshakes can occur at any time.

  The wanted read is for dirty data sent over the network, not the clean data inside the tunnel. For a socket based SSL connection, read means data coming at us over the network. Until that read succeeds, the attempted `OpenSSL.SSL.Connection.recv()`, `OpenSSL.SSL.Connection.send()`, or `OpenSSL.SSL.Connection.do_handshake()` is prevented or incomplete. You probably want to `select()` on the socket before trying again.

exception OpenSSL.SSL.WantWriteError

  See `WantReadError`. The socket send buffer may be too full to write more data.

exception OpenSSL.SSL.WantX509LookupError

  The operation did not complete because an application callback has asked to be called again. The I/O method should be called again later, with the same arguments.

  Note

  This won’t occur in this version, as there are no such callbacks in this version.

exception OpenSSL.SSL.SysCallError

  The `SysCallError` occurs when there’s an I/O error and OpenSSL’s error queue does not contain any information. This can mean two things: An error in the transport protocol, or an end of file that violates the protocol. The parameter to the exception is always a pair (errnum, errstr).

## Context objects

Context objects have the following methods:

## Session objects

Session objects have no methods.

## Connection objects

Connection objects have the following methods:

Footnotes

1

  Actually, all that is required is an object that behaves like a socket, you could even use files, even though it’d be tricky to get the handshakes right!