Opened 4 years ago

Closed 4 years ago

#42 closed баг (fixed)

Порт не подключается к серверу по TLS

Reported by: AlexLir Owned by: alx
Priority: critical Milestone: 1 очередь
Keywords: Cc: Director, san

Description

Имеются два устройства MC04-WL, сервер и клиент.
Поле Ciphers в настройках порта 1(RS-232) обоих устройств установлено в значение "пусто".
После включения обоих устройств, порт клиента не подключается к серверу.
Так-же между этими устройствами настроен туннель VPN, туннель работает, данные проходят.

Лог со стороны клиента:

3gd[243]: tcp_tty.cpp:198: connecting to 37.29.46.78 port 1001 (fd 17)...
3gd[243]: link.cpp:192: --> Link::error(): connection closed (17)

Лог со стороны сервера

3gd[243]: link.cpp:363: connect from ::ffff:46.229.134.176:42670 (19)
3gd[243]: link.cpp:192: --> Link::error(): connection closed (19)

p.s.

  1. Как выяснилось, в этой ситуации, можно "заставить" клиента подключиться к серверу проведя следующие магические ритуалы на обоих устройствах:
  • В Ciphers вместо "пусто" установить значение ALL
  • Загрузить заново сертификат и ключ в блок (тот же самый что уже загружен)
  1. Запись только настройки ALL, без повторной записи сертификата, эффекта не даёт.
  1. Если в Ciphers установлено ALL, то после загрузки порт клиента соединяется с сервером.

p.p.s. Подозреваю что Chiphers в значении пусто, может быть не корректной настройкой, в таком случае "претензия" в том что изменение её в значение ALL происходит не сразу, а только после повторной загрузки сертификата или перезапуска.

Change History (11)

comment:1 by AlexLir, 4 years ago

Cc: Director setup added; В removed

comment:2 by AlexLir, 4 years ago

Cc: san added; setup removed

comment:3 by AlexLir, 4 years ago

Owner: set to alx
Status: newassigned

in reply to:  description comment:4 by alx, 4 years ago

Replying to AlexLir:

Лог со стороны клиента:

3gd[243]: tcp_tty.cpp:198: connecting to 37.29.46.78 port 1001 (fd 17)...
3gd[243]: link.cpp:192: --> Link::error(): connection closed (17)

Лог со стороны сервера

3gd[243]: link.cpp:363: connect from ::ffff:46.229.134.176:42670 (19)
3gd[243]: link.cpp:192: --> Link::error(): connection closed (19)

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

comment:5 by AlexLir, 4 years ago

Сервер

Jan 29 07:32:56 ntpd[254]: Soliciting pool server 91.189.89.198
Jan 29 07:32:57 ntpd[254]: Soliciting pool server 2001:67c:1560:8003::c7
Jan 29 07:33:11 3gd[243]: link.cpp:363: connect from ::ffff:46.229.134.176:56384 (23)
Jan 29 07:33:11 3gd[243]: link.cpp:192: --> Link::error(): connection closed (23)
Jan 29 07:33:41 3gd[243]: link.cpp:363: connect from ::ffff:46.229.134.176:56386 (23)
Jan 29 07:33:41 3gd[243]: link.cpp:192: --> Link::error(): connection closed (23)
Jan 29 07:33:56 login[289]: ROOT LOGIN  on '/dev/ttyS0'
Jan 29 07:34:04 ntpd[254]: Soliciting pool server 2001:67c:1560:8003::c8
Jan 29 07:34:11 3gd[243]: link.cpp:363: connect from ::ffff:46.229.134.176:56388 (23)
Jan 29 07:34:11 3gd[243]: link.cpp:192: --> Link::error(): connection closed (23)
Jan 29 07:34:42 3gd[243]: link.cpp:363: connect from ::ffff:46.229.134.176:56390 (23)
Jan 29 07:34:42 3gd[243]: link.cpp:192: --> Link::error(): connection closed (23)

Клиент

Jan 29 07:33:41 3gd[242]: link.cpp:192: --> Link::error(): connection closed (25)
Jan 29 07:33:57 ntpd[254]: Soliciting pool server 2001:67c:1560:8003::c7
Jan 29 07:34:11 3gd[242]: tcp_tty.cpp:198: connecting to 37.29.46.78 port 1001 (fd 25)...
Jan 29 07:34:12 3gd[242]: link.cpp:192: --> Link::error(): connection closed (25)
Jan 29 07:34:42 3gd[242]: tcp_tty.cpp:198: connecting to 37.29.46.78 port 1001 (fd 25)...
Jan 29 07:34:42 3gd[242]: link.cpp:192: --> Link::error(): connection closed (25)
Jan 29 07:35:06 ntpd[254]: Soliciting pool server 2001:67c:1560:8003::c7
Jan 29 07:35:12 3gd[242]: tcp_tty.cpp:198: connecting to 37.29.46.78 port 1001 (fd 25)...
Jan 29 07:35:12 3gd[242]: link.cpp:192: --> Link::error(): connection closed (25)
Jan 29 07:35:20 login[287]: ROOT LOGIN  on '/dev/ttyS0'

comment:6 by alx, 4 years ago

Спасибо. Здесь в логе, к сожалению, нет никакой дополнительной информации - только указание на то, что было соединение, и оно сразу разорвалось. Видимо, не смогли выполнить TSL handshake. А вот почему не смогли - вопрос... Надо бы придумать, как выводить в лог более подробную информацию о том, почему не выполнено соединение...

comment:7 by alx, 4 years ago

Проверил код - вроде бы после любой успешной загрузки сертификата соединение пересоздается заново, что включает в себя и новую загрузку сертификатов...

comment:8 by san, 4 years ago

Алексей, а всё-таки, Chiphers в значении "пусто" это корректная настройка или нет?

in reply to:  8 comment:9 by alx, 4 years ago

Replying to san:

Алексей, а всё-таки, Chiphers в значении "пусто" это корректная настройка или нет?

Если ты имел в виду параметр "Ciphers" - то да, корректная.

in reply to:  8 comment:10 by alx, 4 years ago

Replying to san:

Алексей, а всё-таки, Chiphers в значении "пусто" это корректная настройка или нет?

Я перечитал описание функции SSL_CTX_set_cipher_list(). Вероятно, я неправильно понимал ее ранее. Как я понял сейчас, значение "пусто" - это, формально, корректная настройка, но, так как в пустом списке нет ни одного cipher, соединение TLS установить с такой настройкой невозможно.

Таким образом, проблемой является только неприменение настройки Ciphers сразу после ее изменения.

comment:11 by alx, 4 years ago

Resolution: fixed
Status: assignedclosed

In 157/smartCrypto:

При изменении парамерта Ciphers линк пересоздает контекст SSL. Благодаря этому
новое значение сразу применяется. Closes #42.

Note: See TracTickets for help on using tickets.