Какую бы библиотеку SSL вы не выбрали, есть несколько вещей, которые вам нужно знать в качестве новичков в этом поле:
Реализации сервера и клиента в разных местах будут выглядеть совсем по-другому.
Вашему серверу абсолютно необходим сертификат с закрытым ключом. Во время разработки вы явно не хотите получать его от Verisign или что-то еще, поэтому вам нужно создать самозаверяющий сертификат. Вы можете сделать это с помощью openssl или других инструментов.
Сертификат состоит из частной части и публичной части. Общественная часть должна перейти к клиенту и будет использоваться для проверки соединения. Когда вы используете что-то вроде SChannel, сертификаты (частные и общедоступные) должны быть установлены в хранилищах сертификатов сервера и клиента соответственно.
SChannel не отправляет и не получает данные для вас. Итак, ядро вашей реализации будет: когда в сети есть данные: прочитайте зашифрованный текст из сокета и напишите в SChannel. Прочтите чистый текст из SChannel (если есть) и перейдите к приложению. Когда приложение имеет данные для отправки, получите четкий текст из Приложения и перейдите к SChannel. Получите полученные буферы шифрованного текста из SChannel и напишите в сокет. Буферы
из Интернета могут быть частичными, а переговоры и повторные переговоры означают, что нет сопоставления 1: 1 передачи данных в SChannel и получения данных .
Таким образом, вы не можете уйти с наивной реализацией, которая вызывает SChannel один раз, чтобы передать данные, и еще раз, чтобы получить un / encrypted data. Там не будет ничего доступного или большого количества пакетов для отправки между клиентом и сервером, прежде чем вы получите какие-либо байты приложения. т. е. вам понадобится какой-то конечный автомат для keeptrack этого.
Очевидно, что одновременно не пишите как клиент, так и сервер: Начните с вашего клиента против https-сервера.
Это общая схема процесса - вещи, которые меня смутили, когда я впервые столкнулся с SSL и почему ни один из образцов не был таким простым, как я надеялся, что они будут.