【问题标题】:AWSCRT (AWS IoT) TLS Negotiation timeout PythonAWSCRT (AWS IoT) TLS 协商超时 Python
【发布时间】:2020-06-29 07:37:34
【问题描述】:

我正在使用 AWS IoT 设备 SDK Python(sudo pip install awsiotsdk && python -m pip install awscrt)建立 IoT 连接 (MQTT)。在我的 Raspbian 设备上使用 WiFi 效果很好。

使用 GSM 模块时,我在 ~5-6 秒后收到以下错误

'aws.crt.exceptions.AwsCrtError: AwsCrtError(name='AWS_IO_TLS_NEGOTIATION_TIMEOUT', message='Channel shutdown due to tls negotiation timeout', code=1068).

于是我尝试 telnet 看看是否可行,结果成功

host$> telnet <prefix>.iot.<region>.amazonaws.com 8883
Trying 54.123.456.103...
Connected to <endpoint>.
Escape character is '^]'.

我尝试了openssl,看可以建立连接,成功

openssl s_client -connect <prefix>.iot.<region>.amazonaws.com:8883 -tls1_2 -CAfile <path to Root CA cert> -cert <Path to device cert> -key <Path to device private key>

我增加了代码和库中的所有超时,例如ping_timout_ms 从 5s -> 30s。 这没有帮助。

keep_alive_secs=kwargs.get('keep_alive_secs', 1200),
ping_timeout_ms=kwargs.get('ping_timeout_ms', 30000)

我不知道我还能做些什么来解决这个问题。搜索时我也找不到任何有用的信息。寻求建议!


添加其他信息,完整运行约 15 秒。我在代码中添加了一些 print() 以更好地了解正在发生的事情。

Import awscrt and awsiot
concurrent/futures/_base.Future
concurrent/futures/_base.Future.Executor
mqtt.Client
mqtt.Connection
main.py - Parameters
main.py - Define global parameters..
main.py - Main started!
awsiot_mqtt_connection_builder.mtls_from_path
awsiot_mqtt_connection_builder._builder
awsiot_mqtt_connection_builder._builder.ca_filepath
ca_dirpath: None ca_filepath: /cert/AmazonRootCA1.pem
awsiot_mqtt_connection_builder._builder.not_use_websocket
awscrt/io.is_alpn_available
awsiot_mqtt_connection_builder._builder.not_use_websocket.alpn_available
Port: 443
awsiot_mqtt_connection_builder._get_metrics_str
mqtt.Client.__init__
mqtt.Connection.__init__
Connecting to xxxxxxxxxx-ats.iot.eu-west-1.amazonaws.com with client ID '<string>'
mqtt.connect started..
<awscrt.mqtt.Connection object at 0xb47c3788>
_base.Future.__init__ started...
concurrent/futures/_base.Future.__repr__
<Future at 0xb4758330 state=pending>
mqtt.connect.try
self.keep_alive_secs: 240 self.ping_timeout_ms: 50000
concurrent/futures/_base.Future.result
mqtt.connect.on_connect started..
Error code
1067
_base.Future.set_exception started...
_base.Future.set_exception_info started...
concurrent/futures/_base.Future.__get_result
concurrent/futures/_base.Future._invoke_callbacks

【问题讨论】:

    标签: python amazon-web-services aws-sdk aws-iot


    【解决方案1】:

    我遇到了类似的问题,发现 TLS 协商超时是硬编码的,在 aws-io-c 库中设置为 4 秒。我创建了这个包含所需背景的 GitHub 问题,以便将此参数也暴露给 awscrthttps://github.com/awslabs/aws-crt-python/issues/173

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 2018-07-13
      • 2020-01-15
      • 2013-10-04
      相关资源
      最近更新 更多