Skip to content

Commit

Permalink
Print peer temporary key details
Browse files Browse the repository at this point in the history
The peer temporary key in TLS session is related to the PFS
exchange/generation. From the SSL_get_peer_tmp_key manual page:

   For example, if ECDHE is in use, then this represents the
   peer's public ECDHE key.

Change-Id: Iaf12bb51a2aac7bcf19070f0b56fa3b1a5863bc3
Acked-by: Frank Lichtenheld <[email protected]>
Message-Id: <[email protected]>
URL: https://www.mail-archive.com/[email protected]/msg27192.html
Signed-off-by: Gert Doering <[email protected]>
(cherry picked from commit 4e80aac)
  • Loading branch information
schwabe authored and cron2 committed Oct 14, 2023
1 parent f41eb75 commit 1240d97
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 12 deletions.
4 changes: 4 additions & 0 deletions src/openvpn/openssl_compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ X509_OBJECT_free(X509_OBJECT *obj)
#define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT RSA_F_RSA_EAY_PRIVATE_ENCRYPT
#endif

#if (OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(ENABLE_CRYPTO_WOLFSSL)) || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x3050400fL)
#define SSL_get_peer_tmp_key SSL_get_server_tmp_key
#endif

/* Functionality missing in 1.0.2 */
#if OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(ENABLE_CRYPTO_WOLFSSL)
/**
Expand Down
56 changes: 44 additions & 12 deletions src/openvpn/ssl_openssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -2052,18 +2052,11 @@ key_state_read_plaintext(struct key_state_ssl *ks_ssl, struct buffer *buf)
return ret;
}

/**
* Print human readable information about the certifcate into buf
* @param cert the certificate being used
* @param buf output buffer
* @param buflen output buffer length
*/
static void
print_cert_details(X509 *cert, char *buf, size_t buflen)
print_pkey_details(EVP_PKEY *pkey, char *buf, size_t buflen)
{
const char *curve = "";
const char *type = "(error getting type)";
EVP_PKEY *pkey = X509_get_pubkey(cert);

if (pkey == NULL)
{
Expand Down Expand Up @@ -2126,6 +2119,23 @@ print_cert_details(X509 *cert, char *buf, size_t buflen)
#endif /* if OPENSSL_VERSION_NUMBER < 0x30000000L */
}

openvpn_snprintf(buf, buflen, "%d bits %s%s",
EVP_PKEY_bits(pkey), type, curve);
}

/**
* Print human readable information about the certificate into buf
* @param cert the certificate being used
* @param buf output buffer
* @param buflen output buffer length
*/
static void
print_cert_details(X509 *cert, char *buf, size_t buflen)
{
EVP_PKEY *pkey = X509_get_pubkey(cert);
char pkeybuf[128] = { 0 };
print_pkey_details(pkey, pkeybuf, sizeof(pkeybuf));

char sig[128] = { 0 };
int signature_nid = X509_get_signature_nid(cert);
if (signature_nid != 0)
Expand All @@ -2134,8 +2144,27 @@ print_cert_details(X509 *cert, char *buf, size_t buflen)
OBJ_nid2sn(signature_nid));
}

openvpn_snprintf(buf, buflen, ", peer certificate: %d bit %s%s%s",
EVP_PKEY_bits(pkey), type, curve, sig);
openvpn_snprintf(buf, buflen, ", peer certificate: %s%s",
pkeybuf, sig);

EVP_PKEY_free(pkey);
}

static void
print_server_tempkey(SSL *ssl, char *buf, size_t buflen)
{
EVP_PKEY *pkey = NULL;
SSL_get_peer_tmp_key(ssl, &pkey);
if (!pkey)
{
return;
}

char pkeybuf[128] = { 0 };
print_pkey_details(pkey, pkeybuf, sizeof(pkeybuf));

openvpn_snprintf(buf, buflen, ", peer temporary key: %s",
pkeybuf);

EVP_PKEY_free(pkey);
}
Expand All @@ -2153,8 +2182,9 @@ print_details(struct key_state_ssl *ks_ssl, const char *prefix)
const SSL_CIPHER *ciph;
char s1[256];
char s2[256];
char s3[256];

s1[0] = s2[0] = 0;
s1[0] = s2[0] = s3[0] = 0;
ciph = SSL_get_current_cipher(ks_ssl->ssl);
openvpn_snprintf(s1, sizeof(s1), "%s %s, cipher %s %s",
prefix,
Expand All @@ -2168,7 +2198,9 @@ print_details(struct key_state_ssl *ks_ssl, const char *prefix)
print_cert_details(cert, s2, sizeof(s2));
X509_free(cert);
}
msg(D_HANDSHAKE, "%s%s", s1, s2);
print_server_tempkey(ks_ssl->ssl, s3, sizeof(s3));

msg(D_HANDSHAKE, "%s%s%s", s1, s2, s3);
}

void
Expand Down

0 comments on commit 1240d97

Please sign in to comment.