Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QSslConnection error:1408F10B



  • Добрый день. подскажите куда копать.

    Qt 5.12.4 mingv32
    Windows 10

    Есть собственный почтовый сервер в организации. Понадобилось пересылать письма в пределах организации из собственного приложения.
    Использовал код из этого проекта : https://github.com/xcoder123/SimpleSmtp_SSL_QT5
    При подключении с стороннему серверу (smtp.mail.ru) письма отправляются.
    А к серверу организации не могу подключиться, ошибка рукопожатия при соединении ssl.

    true
    "OpenSSL 1.1.1b  26 Feb 2019"
    "OpenSSL 1.1.1h  22 Sep 2020"
    No attachments found
    stateChanged  QAbstractSocket::HostLookupState
    stateChanged  QAbstractSocket::ConnectingState
    stateChanged  QAbstractSocket::ConnectedState
    Connected 
    error  QAbstractSocket::SocketError(13)
    stateChanged  QAbstractSocket::UnconnectedState
    disconneted
    error  "Error during SSL handshake: error:1408F10B:SSL routines:ssl3_get_record:wrong version number"
    

    OpenSsl тоже выдает эту ошибку.

    openssl s_client -connect  address.khv.ru:587
    CONNECTED(00000194)
    6004:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:ssl/record/ssl3_record.c:332:
    ---
    no peer certificate available
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 5 bytes and written 320 bytes
    Verification: OK
    ---
    New, (NONE), Cipher is (NONE)
    Secure Renegotiation IS NOT supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    Early data was not sent
    Verify return code: 0 (ok)
    ---
    

    Нагуглить толком ничего не смог. Вроде как проблема с сертификатом. Установил в систему наш самоподписаный сертификат, не помогло.
    Куда копать ?



  • @Honey12345 Решено. При подключении к smtp серверу по 587 порту, вначале нужно установить незашифрованное соединение используя
    QSslSocket::connectToHost(host, port )
    Далее запрашивать сервер об установки защищенного соединения
    t = new QTextStream( socket )
    *t << "STARTTLS" << "\r\n";
    t->flush();
    А уже после этого включать шифрование
    QSslSocket::startClientEncryption()


Log in to reply