Security framework.
Security callback: selects which parameters are permitted including sensible defaults based on bits of security. The "parameters" which can be selected include: ciphersuites, curves, key sizes, certificate signature algorithms, supported signature algorithms, DH parameters, SSL/TLS version, session tickets and compression. In some cases prohibiting the use of a parameters will mean they are not advertised to the peer: for example cipher suites and ECC curves. In other cases it will abort the handshake: e.g DH parameters or the peer key size. Documentation to follow...
This commit is contained in:
82
ssl/ssl.h
82
ssl/ssl.h
@@ -2573,6 +2573,80 @@ void SSL_trace(int write_p, int version, int content_type,
|
||||
const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c);
|
||||
#endif
|
||||
|
||||
/* What the "other" parameter contains in security callback */
|
||||
/* Mask for type */
|
||||
#define SSL_SECOP_OTHER_TYPE 0xffff0000
|
||||
#define SSL_SECOP_OTHER_NONE 0
|
||||
#define SSL_SECOP_OTHER_CIPHER (1 << 16)
|
||||
#define SSL_SECOP_OTHER_CURVE (2 << 16)
|
||||
#define SSL_SECOP_OTHER_DH (3 << 16)
|
||||
#define SSL_SECOP_OTHER_PKEY (4 << 16)
|
||||
#define SSL_SECOP_OTHER_SIGALG (5 << 16)
|
||||
#define SSL_SECOP_OTHER_CERT (6 << 16)
|
||||
|
||||
/* Indicated operation refers to peer key or certificate */
|
||||
#define SSL_SECOP_PEER 0x1000
|
||||
|
||||
/* Values for "op" parameter in security callback */
|
||||
|
||||
/* Called to filter ciphers */
|
||||
/* Ciphers client supports */
|
||||
#define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER)
|
||||
/* Cipher shared by client/server */
|
||||
#define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER)
|
||||
/* Sanity check of cipher server selects */
|
||||
#define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER)
|
||||
/* Curves supported by client */
|
||||
#define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE)
|
||||
/* Curves shared by client/server */
|
||||
#define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE)
|
||||
/* Sanity check of curve server selects */
|
||||
#define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE)
|
||||
/* Temporary DH key */
|
||||
#define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_DH)
|
||||
/* Whether to use SSLv2 compatible client hello */
|
||||
#define SSL_SECOP_SSL2_COMPAT (8 | SSL_SECOP_OTHER_NONE)
|
||||
/* SSL/TLS version */
|
||||
#define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE)
|
||||
/* Session tickets */
|
||||
#define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE)
|
||||
/* Supported signature algorithms sent to peer */
|
||||
#define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG)
|
||||
/* Shared signature algorithm */
|
||||
#define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG)
|
||||
/* Sanity check signature algorithm allowed */
|
||||
#define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG)
|
||||
/* Used to get mask of supported public key signature algorithms */
|
||||
#define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG)
|
||||
/* Use to see if compression is allowed */
|
||||
#define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE)
|
||||
/* EE key in certificate */
|
||||
#define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT)
|
||||
/* CA key in certificate */
|
||||
#define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT)
|
||||
/* CA digest algorithm in certificate */
|
||||
#define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT)
|
||||
/* Peer EE key in certificate */
|
||||
#define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER)
|
||||
/* Peer CA key in certificate */
|
||||
#define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER)
|
||||
/* Peer CA digest algorithm in certificate */
|
||||
#define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER)
|
||||
|
||||
void SSL_set_security_level(SSL *s, int level);
|
||||
int SSL_get_security_level(const SSL *s);
|
||||
void SSL_set_security_callback(SSL *s, int (*cb)(SSL *s, SSL_CTX *ctx, int op, int bits, int nid, void *other, void *ex));
|
||||
int (*SSL_get_security_callback(const SSL *s))(SSL *s, SSL_CTX *ctx, int op, int bits, int nid, void *other, void *ex);
|
||||
void SSL_set0_security_ex_data(SSL *s, void *ex);
|
||||
void *SSL_get0_security_ex_data(const SSL *s);
|
||||
|
||||
void SSL_CTX_set_security_level(SSL_CTX *ctx, int level);
|
||||
int SSL_CTX_get_security_level(const SSL_CTX *ctx);
|
||||
void SSL_CTX_set_security_callback(SSL_CTX *ctx, int (*cb)(SSL *s, SSL_CTX *ctx, int op, int bits, int nid, void *other, void *ex));
|
||||
int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx))(SSL *s, SSL_CTX *ctx, int op, int bits, int nid, void *other, void *ex);
|
||||
void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex);
|
||||
void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx);
|
||||
|
||||
/* BEGIN ERROR CODES */
|
||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
||||
* made after this point may be overwritten when the script is next run.
|
||||
@@ -2710,10 +2784,12 @@ void ERR_load_SSL_strings(void);
|
||||
#define SSL_F_SSL_BAD_METHOD 160
|
||||
#define SSL_F_SSL_BUILD_CERT_CHAIN 332
|
||||
#define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161
|
||||
#define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 339
|
||||
#define SSL_F_SSL_CERT_DUP 221
|
||||
#define SSL_F_SSL_CERT_INST 222
|
||||
#define SSL_F_SSL_CERT_INSTANTIATE 214
|
||||
#define SSL_F_SSL_CERT_NEW 162
|
||||
#define SSL_F_SSL_CERT_SET0_CHAIN 340
|
||||
#define SSL_F_SSL_CHECK_PRIVATE_KEY 163
|
||||
#define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280
|
||||
#define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279
|
||||
@@ -2874,6 +2950,8 @@ void ERR_load_SSL_strings(void);
|
||||
#define SSL_R_BN_LIB 130
|
||||
#define SSL_R_CA_DN_LENGTH_MISMATCH 131
|
||||
#define SSL_R_CA_DN_TOO_LONG 132
|
||||
#define SSL_R_CA_KEY_TOO_SMALL 397
|
||||
#define SSL_R_CA_MD_TOO_WEAK 398
|
||||
#define SSL_R_CCS_RECEIVED_EARLY 133
|
||||
#define SSL_R_CERTIFICATE_VERIFY_FAILED 134
|
||||
#define SSL_R_CERT_CB_ERROR 377
|
||||
@@ -2895,6 +2973,7 @@ void ERR_load_SSL_strings(void);
|
||||
#define SSL_R_DATA_LENGTH_TOO_LONG 146
|
||||
#define SSL_R_DECRYPTION_FAILED 147
|
||||
#define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281
|
||||
#define SSL_R_DH_KEY_TOO_SMALL 394
|
||||
#define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148
|
||||
#define SSL_R_DIGEST_CHECK_FAILED 149
|
||||
#define SSL_R_DTLS_MESSAGE_TOO_BIG 334
|
||||
@@ -2904,6 +2983,7 @@ void ERR_load_SSL_strings(void);
|
||||
#define SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE 322
|
||||
#define SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE 323
|
||||
#define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER 310
|
||||
#define SSL_R_EE_KEY_TOO_SMALL 399
|
||||
#define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354
|
||||
#define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150
|
||||
#define SSL_R_ERROR_GENERATING_TMP_RSA_KEY 282
|
||||
@@ -2931,6 +3011,7 @@ void ERR_load_SSL_strings(void);
|
||||
#define SSL_R_INVALID_TICKET_KEYS_LENGTH 325
|
||||
#define SSL_R_INVALID_TRUST 279
|
||||
#define SSL_R_KEY_ARG_TOO_LONG 284
|
||||
#define SSL_R_KEY_TOO_SMALL 395
|
||||
#define SSL_R_KRB5 285
|
||||
#define SSL_R_KRB5_C_CC_PRINC 286
|
||||
#define SSL_R_KRB5_C_GET_CRED 287
|
||||
@@ -3132,6 +3213,7 @@ void ERR_load_SSL_strings(void);
|
||||
#define SSL_R_UNSUPPORTED_SSL_VERSION 259
|
||||
#define SSL_R_UNSUPPORTED_STATUS_TYPE 329
|
||||
#define SSL_R_USE_SRTP_NOT_NEGOTIATED 369
|
||||
#define SSL_R_VERSION_TOO_LOW 396
|
||||
#define SSL_R_WRITE_BIO_NOT_SET 260
|
||||
#define SSL_R_WRONG_CERTIFICATE_TYPE 383
|
||||
#define SSL_R_WRONG_CIPHER_RETURNED 261
|
||||
|
Reference in New Issue
Block a user