Процедура connect_server викликається з dispatch_call після успішного відпрацювання check_finger_print для того, щоб знайти абонента, з яким необхідно встановити захищений канал. Після успішного виявлення такого абонента connect_server забезпечує процедуру узгодження загального для двох абонентів сеансового ключа (пересилання об'єктів key_data та hash_data).
Важливо підкреслити, що займаючись пересилкою між абонентами ключових об'єктів безпеки key_data і hash_data, центральний сервер Extra Systems Cypher Net (як це легко бачити в коді нижче) жодним чином не втручається в цей процес. Для сервера ці дані - повна абракадабра, сенсу якої не розуміє, а знає лише їх розмір (PACKED_VALUE_LENTH і HASH_SIZE).
int connect_server(THREADDATA *thread_item) { int i, found, my_socket, his_socket, socket_buffer_size; char socket_buffer[MAX_SOCKET_BUFFER_SIZE]; found = 0; thread_item->buffer_to_send = NULL; while (!found) { for (i = 0; (i < THREAD_POOL_SIZE) && (!found); i++) { found = ((thread_pool[i].client_id == thread_item->server_id) && (thread_pool[i].server_id == thread_item->client_id) && (thread_pool[i].client_mode != thread_item->client_mode)); if (found) thread_item->server_thread = i; } if (!found) es_sleep(100); } my_socket = thread_item->thread_socket; his_socket = thread_pool[thread_item->server_thread].thread_socket; if (socket_read_buffer(my_socket, socket_buffer, thread_item->prolog_size) != thread_item->prolog_size) return 0; if (socket_send_buffer(his_socket, socket_buffer, thread_item->prolog_size) != thread_item->prolog_size) return 0; return 1; }
Зверніть увагу, що сервер заздалегідь не знає розміру інформації, якою обмінюються абоненти під час узгодження сеансового ключа. Це пов'язано з тим, що вони можуть використовувати RSA різного розміру, а також різні алгоритми хешування. Тому клієнтська процедура get_common_key насамперед надсилає розмір пакета (PACKED_VALUE_LENTH + HASH_SIZE), щоб сервер знав, якого саме розміру інформацію (змінна socket_buffer_size) слід переслати між абонентами.
Контент цієї сторінки доступний також англійською, французькою, німецькою та російською мовами.
© Extra Systems, 2024 |