OpenSSL: Write peer certificate chain details in debug log
This makes it more convenient to debug TLS certificate validation issues. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
e6edadba86
commit
100b2edb28
1 changed files with 34 additions and 35 deletions
|
@ -2296,6 +2296,38 @@ static void openssl_tls_cert_event(struct tls_connection *conn,
|
|||
}
|
||||
|
||||
|
||||
static void debug_print_cert(X509 *cert, const char *title)
|
||||
{
|
||||
#ifndef CONFIG_NO_STDOUT_DEBUG
|
||||
BIO *out;
|
||||
size_t rlen;
|
||||
char *txt;
|
||||
int res;
|
||||
|
||||
if (wpa_debug_level > MSG_DEBUG)
|
||||
return;
|
||||
|
||||
out = BIO_new(BIO_s_mem());
|
||||
if (!out)
|
||||
return;
|
||||
|
||||
X509_print(out, cert);
|
||||
rlen = BIO_ctrl_pending(out);
|
||||
txt = os_malloc(rlen + 1);
|
||||
if (txt) {
|
||||
res = BIO_read(out, txt, rlen);
|
||||
if (res > 0) {
|
||||
txt[res] = '\0';
|
||||
wpa_printf(MSG_DEBUG, "OpenSSL: %s\n%s", title, txt);
|
||||
}
|
||||
os_free(txt);
|
||||
}
|
||||
|
||||
BIO_free(out);
|
||||
#endif /* CONFIG_NO_STDOUT_DEBUG */
|
||||
}
|
||||
|
||||
|
||||
static int tls_verify_cb(int preverify_ok, X509_STORE_CTX *x509_ctx)
|
||||
{
|
||||
char buf[256];
|
||||
|
@ -2316,6 +2348,8 @@ static int tls_verify_cb(int preverify_ok, X509_STORE_CTX *x509_ctx)
|
|||
depth = X509_STORE_CTX_get_error_depth(x509_ctx);
|
||||
ssl = X509_STORE_CTX_get_ex_data(x509_ctx,
|
||||
SSL_get_ex_data_X509_STORE_CTX_idx());
|
||||
os_snprintf(buf, sizeof(buf), "Peer certificate - depth %d", depth);
|
||||
debug_print_cert(err_cert, buf);
|
||||
X509_NAME_oneline(X509_get_subject_name(err_cert), buf, sizeof(buf));
|
||||
|
||||
conn = SSL_get_app_data(ssl);
|
||||
|
@ -4658,41 +4692,6 @@ static void ocsp_debug_print_resp(OCSP_RESPONSE *rsp)
|
|||
}
|
||||
|
||||
|
||||
static void debug_print_cert(X509 *cert, const char *title)
|
||||
{
|
||||
#ifndef CONFIG_NO_STDOUT_DEBUG
|
||||
BIO *out;
|
||||
size_t rlen;
|
||||
char *txt;
|
||||
int res;
|
||||
|
||||
if (wpa_debug_level > MSG_DEBUG)
|
||||
return;
|
||||
|
||||
out = BIO_new(BIO_s_mem());
|
||||
if (!out)
|
||||
return;
|
||||
|
||||
X509_print(out, cert);
|
||||
rlen = BIO_ctrl_pending(out);
|
||||
txt = os_malloc(rlen + 1);
|
||||
if (!txt) {
|
||||
BIO_free(out);
|
||||
return;
|
||||
}
|
||||
|
||||
res = BIO_read(out, txt, rlen);
|
||||
if (res > 0) {
|
||||
txt[res] = '\0';
|
||||
wpa_printf(MSG_DEBUG, "OpenSSL: %s\n%s", title, txt);
|
||||
}
|
||||
os_free(txt);
|
||||
|
||||
BIO_free(out);
|
||||
#endif /* CONFIG_NO_STDOUT_DEBUG */
|
||||
}
|
||||
|
||||
|
||||
static int ocsp_resp_cb(SSL *s, void *arg)
|
||||
{
|
||||
struct tls_connection *conn = arg;
|
||||
|
|
Loading…
Reference in a new issue