Компилируемый код C++ для реализации безопасного клиента SLL/TLS с использованием MS SSPI
Как описано здесь http://www.ddj.com/cpp/184401688
Я не успеваю написать это с нуля.
На вопрос и без ответа https://stackru.com/questions/434961/implementing-ssl
ВОПРОС В ТОМ:
Я ищу некоторый скомпилированный рабочий исходный код, который реализует MS SSPI (как упоминалось в потоке выше), процедурный, а не ООП предпочтительный.
Я посмотрел пример кода проектов здесь:
http://www.codeproject.com/KB/IP/sslclasses.aspx
Но это C# ООП. Преобразование этого в C++ код не является тривиальным.
OpenSSL
Вызовы SChannel соответствуют стандартам GSS API. Есть, конечно, несколько альтернатив - например, OpenSSL. Этот пакет представляет собой полную и тщательную реализацию протокола, и для тех, кто слишком хорошо знаком с UNIX, несомненно, является лучшим выбором. Первоначально пакет предназначался для сообщества UNIX, и для его компиляции используется среда выполнения Perl, поэтому для разработчиков Windows, которые никогда не работали с системами типа UNIX, требуется некоторая кривая обучения.
Кроме того, OpenSLL делает некоторые очень нестандартные вещи
Николай, собрав много скомпилированного исходного кода (www.coastrd.com), я надеялся найти кого-то, кто хотел бы сделать то же самое.
4 ответа
Этот пример SSPI SChannel SMTPS должен компилироваться и запускаться в Visual Studio 2008 как есть
http://www.coastrd.com/c-schannel-smtp
SChannel - это реализация Microsoft GSS API, которая включает протокол SSL/TLS.
Преимущества использования SChannel:
- кровавые детали защищены от разработчика SSPI.
- Никаких дополнительных настроек для запуска финального приложения не требуется:
- SChannel является неотъемлемой частью операционной системы
- На платформах Windows ME/2000/XP/... SChannel устанавливается и настраивается по умолчанию
- Вызовы SChannel соответствуют стандартам GSS API.
- Вам не нужно создавать / устанавливать какие-либо сертификаты
- нет сторонних dll (1MB или больше) для отправки и установки
Код должен создать сеанс, который выглядит следующим образом:
----- Инициализирован SSPI
----- WinSock Initialized
----- Инициализированные учетные данные
----- подключен к серверу
70 байт данных рукопожатия отправлено
Получено 974 байта данных рукопожатия
Отправлено 182 байта данных рукопожатия
Получено 43 байта данных рукопожатия.
Рукопожатие прошло успешно
----- Клиентское рукопожатие выполнено
----- Аутентифицированные учетные данные сервера
Тема сервера: C= США, S= Калифорния, L= Маунтин-Вью, O=Google Inc, CN=smtp.gmail.com
Эмитент сервера: C=ZA, S= Западный Кейп, L= Кейптаун, O=Thawte Consulting cc, OU= Отдел сертификационных услуг, CN = Thawte Premium Server CA, E=premium-server@thawte.com
----- цепочка сертификатов отображается
----- Сертификат сервера проверен
----- контекст сертификата сервера выпущен
Протокол: TLS1
Шифр: RC4
Сила шифра: 128
Хеш: MD5
Хэш прочность: 128
Обмен ключами: RSA
Сила обмена ключами: 1024
----- Информация о безопасном соединении
64 байта полученных (зашифрованных) данных приложения
Расшифрованные данные: 43 байта
220 mx.google.com ESMTP 6sm17740567yxg.66
Отправка 7 байтов открытого текста:
EHLO
Отправлено 28 байт зашифрованных данных
169 байтов полученных (зашифрованных) данных приложения
Расшифрованные данные: 148 байт
250-mx.google.com к вашим услугам, [22.33.111.222]
250-РАЗМЕР 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250 ТРУБОПРОВОДОВ
Отправка 7 байтов открытого текста:
УВОЛИТЬСЯ
Отправлено 28 байт зашифрованных данных
69 байтов полученных (зашифрованных) данных приложения
Расшифрованные данные: 48 байт
221 2.0.0 замыкающее соединение 6sm17740567yxg.66
----- SMTP сессия завершена
Отправка Закрыть Уведомить
Отправлено 23 байта данных рукопожатия
----- Отключен от сервера
----- Начать уборку
----- Все сделано -----
Может быть, эта ссылка является хорошей отправной точкой. Он содержит реально работающий пример кода с использованием MS SSPI (хотя он выглядит очень специфично для MSVC, но, в любом случае, его окна только). Просто игнорируйте примеры OpenSSL;-)
Повторяйте за мной: "Я хочу использовать OpenSSL".
Эта проблема слишком серьезна и слишком легка для того, чтобы ее можно было решить, когда вы захотите ее решить. Если у вас есть проблема с OpenSSL, попробуйте решить эту проблему с помощью диалога и исправлений для OpenSSL.
(Никто не застрахован от этого, даже Microsoft, или даже OpenSSL. Используйте что-то, чей источник вы можете просмотреть и который исправлен при возникновении проблем. Используйте OpenSSL.)
Сколько бы вы заплатили за такой скомпилированный рабочий исходный код? Или ты ожидал, что кто-то просто даст тебе это? OpenSSL ребята уже сделали. Это ужасно, но цена подходящая.