Commit ecc334123ee0e8e24c630a49efd18568d2fe6531

Authored by Perry Werneck
1 parent ad9b3856

Adding method to get the presented peer certificate as text.

src/include/lib3270.h
... ... @@ -530,7 +530,9 @@
530 530 */
531 531 LIB3270_EXPORT const char * lib3270_get_ssl_state_description(H3270 *hSession);
532 532  
533   - LIB3270_EXPORT char * lib3270_get_crl_text(H3270 *hSession);
  533 + LIB3270_EXPORT char * lib3270_get_ssl_crl_text(H3270 *hSession);
  534 + LIB3270_EXPORT char * lib3270_get_ssl_peer_certificate_text(H3270 *hSession);
  535 +
534 536  
535 537 /**
536 538 * @brief Get service or port for the connect/reconnect operations.
... ...
src/lib3270/properties.c
... ... @@ -37,6 +37,9 @@
37 37 #include <lib3270.h>
38 38 #include <lib3270/properties.h>
39 39  
  40 +#if defined(HAVE_LIBSSL)
  41 + #include <openssl/ssl.h>
  42 +#endif
40 43  
41 44 static int lib3270_get_connection_state_as_int(H3270 *hSession)
42 45 {
... ... @@ -634,7 +637,7 @@ LIB3270_EXPORT int lib3270_get_secure_host(H3270 *hSession)
634 637  
635 638 }
636 639  
637   -LIB3270_EXPORT char * lib3270_get_crl_text(H3270 *hSession)
  640 +LIB3270_EXPORT char * lib3270_get_ssl_crl_text(H3270 *hSession)
638 641 {
639 642 #ifdef SSL_ENABLE_CRL_CHECK
640 643  
... ... @@ -664,3 +667,32 @@ LIB3270_EXPORT char * lib3270_get_crl_text(H3270 *hSession)
664 667  
665 668 return NULL;
666 669 }
  670 +
  671 +LIB3270_EXPORT char * lib3270_get_ssl_peer_certificate_text(H3270 *hSession)
  672 +{
  673 +#ifdef HAVE_LIBSSL
  674 + if(hSession->ssl.con)
  675 + {
  676 + X509 * peer = SSL_get_peer_certificate(hSession->ssl.con);
  677 + if(peer)
  678 + {
  679 + BIO * out = BIO_new(BIO_s_mem());
  680 + unsigned char * data;
  681 + unsigned char * text;
  682 + int n;
  683 +
  684 + X509_print(out,peer);
  685 +
  686 + n = BIO_get_mem_data(out, &data);
  687 + text = (unsigned char *) lib3270_malloc(n+1);
  688 + text[n] ='\0';
  689 + memcpy(text,data,n);
  690 + BIO_free(out);
  691 +
  692 + return (char *) text;
  693 + }
  694 + }
  695 +#endif // HAVE_LIBSSL
  696 +
  697 + return NULL;
  698 +}
... ...
src/lib3270/ssl/ctx_init.c
... ... @@ -135,7 +135,7 @@ int ssl_ctx_init(H3270 *hSession, SSL_ERROR_MESSAGE * message)
135 135  
136 136 if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_SSL_TRACE))
137 137 {
138   - lib3270_autoptr(char) text = lib3270_get_crl_text(hSession);
  138 + lib3270_autoptr(char) text = lib3270_get_ssl_crl_text(hSession);
139 139  
140 140 if(text)
141 141 trace_ssl(hSession,"\n%s\n",text);
... ...