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;
}