From bb278f52ca2b32fd80966f4c81257c63010e8eee Mon Sep 17 00:00:00 2001 From: Hanno Becker Date: Tue, 5 Feb 2019 17:04:00 +0000 Subject: [PATCH] Add configuration option to remove peer CRT after handshake --- include/mbedtls/config.h | 22 ++++++++++++++++++++++ include/mbedtls/ssl.h | 8 ++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/include/mbedtls/config.h b/include/mbedtls/config.h index e6abf24d5..091ce018f 100644 --- a/include/mbedtls/config.h +++ b/include/mbedtls/config.h @@ -1354,6 +1354,28 @@ */ #define MBEDTLS_SSL_FALLBACK_SCSV +/** + * \def MBEDTLS_SSL_KEEP_PEER_CERTIFICATE + * + * This option controls the presence of the API mbedtls_ssl_get_peer_cert() + * giving access to the peer's certificate after completion of the handshake. + * + * Unless you need mbedtls_ssl_peer_cert() in your application, it is + * recommended to disable this option for reduced RAM usage. + * + * \note If this option is disabled, mbedtls_ssl_get_peer_cert() is still + * defined, but always returns \c NULL. + * + * \note This option has no influence on the protection against the + * triple handshake attack. Even if it is disabled, Mbed TLS will + * still ensure that certificates do not change during renegotiation, + * for exaple by keeping a hash of the peer's certificate. + * + * Comment this macro to disable storing the peer's certificate + * after the handshake. + */ +#define MBEDTLS_SSL_KEEP_PEER_CERTIFICATE + /** * \def MBEDTLS_SSL_HW_RECORD_ACCEL * diff --git a/include/mbedtls/ssl.h b/include/mbedtls/ssl.h index c4d6605b5..d736c2101 100644 --- a/include/mbedtls/ssl.h +++ b/include/mbedtls/ssl.h @@ -2982,8 +2982,12 @@ int mbedtls_ssl_get_max_out_record_payload( const mbedtls_ssl_context *ssl ); * \param ssl The SSL context to use. This must be initialized and setup. * * \return The current peer certificate, or \c NULL if - * none is available. It is owned by the SSL context - * and valid only until the next call to the SSL API. + * none is available, which might be because the chosen + * ciphersuite does not use peer certificates, or because + * #MBEDTLS_SSL_KEEP_PEER_CERTIFICATE has been disabled. + * If this functions does not return \c NULL, the returned + * certificate is owned by the SSL context and valid only + * until the next call to the SSL API. * * \note For one-time inspection of the peer's certificate during * the handshake, consider registering an X.509 CRT verification