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

Créé le 15 avr. 2020  ·  17Commentaires  ·  Source: aws/aws-iot-device-sdk-python-v2

Décrivez le bogue
Après la mise à niveau de mon installation vers awsiotsdk-1.0.6 il a cessé de fonctionner avec awscrt sans pouvoir autoriser avec le backend d'aws. Peut être connecté avec la mise à niveau d'awscrt vers 0.5.13.

Numéro de version du SDK
awsiotsdk-1.0.6

Plateforme/OS/Périphérique
rpi3b+

Reproduire (comportement observé)
Mettez awsiotsdk niveau 1.0.6 .

Comportement prévisible
Devrait fonctionner comme prévu.

Journaux/sortie

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

Commentaire le plus utile

@JonathanHenson J'utilisais l'ancien point de terminaison ( <endpoint-id>.iot.us-east-1.amazonaws.com ), je suis passé à celui d'ATS ( <endpoint-id>-ats.iot.us-east-1.amazonaws.com ) et maintenant cela fonctionne. Merci pour ton aide!

Tous les 17 commentaires

J'ai connu le même problème.

J'ai parcouru votre message en recherchant un problème similaire avec le SDK CPPv2 qui, je pense, est basé sur les mêmes fonctions sous-jacentes. J'ai compris que le SDK CPPv2 essayait de valider la chaîne de confiance complète, et pas seulement le certificat CA fourni, mais la chaîne de confiance complète n'existait pas sur mon appareil. En copiant /etc/ssl/certs/ca-certificates.crt de ma machine Ubuntu sur mon appareil et en le transmettant à la méthode Aws::Iot::MqttClientConnectionConfigBuilder::WithCertificateAuthority(), j'ai pu fournir un magasin de confiance complet qui a fonctionné . Je ne sais pas quel est l'équivalent Python de cette méthode, mais il doit être là - en espérant que cet indice vous aide !

Mise à jour : sur la dernière version du SDK C++, je vois également que S2N (la pile AWS TLS) choisira ECDSA pour la signature, ce qui n'est pas pris en charge sur la version finale de la base de code.

Le conseil de @jsakwa semble
Êtes-vous capable d'exécuter samples/pubsub.py avec --root-ca défini ? Habituellement, vous passerez le fichier Amazon Root CA 1 disponible ici

@graebm , n'a pas de bande passante pour tester l'atm. Est-ce que ça marche pour toi? Si cela fonctionne, cela ne semblerait pas naturel car la documentation indique clairement que le commutateur doit être utilisé si la racine de confiance n'est pas déjà installée sur votre machine et qu'elle est sur la mienne (elle fonctionne après la rétrogradation).

@graebm Je viens de tester à nouveau. La version 1.0.5 fonctionne bien. Le problème se produit lors de l'utilisation de la version 1.0.6. J'utilise un certificat signé avec cette autorité de certification que vous mentionnez (pas celui obsolète).

Ce test a été exécuté en utilisant pubsub.py avec --root-ca dans un conteneur Docker.

Voici un extrait de la sortie de débogage :

(...)

[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

Hmm.... nous avons récemment mis à jour nos préférences de chiffrement. Avez-vous une chance d'obtenir une capture filaire de la poignée de main TLS et de publier les messages de bonjour du client et du serveur ?

@JonathanHenson @graebm s'il utilise la même pile S2N que le SDK CPPv2, j'ai observé que dans la dernière version du SDK v1.5.5 sur mon système, cela échoue également car l'appareil annonce la prise en charge de l'ECDSA, mais la pile S2N ne prend en charge que RSA, et pendant la négociation ECDSA est choisi. Le journal d'adolfogc ressemble au mien pendant ce mode de défaillance particulier.

J'ai essayé d'extraire la version de S2N sur le maître, qui est censée prendre en charge ECDSA, mais au moins sur mon système, cela a également échoué, car il essaierait en quelque sorte d'utiliser la clé ECDSA du code RSA. J'avais l'intention de résoudre ce problème et de soumettre une pull-request à S2N, mais je n'y suis pas parvenu.

J'utilise actuellement la v1.5.1 du SDK CPPv2 qui négocie pour toujours utiliser RSA lors de l'étape de défi

D'accord, je sais où chercher maintenant, mais avez-vous une chance de m'obtenir une capture de poignée de main pour que je puisse aller voir du côté de ce s2n ?

Salut @JonathanHenson , ce qui suit suffirait-il?

Bonjour cliente :
image

Bonjour serveur :
image

Poignée de main:

image

L'alerte a-t-elle été envoyée depuis le client ou le serveur ?
On dirait également que le SNI est vide ? Cela entraînerait également l'échec de la négociation. Que définissez-vous pour le nom du serveur ?

@JonathanHenson J'utilisais l'ancien point de terminaison ( <endpoint-id>.iot.us-east-1.amazonaws.com ), je suis passé à celui d'ATS ( <endpoint-id>-ats.iot.us-east-1.amazonaws.com ) et maintenant cela fonctionne. Merci pour ton aide!

Selon https://aws.amazon.com/blogs/iot/aws-iot-core-ats-endpoints/ nous devrions passer à -ats possible, @adolfogc , @JonathanHenson?

@mkozjak je l'ai fait et le problème a été résolu

Merci Mario d'avoir partagé le lien vers ce post ici. Encore une fois : https://aws.amazon.com/blogs/iot/aws-iot-core-ats-endpoints/

La configuration par défaut des SDK de périphérique V2 ne fonctionnera plus avec les anciens points de terminaison non ATS. Exécutez aws --region <region> iot describe-endpoint --endpoint-type "iot:Data-ATS" pour obtenir le point de terminaison ATS.

Je rencontrais un échec persistant de la négociation TLS lors de l'utilisation du aws iot python sdk v2, malgré l'utilisation du point de terminaison .ats, mais comme suggéré dans le blog aws, j'ai pu résoudre le problème en basculant le certificat racine vers un certificat AmazonRootCA1 à partir d'un Certificat G2-RootCA1.

Salut,
J'ai été bloqué avec cette erreur pendant 2 heures lors de la migration de l'ancien SDK vers la v2 (v1.5.0) même si j'ai essayé sur plusieurs environnements à la fois Windows10, Ubuntu18 ou MacOS.

ancien exemple de sdk basicPubSub.py fonctionne uniquement avec ma clé, mon certificat et rootCA1
Mais le nouvel exemple de SDK pubsub.py ne fonctionne tout simplement pas avec les mêmes clés et la même politique

[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

Je dois saisir le port pour que cela fonctionne, j'espère que cela pourra également vous aider.

mqtt_connection_builder.mtls_from_path(
            ...
            port=8883)

Salutations,
Justin

Désolé que vous ayez des problèmes Justin. Avez-vous essayé l'exemple de politique pour pubsub donné dans le fichier readme des exemples ?

{ "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-*" ] } ] }

Si cela ne fonctionne pas, n'hésitez pas à ouvrir un nouveau problème si vous rencontrez toujours des difficultés. Nous ne pouvons pas garantir que les messages sur les problèmes fermés seront vus.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

shravan097 picture shravan097  ·  6Commentaires

victorct-pronto picture victorct-pronto  ·  3Commentaires

GauravPatni picture GauravPatni  ·  4Commentaires

mkozjak picture mkozjak  ·  8Commentaires

satay99 picture satay99  ·  6Commentaires