Компилируемый код C ++ для реализации безопасного клиента SLL / TLS с использованием MS SSPI - PullRequest
7 голосов
/ 09 января 2010

как описано здесь http://www.ddj.com/cpp/184401688

У меня нет времени писать это с нуля.

спросил и не ответил https://stackoverflow.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 ]

23 голосов
/ 12 января 2010

Этот пример 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 (1 МБ или больше) для отправки и установки

Код должен создать сеанс, который выглядит следующим образом:

----- Инициализирован 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 байта данных рукопожатия отправлено
----- Отключен от сервера
----- Начать уборку
----- все готово -----

5 голосов
/ 09 января 2010

Может быть эта ссылка является хорошей отправной точкой. Он содержит реально работающий пример кода с использованием MS SSPI (хотя выглядит он очень специфично для MSVC, но, в любом случае, его окна только). Просто игнорируйте примеры OpenSSL; -)

5 голосов
/ 09 января 2010

Повторяйте за мной: «Я хочу использовать OpenSSL ».

Эта проблема слишком серьезна и слишком легка для того, чтобы ее можно было обернуть, чтобы справиться с ней каждый раз, когда вы захотите ее решить. Если у вас есть проблема с OpenSSL, попробуйте решить ее с помощью диалога и исправлений для OpenSSL.

(Никто не застрахован от этого, даже Microsoft, или даже OpenSSL. Используйте что-то, чей источник вы можете просмотреть и который исправлен в случае проблем. Используйте OpenSSL.)

0 голосов
/ 09 января 2010

Сколько бы вы заплатили за такой скомпилированный рабочий исходный код? Или вы ожидали, что кто-то просто даст вам это? OpenSSL ребята уже сделали. Это ужасно, но цена подходящая.

...