Опишите ошибку
После обновления моей установки до 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
У меня возникла такая же проблема.
Просматривайте свой пост в поисках аналогичной проблемы с 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 , хватит ли следующего?
Привет клиенту:
Привет серверу:
Рукопожатие:
Предупреждение было отправлено с клиента или сервера?
Также похоже, что 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-*"
]
}
]
}
Если это не сработает, не стесняйтесь открывать новый выпуск, если у вас все еще есть трудности. Мы не можем гарантировать, что сообщения о закрытых проблемах будут видны.
Самый полезный комментарий
@JonathanHenson Я использовал старую конечную точку (
<endpoint-id>.iot.us-east-1.amazonaws.com
), я переключился на ATS (<endpoint-id>-ats.iot.us-east-1.amazonaws.com
), и теперь она работает. Спасибо за вашу помощь!