Aws-iot-device-sdk-python-v2: AWS_IO_TLS_ERROR_NEGOTIATION_FAILURE в 1.0.6 (awscrt 0.5.13)

Созданный на 15 апр. 2020  ·  17Комментарии  ·  Источник: aws/aws-iot-device-sdk-python-v2

Опишите ошибку
После обновления моей установки до awsiotsdk-1.0.6 он перестал работать с awscrt, не авторизовавшимся через серверную часть aws. Может быть связано с обновлением awscrt до 0.5.13.

Номер версии SDK
awsiotsdk-1.0.6

Платформа / ОС / Устройство
rpi3b +

Воспроизвести (наблюдаемое поведение)
Обновите awsiotsdk до версии 1.0.6 .

Ожидаемое поведение
Должно работать как положено.

Журналы / вывод

Apr 15 06:55:01 raspberrypi python3[581]: Connecting to something-east-1.amazonaws.com with client ID 'foo-bar-baz'...
Apr 15 06:55:01 raspberrypi python3[581]: Traceback (most recent call last):
Apr 15 06:55:01 raspberrypi python3[581]:   File "app.py", line 86, in <module>
Apr 15 06:55:01 raspberrypi python3[581]:     connect_future.result()
Apr 15 06:55:01 raspberrypi python3[581]:   File "/usr/lib/python3.7/concurrent/futures/_base.py", line 432, in result
Apr 15 06:55:01 raspberrypi python3[581]:     return self.__get_result()
Apr 15 06:55:01 raspberrypi python3[581]:   File "/usr/lib/python3.7/concurrent/futures/_base.py", line 384, in __get_result
Apr 15 06:55:01 raspberrypi python3[581]:     raise self._exception
Apr 15 06:55:01 raspberrypi python3[581]: awscrt.exceptions.AwsCrtError: AwsCrtError(name='AWS_IO_TLS_ERROR_NEGOTIATION_FAILURE', message='TLS (SSL) negotiation failed', code=1029)
Apr 15 06:55:01 raspberrypi systemd[1]: app.service: Main process exited, code=exited, status=1/FAILURE
guidance

Самый полезный комментарий

@JonathanHenson Я использовал старую конечную точку ( <endpoint-id>.iot.us-east-1.amazonaws.com ), я переключился на ATS ( <endpoint-id>-ats.iot.us-east-1.amazonaws.com ), и теперь она работает. Спасибо за вашу помощь!

Все 17 Комментарий

У меня возникла такая же проблема.

Просматривайте свой пост в поисках аналогичной проблемы с SDK CPPv2, которая, как я полагаю, основана на тех же основных функциях. Я выяснил, что SDK CPPv2 пытался проверить полную цепочку доверия, а не только предоставленный мной сертификат CA, но полной цепочки доверия на моем устройстве не существовало. Скопировав /etc/ssl/certs/ca-certificates.crt с моей машины Ubuntu на мое устройство и передав его методу Aws :: Iot :: MqttClientConnectionConfigBuilder :: WithCertificateAuthority (), я смог предоставить полное хранилище доверенных сертификатов, которое работало . Не уверен, что такое эквивалент этого метода в Python, но он должен быть там - надеюсь, эта подсказка вам поможет!

Обновление: в последней версии C ++ SDK я также вижу, что S2N (стек AWS TLS) выберет ECDSA для подписи, что не поддерживается в версии выпуска базы кода.

Совет @jsakwa кажется
Можете ли вы запустить samples/pubsub.py с установленным --root-ca ? Обычно вы передаете файл Amazon Root CA 1, доступный здесь

@graebm , нет пропускной способности для тестирования банкомата. Работает ли это для вас? Если это сработает, это будет неестественно, потому что в документации четко сказано, что переключатель следует использовать, если корень доверия еще не установлен на вашем компьютере, а он находится на моем (он работает после перехода на более раннюю версию).

@graebm Я только что снова тестировал. Версия 1.0.5 работает нормально. Проблема возникает при использовании версии 1.0.6. Я использую сертификат, подписанный указанным вами ЦС (а не устаревшим).

Этот тест был запущен с использованием pubsub.py с --root-ca в контейнере Docker.

Это отрывок из результатов отладки:

(...)

[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfc006320: Scheduling attempt_connection task for immediate execution
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfc006320: Running attempt_connection task with <Running> status
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: initializing with domain 1 and type 0
Unsupported setsockopt level=1 optname=16384
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: setting socket options to: keep-alive 0, keep idle 0, keep-alive interval 0, keep-alive probe count 0.
[WARN ] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: setsockopt() for NO_SIGNAL failed with errno 92. If you are having SIGPIPE signals thrown, you may want to install a signal trap in your application layer.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: beginning connect.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: connecting to endpoint [redacted]:443.
[ERROR] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: connect failed with error code 99.
[INFO ] [2020-04-25T22:14:14Z] [fdeff460] [dns] - id=0xff2df650: recording failure for record [redacted] for [redacted].iot.us-east-1.amazonaws.com, moving to bad list
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [dns] - static: purging address [redacted] for host [redacted].iot.us-east-1.amazonaws.com from the cache due to cache eviction or shutdown
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: is still open, closing...
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: closing
[ERROR] [2020-04-25T22:14:14Z] [fdeff460] [channel-bootstrap] - id=0xff3109a0: failed to create socket with error 1055
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfc006450: Scheduling attempt_connection task for immediate execution
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfc006450: Running attempt_connection task with <Running> status
Unsupported setsockopt level=1 optname=16384
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: initializing with domain 0 and type 0
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: setting socket options to: keep-alive 0, keep idle 0, keep-alive interval 0, keep-alive probe count 0.
[WARN ] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: setsockopt() for NO_SIGNAL failed with errno 92. If you are having SIGPIPE signals thrown, you may want to install a signal trap in your application layer.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: beginning connect.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: connecting to endpoint [redacted]:443.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd503440: Scheduling (null) task for future execution at time 3166071860135
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd503488: Scheduling epoll_event_loop_unsubscribe_cleanup task for immediate execution
[INFO ] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: connection success
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: local endpoint 172.17.0.2:58438
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: assigning to event loop 0xff281f60
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel-bootstrap] - id=0xff3109a0: client connection on socket 0xfd502a50 completed with error 0.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel] - id=0xfd504088: Beginning creation and setup of new channel.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd503c48: Scheduling on_channel_setup_complete task for immediate execution
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd503488: Running epoll_event_loop_unsubscribe_cleanup task with <Running> status
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd503c48: Running on_channel_setup_complete task with <Running> status
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel] - id=0xfd504088: setup complete, notifying caller.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel] - id=0xfd504088: no message pool is currently stored in the event-loop local storage, adding 0xfd504740 with max message size 16384, message count 4, with 4 small blocks of 128 bytes.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel-bootstrap] - id=0xff3109a0: channel 0xfd504088 setup succeeded: bootstrapping.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket-handler] - id=0xfd514e68: Socket handler created with max_read_size of 16384
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd515038: Scheduling tls_timeout task for future execution at time 3165183175311
[WARN ] [2020-04-25T22:14:14Z] [fdeff460] [tls-handler] - id=0xfd515020: negotiation failed with error Invalid signature algorithm (Error encountered in /tmp/pip-wheel-tiv_gdev/awscrt/aws-common-runtime/s2n/tls/s2n_client_cert_verify.c line 96)
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel-bootstrap] - id=0xff3109a0: tls negotiation result 1029 on channel 0xfd504088
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd5041c8: Scheduling channel_shutdown task for immediate execution
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel] - id=0xfd504088: Channel shutdown is already pending, not scheduling another.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd5041c8: Running channel_shutdown task with <Running> status
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel] - id=0xfd504088: beginning shutdown process
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel] - id=0xfd504088: handler 0xfd514e68 shutdown in read dir completed.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [tls-handler] - id=0xfd515020: Shutting down read direction with error code 1029
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel] - id=0xfd504088: handler 0xfd515020 shutdown in read dir completed.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd5040a0: Scheduling (null) task for immediate execution
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd5040a0: Running (null) task with <Running> status
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [tls-handler] - id=0xfd515020: Shutting down write direction
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel] - id=0xfd504088: handler 0xfd515020 shutdown in write dir completed.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [socket] - id=0xfd502a50 fd=6: closing
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd503c00: Scheduling epoll_event_loop_unsubscribe_cleanup task for immediate execution
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd514ec8: Scheduling socket_handler_close task for immediate execution
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd503c00: Running epoll_event_loop_unsubscribe_cleanup task with <Running> status
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd514ec8: Running socket_handler_close task with <Running> status
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel] - id=0xfd504088: handler 0xfd514e68 shutdown in write dir completed.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd5040a0: Scheduling (null) task for immediate execution
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd5040a0: Running (null) task with <Running> status
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel] - id=0xfd504088: during shutdown, canceling task 0xfd515038
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [task-scheduler] - id=0xfd515038: Running tls_timeout task with <Canceled> status
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel-bootstrap] - id=0xff3109a0: channel 0xfd504088 shutdown with error 1029.
[DEBUG] [2020-04-25T22:14:14Z] [fdeff460] [channel] - id=0xfd504088: destroying channel.
Traceback (most recent call last):
  File "/opt/controller/pubsub.py", line 141, in <module>
    connect_future.result()
  File "/usr/local/lib/python3.7/concurrent/futures/_base.py", line 435, in result
    return self.__get_result()
  File "/usr/local/lib/python3.7/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
awscrt.exceptions.AwsCrtError: AwsCrtError(name='AWS_IO_TLS_ERROR_NEGOTIATION_FAILURE', message='TLS (SSL) negotiation failed', code=1029)
[DEBUG] [2020-04-25T22:14:14Z] [ff37c010] [mqtt-client] - id=0xff3408e0: user called disconnect.
[ERROR] [2020-04-25T22:14:14Z] [ff37c010] [mqtt-client] - id=0xff3408e0: Connection is not open, and may not be closed
[DEBUG] [2020-04-25T22:14:14Z] [ff37c010] [mqtt-client] - id=0xff3408e0: Destroying connection
[DEBUG] [2020-04-25T22:14:14Z] [ff37c010] [mqtt-topic-tree] - tree=0xff340960: Cleaning up topic tree
[DEBUG] [2020-04-25T22:14:14Z] [ff37c010] [mqtt-client] - client=0xfe8bff28: Cleaning up MQTT client
[DEBUG] [2020-04-25T22:14:14Z] [ff37c010] [channel-bootstrap] - id=0xff3109a0: releasing bootstrap reference
[DEBUG] [2020-04-25T22:14:14Z] [ff37c010] [channel-bootstrap] - id=0xff3109a0: destroying

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

Привет, @JonathanHenson @graebm, если он использует тот же стек S2N, что и SDK CPPv2, я заметил, что в последней версии SDK v1.5.5 в моей системе это также не работает, потому что устройство объявляет о поддержке ECDSA, но стек S2N поддерживает только RSA, а во время переговоров выбирается ECDSA. Журнал adolfogc выглядит так же, как мой во время этого конкретного режима сбоя.

Я попытался использовать версию S2N на главном сервере, которая должна поддерживать ECDSA, но, по крайней мере, в моей системе это тоже не удалось, потому что она каким-то образом попытается использовать ключ ECDSA из кода RSA. Я планировал исправить это и отправить запрос на перенос в S2N, но до этого не дошел.

В настоящее время я использую v1.5.1 SDK CPPv2, который согласовывает всегда использовать RSA на этапе проверки.

Хорошо, я знаю, где теперь искать, но есть ли шанс, что ты сможешь сделать мне снимок рукопожатия, чтобы я мог посмотреть в сторону этого s2n?

Привет @JonathanHenson , хватит ли следующего?

Привет клиенту:
image

Привет серверу:
image

Рукопожатие:

image

Предупреждение было отправлено с клиента или сервера?
Также похоже, что SNI пуст? Это также приведет к провалу переговоров. Что вы устанавливаете для имени сервера?

@JonathanHenson Я использовал старую конечную точку ( <endpoint-id>.iot.us-east-1.amazonaws.com ), я переключился на ATS ( <endpoint-id>-ats.iot.us-east-1.amazonaws.com ), и теперь она работает. Спасибо за вашу помощь!

Согласно https://aws.amazon.com/blogs/iot/aws-iot-core-ats-endpoints/, мы должны перейти на -ats asap, @adolfogc , @JonathanHenson?

@mkozjak я сделал и проблема была решена

Спасибо, Марио, за то, что поделился ссылкой на этот пост здесь. Опять же: https://aws.amazon.com/blogs/iot/aws-iot-core-ats-endpoints/

Конфигурация по умолчанию для устройств SDK версии 2 больше не будет работать со старыми конечными точками, не относящимися к ATS. Запустите aws --region <region> iot describe-endpoint --endpoint-type "iot:Data-ATS" чтобы получить конечную точку ATS.

У меня постоянно возникал сбой согласования TLS при использовании aws iot python sdk v2, несмотря на использование конечной точки .ats, но, как предлагалось в блоге aws, проблема была решена путем переключения корневого сертификата на сертификат AmazonRootCA1 из Сертификат G2-RootCA1.

Всем привет,
Я застрял с этой ошибкой в ​​течение 2 часов при переходе со старого sdk на v2 (v1.5.0), даже если я пробовал использовать несколько сред как Windows10, Ubuntu18 или MacOS.

старый пример sdk basicPubSub.py просто работает с моим ключом, сертификатом и rootCA1
Но новый пример sdk pubsub.py просто не работает с теми же ключами и политикой

[ERROR] [2020-09-25T11:11:31Z] [00004ed8] [socket] - id=000001A7825DF580 handle=0000000000000320: connect completion triggered with error -1073741305
[ERROR] [2020-09-25T11:11:31Z] [00004ed8] [socket] - id=000001A7825DF580 handle=0000000000000320: connection error with code 1055
[INFO] [2020-09-25T11:11:31Z] [00004ed8] [dns] - id=000001A7802A2780: recording failure for record xxx for xxx-ats.iot.ap-southeast-1.amazonaws.com, moving to bad list
[ERROR] [2020-09-25T11:11:31Z] [00004ed8] [tls-handler] - id=000001A782BE3580: Error during negotiation. SECURITY_STATUS is -2146892953
[ERROR] [2020-09-25T11:11:31Z] [00004ed8] [socket] - id=000001A7825E0C00 handle=000000000000032C: WriteFile() failed with error 64

Мне нужно ввести порт, чтобы он работал, надеюсь, он также поможет вам.

mqtt_connection_builder.mtls_from_path(
            ...
            port=8883)

С уважением,
Джастин

Извини, что у тебя проблемы, Джастин. Вы пробовали пример политики для pubsub, приведенный в образцах readme ?

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/test/topic" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/test/topic" ] }, { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:region:account:client/test-*" ] } ] }

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

banuprathap picture banuprathap  ·  10Комментарии

victorct-pronto picture victorct-pronto  ·  3Комментарии

satay99 picture satay99  ·  6Комментарии

supertick picture supertick  ·  7Комментарии

shravan097 picture shravan097  ·  6Комментарии