С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 25.05.2015
Сообщений: 39
1

Smtps протокол или как происходит процесс установки ssl/tls

09.10.2016, 15:25. Показов 1539. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Решил разобраться с протоколом smtps, да и в принципе с системой соглашений различных протоколов.
Первым делом, естесна, написал прототип на python
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from smtplib import SMTP_SSL
 
def main():
    SMTPServer = 'smtp.mail.ru'
    PROTOCOL = 465
    USERNAME = 'some_mail@mail.ru'
    PASSWORD = 's0me_pa$$w0rd'
 
    try:
        conn = SMTP_SSL(SMTPServer, PROTOCOL)
        conn.login(USERNAME, PASSWORD)
        conn.close()
        print 'OK!'
 
    except Exception, exc:
        print str(exc)
 
main()
Далее, я начал переносить все на c++. Для начала, решил обойтись без всяких библиотек типа boost, openssl(пока нету навыков работы с ними) и платного закрытого решения от chilkatsoft.
Установил tcp соединение средствами winsock`етов. И... на этом все остановилось:
C++
1
2
3
4
5
6
7
8
9
if (SOCKET_ERROR == (connect(s, (struct sockaddr*)&sin, sizeof(sin)))) //все ок, ошибок нету. Соединение установлено.
{
    cout << "_3_" << endl;
    _getch();
    return 1;
}
 
recv(s, buff, RECV_BUFF_SIZE, 0); //доходит до сюда и зависает (сервер молчит)
cout << endl << buff << endl;
Соответственно, почитал статьи про tls, протокол Диффи-Хеллмана, ssl, smtp и smtps.
И у меня возникло недопонимание:
Тут сказано, что сервер должен отправить мне сообщение(tls). Но ведь он молчит!!!! Быть может, он хочет, чтобы я ему чего-то отправил?

Полный исходник, если надо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <string>
#include <vector>
#include <conio.h>
#include <windows.h>
#include <winsock.h>
 
#pragma comment(lib, "ws2_32.lib")
 
#define DEFAULT_DOMAIN "smtp.mail.ru"
#define DEFAULT_PORT 465 
#define RECV_BUFF_SIZE 1024
using namespace std;
 
int main()
{
    WSAData ws;
    SOCKET s;
    hostent *host;
    SOCKADDR_IN sin;
    char buff[RECV_BUFF_SIZE];
 
    if (FAILED(WSAStartup(MAKEWORD(1, 1), &ws)))
    {
        cout << WSAGetLastError << endl;
        _getch();
        return 1;
    }
 
    s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (SOCKET_ERROR == s)
    {
        cout << "_2_" << endl;
        _getch();
        return 1;
    }
 
    host = gethostbyname(DEFAULT_DOMAIN);
 
    ZeroMemory(&sin, sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_port = htons(DEFAULT_PORT);
    memcpy(&sin.sin_addr, host->h_addr, host->h_length);
 
    if (SOCKET_ERROR == (connect(s, (struct sockaddr*)&sin, sizeof(sin))))
    {
        cout << "_3_" << endl;
        _getch();
        return 1;
    }
 
    recv(s, buff, RECV_BUFF_SIZE, 0); //доходит до сюда и зависает (сервер молчит)
    cout << endl << buff << endl;
 
    cout << endl << "end!" << endl;
    closesocket(s);
    WSACleanup();
    _getch();
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2016, 15:25
Ответы с готовыми решениями:

SSL или TLS - кодировка (протокол)
Здравствуйте. Помогите разобраться. Имеется сервер, созданный на С++ (через сокеты в консольном...

SMTP, SSL, TLS
Здравствуйте, устанавливаю соединение с smtp.mail.ru, получаю - 220 smtp42.i.mail.ru ESMTP ready...

Чем отличаются TLS и SSL
В чем конкретные отличия, и почему TLS лучше SSL?

SSL/TLS в FTP, SMTP, POP3, IMAP
Здравствуйте! Помогите, пожалуйста, разобраться в следующем вопросе. Не получается понять...

5
1 / 1 / 0
Регистрация: 25.05.2015
Сообщений: 39
09.10.2016, 15:38  [ТС] 2
На офф сайте говорится, что портом и для tls, и для ssl служит 465. Но здесь сказано, что для tls и ssl предусмотрены разные порты(465 - ssl, 587 - tls). Попробовал сделать коннект к 587 - приходит ответ: см вложение. Те был просто не тот порт?
Миниатюры
Smtps протокол или как происходит процесс установки ssl/tls  
0
1 / 1 / 0
Регистрация: 25.05.2015
Сообщений: 39
09.10.2016, 15:54  [ТС] 3
Если отправить команду HELO или EHLO, то приходит ошибка 500
C++
1
2
3
4
5
6
7
8
recv(s, buff, RECV_BUFF_SIZE, 0); //отвечает 220 статусом (готов к работе)
cout << endl << buff << endl;
ZeroMemory(&buff, sizeof(buff));
 
send(s, "HELO", sizeof("HELO"), 0);
recv(s, buff, RECV_BUFF_SIZE, 0);  //500 ошибка
cout << endl << buff << endl;
ZeroMemory(&buff, sizeof(buff));
Миниатюры
Smtps протокол или как происходит процесс установки ssl/tls  
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
09.10.2016, 16:12 4
Цитата Сообщение от dima291000 Посмотреть сообщение
что для tls и ssl предусмотрены разные порты(465 - ssl, 587 - tls)
ssl - сразу устанавливается защищенное соединение.
starttls - устанавливается обычное соединение, а после специального запроса (starttls) - защищенное.
StartTLS - более современное решение и не требует отдельных портов для открытой и защищенной передачи данных.
Цитата Сообщение от dima291000 Посмотреть сообщение
решил обойтись без всяких библиотек типа boost, openssl
Это проблематично ввиду сложности реализации алгоритмов. Вы можете обойтись без библиотек высокого уровня (boost Asio, curl, Qt...), но одна из библиотек шифрования (OpenSSL, GnuTLS, LibreSSL...) вам понадобится. Даже перечисленные библиотеки высокого уровня используют одну из них (обычно openssl), а не собственные велосипеды.
0
1 / 1 / 0
Регистрация: 25.05.2015
Сообщений: 39
09.10.2016, 16:43  [ТС] 5
Цитата Сообщение от gng Посмотреть сообщение
ssl - сразу устанавливается защищенное соединение.
Те сначала все же коннектится сокет, далее обмен сообщениями типа hello, use ssl, public key (условно)?
Еще вопрос, если я привинчу ту же openssl и инициализирую после коннекта сокета - все же заработает? Просто сервер, наверное, ждет ту самую инициализацию.
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
09.10.2016, 22:54 6
Цитата Сообщение от dima291000 Посмотреть сообщение
Те сначала все же коннектится сокет, далее обмен сообщениями типа hello, use ssl, public key (условно)?
"Открытым текстом" в этом случае не передается НИЧЕГО. (в смысле hello, use ssl и т.п.)
Цитата Сообщение от dima291000 Посмотреть сообщение
Еще вопрос, если я привинчу ту же openssl и инициализирую после коннекта сокета - все же заработает?
Да, если я вас правильно понял.
0
09.10.2016, 22:54
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.10.2016, 22:54
Помогаю со студенческими работами здесь

SSL, TLS и POP3
Друзья-программисты, очень нужна ваша помощь!!! Я бьюсь над созданием почтового клиента(не...

Как заставить работать протокол SSL под PHP 5.2.12
Здравствуйте! Столкнулся недавно с проблемой, не знаю как решить.Прошу помощи. Не работает SSL...

Ssl/Tls криптография, перехват пакетов
Вообщем, создал свой клиент - серверное приложение и использую Ssl/Tls криптографию. Попробовал...

Ssl/Tls криптография, аутентикация клиента
Здравствуйте, вообщем, создал TcpListener, TcpClient, реализовал криптографию, всё работает, всё...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Администрирован­­­­ие Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru