.-- -- ---- ----. ___| MKD1001\004 |____ _ ___________ _ ___________________________________ | '---------------' | | | | .---- - ----------------- - ---------------------------------- - --. . '-----' '---' Utilisation de BIO_SSL AKA coucou cherie c moi ! utilisation de BIO_SSL SSL algos utilisé contexte SSL BIO introduction description la lib BIO est une couche d'abstraction d'entreée/sortie. grâce à celle ci, vous pourrez lire dans un fichier classique, comme vous communiquerez via socket protègé par SSL. les chaines cette lib contient 2 types d'elements, les sources (socket, fichier, ...) et les filtres (cryptage, buffer, ...). ces elements sont relié ensemble selon les besoins de l'utilisateur, en une double liste chaine un exemple classique est la chaine BIO utilise par un client SSL : BIO_buffer => BIO_ssl => BIO_socket le premier element de la chaine est le premier à être appelé lors de toute opération de lecture/écriture. par exemple, si l'on fait une opération read sur buffer, celui si va faire une opération read sur SSL, qui fera lui même une opération read sur socket. le dernier element doit donc être une source, et les autres des filtres. tout BIO est un maillion d'une chaine, lors de sa création, il est seul, c'est a nous de le lier grâce à BIO_push qui permet d'ajouter un element à la fin BIO_pop permet de retirer l'element courant de la chaine, et renvoi l'element suivant connecté à toute la chaine résultante. la structure des elements un BIO_METHOD est un type, qui contient les opérations necessaire au BIO : typedef struct bio_method_st { int type; const char *name; int (*bwrite)(BIO *, const char *, int); int (*bread)(BIO *, char *, int); int (*bputs)(BIO *, const char *); int (*bgets)(BIO *, char *, int); long (*ctrl)(BIO *, int, long, void *); int (*create)(BIO *); int (*destroy)(BIO *); long (*callback_ctrl)(BIO *, int, bio_info_cb *); } BIO_METHOD; pour créer un nouvel element, il nous faut recuperer le BIO_METHOD de notre element. pour chaque type de maillion BIO, il existe une fonction permettant de recuperer ce BIO_METHOD, son nom est forme comme suit : // sources BIO_METHOD *BIO_s_accept(void); BIO_METHOD *BIO_s_connect(void); BIO_METHOD *BIO_s_socket(void); BIO_METHOD *BIO_s_fd(void); // filtres BIO_METHOD *BIO_f_ssl(void); BIO_METHOD *BIO_f_buffer(void); // sources et filtres inconnue en vrac BIO_METHOD *BIO_s_mem(void); BIO_METHOD *BIO_s_log(void); BIO_METHOD *BIO_s_datagram(void); BIO_METHOD *BIO_s_bio(void); BIO_METHOD *BIO_s_null(void); BIO_METHOD *BIO_f_null(void); BIO_METHOD *BIO_f_linebuffer(void); BIO_METHOD *BIO_f_nbio_test(void); la structure d'un maillion est complexe, mais il y'a peu à gerer pour créer un nouveau type de maillion typedef struct bio_st{ BIO_METHOD *method; long (*callback)(struct bio_st *,int,const char *,int, long,long); char *cb_arg; /* partie importante si on cree un nouveau type de maillion */ int init; int shutdown; int flags; int retry_reason; int num; void *ptr; // on stocke nos donnes lie/****************************************************/ struct bio_st *next_bio; struct bio_st *prev_bio; int references; unsigned long num_read; unsigned long num_write; CRYPTO_EX_DATA ex_data; } BIO; mais pour l'instant nous allons nous contenter des types que nous avons, et la création de nouveau type pourra être le sujet d'un autre article opération de base BIO_buffer BIO_ssl BIO_connect BIO_accept utilisation de openssl generation de clé/h2> certificat empreinte elements interressant de la lib ssl BN __ __ __ _____ / / / /___ ______/ /_|__ / _____ _____ / /_/ / __ `/ ___/ //_//_ < | / / _ \/ ___/ / __ / /_/ / /__/ ,< ___/ / |/ / __/ / /_/ /_/\__,_/\___/_/|_/____/|___/\___/_/ - (c)Hack3ver - All rights reversed. .-----. .---. | '----- - ------ - ------- - ------------------------------------- -' | | | |______ _ ________________________________.--------------------.______ _ ____| | by Hackever | '--------------------'