Отговори на тема  [ 14 мнения ] 
openSSL 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение openSSL
как да разбера колко байта имам приети?
SSL_pending(...) ми връща постоянно 0 а ги има
като го прескоча чете ама ми трябват колко има налични за четене


Код:
[APP] Connecting: tlstest.paypal.com
[SSL] Socket
[SSL] GetHostByName: tlstest.paypal.com
[SSL] Host IP: 23.223.123.34 : 443
businessCategory=Private Organization/jurisdictionC=US/jurisdictionST=Delaware/s
erialNumber=3014267, C=US, ST=California, L=San Jose, O=PayPal, Inc., OU=CDN Sup
port, CN=tlstest.paypal.com

[APP] Connected
[APP] Sent
GET / HTTP/1.1
Host:tlstest.paypal.com

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 20
Date: Tue, 25 Jun 2019 16:07:16 GMT
Connection: keep-alive

PayPal_Connection_OK

_________________
main[-1u]={1};


Вто Юни 25, 2019 6:10 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10356
Местоположение: Добрич
Мнение Re: openSSL
https://stackoverflow.com/questions/661 ... eturn-zero


Вто Юни 25, 2019 6:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: openSSL
аз минах през много такива постове ( знам че SSL_pending() връща колко остават от текущия read )
аз питам без SSL_read() има ли начин

_________________
main[-1u]={1};


Вто Юни 25, 2019 6:32 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10356
Местоположение: Добрич
Мнение Re: openSSL
във втория отговор обясняваха,че може да видиш хендъла. Но това си зависи от конкретната платформа. Не си казал на какво го ползваш.


Вто Юни 25, 2019 6:55 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: openSSL
в момента Windows после Linux/Mac... то разлика мноо нема
абе правя ... нема са хилиш ... Windows(в смисъл PC) като Arduino ... ClientSecured библиотеката
то повече за симулации и за обучение - без платка ... реално сорса трябва да работи и на платка ако спазвам "закона"

_________________
main[-1u]={1};


Вто Юни 25, 2019 7:01 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: openSSL
ей нящо такова като на шота
Arduino base core
принтва в конзолата и на Ком Портовете
TCP-то е готово, ся са тормозя със SSL-ла .... int ClientSecured::available() сигурно и peek()

компилира до EXE на компа


Прикачени файлове:
0.png
0.png [ 61.49 KiB | Прегледано 5324 пъти ]

_________________
main[-1u]={1};
Вто Юни 25, 2019 7:11 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: openSSL
"тъпо", но работи :)

Код:
int ClientSecure::peek()
{
    char b;
    return SSL_peek(sslclient.ssl, &b, 1) > 0 ? b : -1;
}

int ClientSecure::available()
{
    char buf[256];
    int rc = SSL_peek(sslclient.ssl, buf, sizeof(buf));
    return (rc > 0) ? rc: 0;
}


Прикачени файлове:
Untitled.png
Untitled.png [ 11.9 KiB | Прегледано 5287 пъти ]

_________________
main[-1u]={1};
Сря Юни 26, 2019 7:45 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: openSSL
какво трябва да означава
Код:
[SSL] USE CERTIFICATE
[SSL] USE PRIVATE KEY
[ERROR] SSL_connect()
5492:error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate::0:SSL alert number 42


device_cert и private_key са верни:
openssl s_client -connect akc28iu7dn5ra-ats.iot.us-east-2.amazonaws.com:8883 -cert dev-certificate.pem -key dev-private.pem
казва бла бла... :SSL handshake has read 5400 bytes and written 1619 bytes
Verification: OK

_________________
main[-1u]={1};


Чет Юни 27, 2019 2:59 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10356
Местоположение: Добрич
Мнение Re: openSSL
оpenssl ми е ревал така, когато сертификата не е за целта която искаш. В случая обаче щом от конзола работи значи не е от това.

По-скоро виж дефаулт настройките. Когато го викаш в конзола примерно -certform по дефаулт е РЕМ и затова ти работи без да си го казал. Не е ясно като викаш като библиотека какво подаваш и какво е дефаулт. Виж и за кий формата, докъде да проверява чейна със сертификати и т.н.


Чет Юни 27, 2019 4:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: openSSL
баси - то няма нищо интересно...
връзка до Amazon - CA_LIST не се ползва - само клиент церт и привате, бай дефол чиперите са всички
гърми на хенд-шека (до гугъл и ажур бачка ама те са само с CA)

Код:

int ClientSecure::ssl_begin(const char *host, uint32_t port, int vrf)
{
    int rc;
    if (_connected) // allready
        return -1;
    if (ssl_connect_socket(&client, host, port) < 0)
        return -1;

    client.ctx = SSL_CTX_new(SSLv23_method()); // TLSv1_2_method
    client.ssl = SSL_new(client.ctx);

#if 0 // SSL_trace
    static BIO *outbio = BIO_new_fp(stdout, BIO_NOCLOSE);
    SSL_set_msg_callback(client.ssl, msg_cb);
    SSL_set_msg_callback_arg(client.ssl, outbio);
#endif

    //CA_LIST
    if (client.ca_cert)
    {
        rc = SSL_CTX_load_verify_locations(client.ctx, client.ca_cert, 0);
        if (0 == rc)
        {
            DEBUG_SSL("[ERROR] CA_LIST: %d\n", rc);
            return -1;
        }
        DEBUG_SSL("[SSL] USE CA_LIST\n");
    }

    //CLENT CERTIFICATE
    if (client.certificate)
    {
        if (SSL_CTX_use_certificate_file(client.ctx, client.certificate, SSL_FILETYPE_PEM) <= 0)
        {
            ERR_print_errors_fp(stderr);
            return -1;
        }
        DEBUG_SSL("[SSL] USE CERTIFICATE\n");
    }

    //CLENT PRIVATE KEY
    if (client.private_key)
    {
        if (SSL_CTX_use_PrivateKey_file(client.ctx, client.private_key, SSL_FILETYPE_PEM) <= 0)
        {
            ERR_print_errors_fp(stderr);
            return -1;
        }
        DEBUG_SSL("[SSL] USE PRIVATE KEY\n");
    }

    if (client.private_key)
    {
        if (!SSL_CTX_check_private_key(client.ctx))
        {

            ERR_print_errors_fp(stderr);
            return -1;
        }
        DEBUG_SSL("[SSL] PRIVATE KEY IS OK\n");
    }

    //CIPHERS
    if (client.ciphers)
        SSL_set_cipher_list(client.ssl, client.ciphers);

    //SNI
    if (client.sni_host_name)
        SSL_set_tlsext_host_name(client.ssl, client.sni_host_name);

    //SSL_set_verify(client.ssl, SSL_VERIFY_PEER, NULL);
    //SSL_CTX_set_verify_depth(client.ssl, 1);

    //ATTACH SOCKET
    if (SSL_set_fd(client.ssl, client.sock) <= 0)
    {
        DEBUG_SSL("[ERROR] SSL_set_fd()\n");
        return -1;
    }
    //HANDSHAKE
    if (SSL_connect(client.ssl) <= 0)
    {
        DEBUG_SSL("[ERROR] SSL_connect()\n");
        ERR_print_errors_fp(stderr);
        return -1;
    }

    if (vrf && SSL_get_verify_result(client.ssl) != X509_V_OK)
    {
        ERR_print_errors_fp(stderr);
        return -1;
    }

    //DEBUG_SSL("[SSL] Started\n");
    return 0;
}


_________________
main[-1u]={1};


Чет Юни 27, 2019 5:38 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: openSSL
намерих проблема :) ( утре ще оправя гита )
докато зареждам SSL_CTX_use_ .... сертификатите в контекста SSL_CTX *ctx
SSL *ssl не трябва да е създаден...

преместих го след зареждането на цертификатите и са конектна mqtt в Amazon (само с client-cert / client-private-key, без ca_file )
client.ssl = SSL_new(client.ctx);

то май имаше алиас SSL_use_ .... ма утре ще пробвам че ми писна

_________________
main[-1u]={1};


Пет Юни 28, 2019 6:38 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: openSSL
воаля :)


Прикачени файлове:
wizio-amazon.png
wizio-amazon.png [ 89.62 KiB | Прегледано 5175 пъти ]

_________________
main[-1u]={1};
Пет Юни 28, 2019 6:46 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: openSSL
начи тоя дето е заложил .available() и .peek() в основата на класовете е голям джендер
търся "елегантно" решение как да видя колко байта има приети или пииик на първия приет...
SSL_peek() работи "странно" на WIN работи на LIN не с една "педя" обяснения защо не...
накратко ако няма прието и декодирано функцията блокира и чака :)

супер тъпо я разблокирах ама не ми изглежда добре макар че работи като за Ардуино


Код:
int ClientSecure::available()
{
    if (!_connected)
        return 0;
    char buffer[128];
    int flags = fcntl(client.sock, F_GETFL, 0);
    fcntl(client.sock, F_SETFL, flags | O_NONBLOCK);
    int rc = SSL_peek(client.ssl, buffer, sizeof(buffer));
    fcntl(client.sock, F_SETFL, flags & ~O_NONBLOCK);
    return (rc > 0) ? rc : 0;
}


Идеи?

_________________
main[-1u]={1};


Пет Авг 30, 2019 7:47 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: openSSL
намерих си един бъг в сетването на SO_RCVTIMEO и беше голям таймаута
setsockopt(client.sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&interval, sizeof(struct timeval));

преди сокет connect() таймаута е ~10 sec и след handshake го сменям на 10 mSec
да не "блокират" SSL_read() и SSL_peek()

_________________
main[-1u]={1};


Съб Авг 31, 2019 5:30 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 14 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: ToHu и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни