Directement Lire/Écrire des données de négociation avec la Mémoire de la BIO

J'ai besoin de créer une OpenSSL connexion où je peux passer directement à la lecture/écriture de données de négociation. La raison en est le protocole de transfert de données sera transporté dans une connexion UDP (DTLS n'est pas une option, parce que les données n'est pas directement dans le datagramme, mais à l'intérieur d'un autre protocole de paquets, EAP si vous êtes curieux). Jusqu'à présent, j'ai créé un OpenSSL connexion, mais je n'ai même pas été capable de lire du client poignée de main à envoyer au serveur.

Dans mes recherches, j'ai trouvé, j'ai besoin d'une Mémoire BIO pour lire/écrire à la connexion, mais ne peut pas comprendre comment extraire les données de négociation. Voici comment j'ai initialiser le client connexion:

SSL_library_init();
SSL_load_error_strings();
OpenSSL_add_all_algorithms();

ctx = SSL_CTX_new(SSLv3_client_method());
SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL);

ssl = SSL_new(ctx);
rbio = BIO_new(BIO_s_mem());
wbio = BIO_new(BIO_s_mem());

SSL_set_bio(ssl, rbio, wbio);
SSL_set_connect_state(ssl);

J'ai essayé doint SSL_connect, pour initier la poignée de main:

int ret = SSL_connect(ssl);

Mais renvoie -1, et de faire SSL_get_error(ssl, res) - je obtenir un code d'erreur 2, puis-je exécuter des ERR_error_string avec ce code:

error:00000002:lib(0):func(0):system lib

Aussi, si j'utilise SSL_do_handshake au lieu de SSL_connect - je obtenir exactement la même erreur.

J'ai été en mesure de définir une OpenSSL connexion TCP, mais ne l'ai jamais fait avec de la Mémoire du BIOs, de sorte que toute aide à ce serait très apprécié. Merci!

InformationsquelleAutor Sergio A. | 2014-03-31