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
	
	 Jouni Malinen
						Jouni Malinen