ctx_client = SSL_CTX_new(SSLv3_client_method()); SSL_CTX_set_verify(ctx_client, SSL_VERIFY_NONE, my_verify_callback); SSL_CTX_set_verify_depth(ctx_client, 0); bio_client = BIO_new_connect(SERVER ":" PORT); if(!bio_client) { printf("Error creating connection BIO"); return false; } if (BIO_do_connect(bio_client) <= 0) { printf("Error connecting to remote machine"); return false; } ssl_client = SSL_new(ctx_client); SSL_set_bio(ssl_client, bio_client, bio_client); SSL_set_verify(ssl_client, SSL_VERIFY_NONE, my_verify_callback); SSL_set_verify_depth(ssl_client, 0); if (SSL_connect(ssl_client) <= 0) { printf("Error connecting SSL object\n"); return false; } printf("SSL Connection opened\n"); static int my_verify_callback(int ok, X509_STORE_CTX *store) { char data[256]; int err = 0; if (!ok) { X509 *cert = X509_STORE_CTX_get_current_cert(store); int depth = X509_STORE_CTX_get_error_depth(store); err = X509_STORE_CTX_get_error(store); fprintf(stderr, "-Error with certificate at depth: %i\n", depth); X509_NAME_oneline(X509_get_issuer_name(cert), data, 256); fprintf(stderr, " issuer = %s\n", data); X509_NAME_oneline(X509_get_subject_name(cert), data, 256); fprintf(stderr, " subject = %s\n", data); fprintf(stderr, " err %i:%s\n", err, X509_verify_cert_error_string(err)); } //return ok; // Always continue: return 1; }