Как реализовать безопасную связь сокетов в приложении c ++ с помощью winsock?

Если вы используете gmail.

  • 1-logon к вашей учетной записи 2- просмотрите эту ссылку 3- Разрешите менее безопасные приложения: ON

Наслаждайтесь ....

0
задан mplouque 13 July 2018 в 16:06
поделиться

1 ответ

Какую бы библиотеку SSL вы не выбрали, есть несколько вещей, которые вам нужно знать в качестве новичков в этом поле:

Реализации сервера и клиента в разных местах будут выглядеть совсем по-другому.

Вашему серверу абсолютно необходим сертификат с закрытым ключом. Во время разработки вы явно не хотите получать его от Verisign или что-то еще, поэтому вам нужно создать самозаверяющий сертификат. Вы можете сделать это с помощью openssl или других инструментов.

Сертификат состоит из частной части и публичной части. Общественная часть должна перейти к клиенту и будет использоваться для проверки соединения. Когда вы используете что-то вроде SChannel, сертификаты (частные и общедоступные) должны быть установлены в хранилищах сертификатов сервера и клиента соответственно.

SChannel не отправляет и не получает данные для вас. Итак, ядро ​​вашей реализации будет: когда в сети есть данные: прочитайте зашифрованный текст из сокета и напишите в SChannel. Прочтите чистый текст из SChannel (если есть) и перейдите к приложению. Когда приложение имеет данные для отправки, получите четкий текст из Приложения и перейдите к SChannel. Получите полученные буферы шифрованного текста из SChannel и напишите в сокет. Буферы

из Интернета могут быть частичными, а переговоры и повторные переговоры означают, что нет сопоставления 1: 1 передачи данных в SChannel и получения данных .

Таким образом, вы не можете уйти с наивной реализацией, которая вызывает SChannel один раз, чтобы передать данные, и еще раз, чтобы получить un / encrypted data. Там не будет ничего доступного или большого количества пакетов для отправки между клиентом и сервером, прежде чем вы получите какие-либо байты приложения. т. е. вам понадобится какой-то конечный автомат для keeptrack этого.

Очевидно, что одновременно не пишите как клиент, так и сервер: Начните с вашего клиента против https-сервера.

Это общая схема процесса - вещи, которые меня смутили, когда я впервые столкнулся с SSL и почему ни один из образцов не был таким простым, как я надеялся, что они будут.

1
ответ дан Chris Becke 17 August 2018 в 12:27
поделиться
  • 1
    Мы знаем , что сервер является сервером http ? – Paul Sanders 15 July 2018 в 06:50
  • 2
    Это неважно: серверы https повсюду, и если вы можете хотя бы подключиться к нему, то вы знаете, что сделали достаточно, чтобы ваши клиенты вели переговоры в основном правильно. В противном случае вы застряли, пытаясь понять, является ли ошибка для обсуждения ошибкой в ​​реализации вашего клиента или сервера – Chris Becke 15 July 2018 в 07:27
  • 3
    Конечно, это важно! Если сервер OP (что бы это ни было, кажется, немного туманной концепцией в контексте исходного вопроса) не является веб-сервером, тогда он не может использовать SChannel. Поэтому нам нужно спросить его (и я попытался, но у меня не было ответа). – Paul Sanders 15 July 2018 в 10:20
  • 4
    И обратите внимание, что с помощью schannel легко использовать журнал событий Windows, чтобы отслеживать, что происходит. (IE отсутствует сертификат, другая проблема). – SoronelHaetir 17 July 2018 в 15:44
Другие вопросы по тегам:

Похожие вопросы: