Hi, I'm having trouble with some code that tries to set a verify
callback. I've written a short program which demonstrates the problem.
The symptom is this: if I call SSL_set_verify(...) then the SSL_connect
call fails (but SSL_set_verify is not called!). If I call
SSL_CTX_set_verify(...) with the same function everything works as
expected.
Thanks for the help,
Erik
----------------
#include <assert.h>
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "openssl/e_os.h"
#include <openssl/bio.h>
#include <openssl/crypto.h>
#include <openssl/evp.h>
#include <openssl/x509.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/rand.h>
int my_verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx)
{
printf("my_verify_callback\n");
return preverify_ok;
}
int main(void)
{
int len;
SSL *ssl;
BIO *bio, *out;
SSL_CTX *ctx;
char tmpbuf[1024];
SSL_library_init();
SSL_load_error_strings();
ERR_load_crypto_strings();
ERR_load_SSL_strings();
OpenSSL_add_all_algorithms();
ctx = SSL_CTX_new(SSLv23_client_method());
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, my_verify_callback);
bio = BIO_new_ssl_connect(ctx);
BIO_get_ssl(bio, &ssl);
SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
/* comment out this line, and it will work */
SSL_set_verify(ssl, SSL_VERIFY_PEER, my_verify_callback);
BIO_set_conn_hostname(bio, "www.amazon.com:https");
BIO_set_nbio(bio, 0);
SSL_connect(ssl);
out = BIO_new_fp(stdout, BIO_NOCLOSE);
BIO_puts(bio, "GET / HTTP/1.0\n\n");
for(;;) {
len = BIO_read(bio, tmpbuf, 1024);
if(len <= 0) break;
BIO_write(out, tmpbuf, len);
}
BIO_free_all(bio);
BIO_free(out);
}
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]