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

Erstellt am 15. Apr. 2020  ·  17Kommentare  ·  Quelle: aws/aws-iot-device-sdk-python-v2

Beschreibe den Fehler
Nach dem Upgrade meiner Installation auf awsiotsdk-1.0.6 funktionierte sie nicht mehr, da awscrt sich nicht mit dem aws-Backend autorisieren konnte. Könnte mit awscrt-Upgrade auf 0.5.13 verbunden sein.

SDK-Versionsnummer
awsiotsdk-1.0.6

Plattform/Betriebssystem/Gerät
rpi3b+

Reproduzieren (beobachtetes Verhalten)
Aktualisieren Sie awsiotsdk auf Version 1.0.6 .

Erwartetes Verhalten
Sollte wie erwartet funktionieren.

Protokolle/Ausgabe

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

Hilfreichster Kommentar

@JonathanHenson Ich habe den alten Endpunkt verwendet ( <endpoint-id>.iot.us-east-1.amazonaws.com ), bin auf den ATS umgestiegen ( <endpoint-id>-ats.iot.us-east-1.amazonaws.com ) und jetzt funktioniert es. Danke für Ihre Hilfe!

Alle 17 Kommentare

Ich habe das gleiche Problem erlebt.

Ich bin auf Ihren Beitrag gestoßen, als ich nach einem ähnlichen Problem mit dem CPPv2-SDK suchte, von dem ich glaube, dass es auf denselben zugrunde liegenden Funktionen basiert. Ich stellte fest, dass das CPPv2-SDK versuchte, die vollständige Vertrauenskette zu validieren und nicht nur mein bereitgestelltes CA-Zertifikat – aber die vollständige Vertrauenskette existierte nicht auf meinem Gerät. Indem ich /etc/ssl/certs/ca-certificates.crt von meinem Ubuntu-Rechner auf mein Gerät kopiert und an die Methode Aws::Iot::MqttClientConnectionConfigBuilder::WithCertificateAuthority() übergeben habe, konnte ich einen vollständigen Truststore bereitstellen, der funktionierte . Ich bin mir nicht sicher, was das Python-Äquivalent für diese Methode ist, aber es muss vorhanden sein - in der Hoffnung, dass dieser Hinweis Ihnen hilft!

Update: In der letzten Version des C++ SDK sehe ich auch, dass S2N (der AWS TLS-Stack) ECDSA zum Signieren auswählt, was von der Release-Version der Codebasis nicht unterstützt wird.

Der Rat von
Können Sie samples/pubsub.py mit --root-ca ausführen? Normalerweise würden Sie die hier verfügbare Amazon Root CA 1-Datei übergeben

@graebm , habe keine Bandbreite zum Testen von ATM. Funktioniert es bei dir? Wenn es funktioniert, würde sich das unnatürlich anfühlen, da die Dokumentation eindeutig sagt, dass der Switch verwendet werden sollte, wenn die Vertrauensbasis nicht bereits auf Ihrem Computer installiert ist und es sich auf meinem befindet (es funktioniert nach dem Downgrade).

@graebm Ich habe gerade nochmal getestet. Version 1.0.5 läuft einwandfrei. Das Problem tritt bei Verwendung der Version 1.0.6 auf. Ich verwende ein Zertifikat, das mit der von Ihnen erwähnten Zertifizierungsstelle signiert ist (nicht das veraltete).

Dieser Test wurde mit pubsub.py mit --root-ca in einem Docker-Container ausgeführt.

Dies ist ein Auszug der Debug-Ausgabe:

(...)

[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... wir haben unsere Verschlüsselungseinstellungen vor kurzem aktualisiert. Besteht die Möglichkeit, eine Wire-Shark-Erfassung des TLS-Handshakes zu erhalten und die Client- und Server-Hallo-Nachrichten zu posten?

Hey @JonathanHenson @graebm Wenn dies den gleichen S2N-Stack wie das CPPv2-SDK verwendet, habe ich beobachtet, dass dies in der neuesten SDK-Version v1.5.5 auf meinem System auch fehlschlägt, weil das Gerät Unterstützung für ECDSA ankündigt, der S2N-Stack jedoch nur unterstützt RSA, und während der Verhandlung wird ECDSA ausgewählt. Das Protokoll von adolfogc sieht während dieses speziellen Fehlermodus genauso aus wie meins.

Ich habe versucht, die Version von S2N auf Master zu ziehen, die ECDSA unterstützen soll, aber zumindest auf meinem System schlug dies auch fehl, weil es irgendwie versuchen würde, den ECDSA-Schlüssel aus dem RSA-Code zu verwenden. Ich hatte vor, das zu beheben und einen Pull-Request an S2N zu senden, bin aber nicht dazu gekommen.

Ich verwende derzeit v1.5.1 des CPPv2-SDK, das aushandelt, während des Challenge-Schritts immer RSA zu verwenden

Okay, ich weiß, wo ich jetzt suchen muss, aber könntest du mir vielleicht ein Handshake-Capture besorgen, damit ich mir die Seite von s2n ansehen kann?

Hallo @JonathanHenson , würde folgendes ausreichen?

Kunden hallo:
image

Server hallo:
image

Händedruck:

image

Wurde die Warnung vom Client oder Server gesendet?
Sieht auch so aus, als ob SNI leer ist? Auch das würde zum Scheitern der Verhandlung führen. Was stellst du für den Servernamen ein?

@JonathanHenson Ich habe den alten Endpunkt verwendet ( <endpoint-id>.iot.us-east-1.amazonaws.com ), bin auf den ATS umgestiegen ( <endpoint-id>-ats.iot.us-east-1.amazonaws.com ) und jetzt funktioniert es. Danke für Ihre Hilfe!

Laut https://aws.amazon.com/blogs/iot/aws-iot-core-ats-endpoints/ sollten wir so schnell wie möglich zu -ats wechseln, @adolfogc , @JonathanHenson?

@mkozjak habe ich gemacht und das Problem war gelöst

Danke Mario, dass du den Link zu diesem Beitrag hier geteilt hast. Nochmal: https://aws.amazon.com/blogs/iot/aws-iot-core-ats-endpoints/

Die Standardkonfiguration für V2-Geräte-SDKs funktioniert nicht mehr mit den alten Nicht-ATS-Endpunkten. Führen Sie aws --region <region> iot describe-endpoint --endpoint-type "iot:Data-ATS" , um den ATS-Endpunkt abzurufen.

Bei der Verwendung von aws iot python sdk v2 trat trotz Verwendung des .ats-Endpunkts ein anhaltender TLS-Aushandlungsfehler auf G2-RootCA1-Zertifikat.

Hi,
Bei der Migration von altem SDK auf v2 (v1.5.0) blieb ich 2 Stunden lang mit diesem Fehler stecken, obwohl ich es in mehreren Umgebungen mit Windows10, Ubuntu18 oder MacOS ausprobiert habe.

altes SDK-Beispiel basicPubSub.py funktioniert nur mit meinem Schlüssel, Zertifikat und RootCA1
Aber das neue SDK-Beispiel pubsub.py funktioniert einfach nicht mit den gleichen Schlüsseln und Richtlinien

[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

Ich muss den Port eingeben, damit es funktionieren kann, hoffe es kann dir auch helfen.

mqtt_connection_builder.mtls_from_path(
            ...
            port=8883)

Grüße,
Justin

Tut mir leid, dass du Probleme mit Justin hast. Haben Sie die Beispielrichtlinie für pubsub in der Beispiel- Readme- Datei ausprobiert?

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

Wenn das nicht funktioniert, können Sie gerne eine neue Ausgabe eröffnen, wenn Sie immer noch Schwierigkeiten haben. Wir können nicht garantieren, dass Nachrichten zu geschlossenen Problemen angezeigt werden.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen