Skip to content

FileNotFoundError: [Errno 2] No such file or directory: '' (short issue description) when using the IAM authentication mode #343

Closed
@prashidi

Description

@prashidi

Describe the bug

When trying to use the Sample provided for pub/sub with IAM authorization, I receive this error:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/AWSIoTPythonSDK/core/protocol/paho/client.py", line 615, in tls_set
    f = open(certfile, "r")
        ^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: ''

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/prashidi/workspace/aws/iot/iot-test-publish/publish.py", line 19, in <module>
    myAWSIoTMQTTClient.configureCredentials("./certificates/AmazonRootCA1.pem")
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/AWSIoTPythonSDK/MQTTLib.py", line 246, in configureCredentials
    self._mqtt_core.configure_cert_credentials(cert_credentials_provider, cipher_provider)
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/AWSIoTPythonSDK/core/protocol/mqtt_core.py", line 132, in configure_cert_credentials
    self._internal_async_client.set_cert_credentials_provider(cert_credentials_provider, ciphers_provider)
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/AWSIoTPythonSDK/core/protocol/internal/clients.py", line 86, in set_cert_credentials_provider
    self._paho_client.tls_set(ca_certs=ca_path,certfile=cert_path, keyfile=key_path,
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/AWSIoTPythonSDK/core/protocol/paho/client.py", line 617, in tls_set
    raise IOError(certfile+": "+err.strerror)
OSError: : No such file or directory
prashidi@c889f3a91d4f iot-test-publish % 
prashidi@c889f3a91d4f iot-test-publish % 
prashidi@c889f3a91d4f iot-test-publish % 
prashidi@c889f3a91d4f iot-test-publish % 
prashidi@c889f3a91d4f iot-test-publish % python3 publish.py
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/AWSIoTPythonSDK/core/protocol/paho/client.py", line 615, in tls_set
    f = open(certfile, "r")
        ^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: ''

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/prashidi/workspace/aws/iot/iot-test-publish/publish.py", line 19, in <module>
    myAWSIoTMQTTClient.configureCredentials("certificates/AmazonRootCA1.pem")
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/AWSIoTPythonSDK/MQTTLib.py", line 246, in configureCredentials
    self._mqtt_core.configure_cert_credentials(cert_credentials_provider, cipher_provider)
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/AWSIoTPythonSDK/core/protocol/mqtt_core.py", line 132, in configure_cert_credentials
    self._internal_async_client.set_cert_credentials_provider(cert_credentials_provider, ciphers_provider)
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/AWSIoTPythonSDK/core/protocol/internal/clients.py", line 86, in set_cert_credentials_provider
    self._paho_client.tls_set(ca_certs=ca_path,certfile=cert_path, keyfile=key_path,
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/AWSIoTPythonSDK/core/protocol/paho/client.py", line 617, in tls_set
    raise IOError(certfile+": "+err.strerror)
OSError: : No such file or directory

Expected Behavior

The same code sample work for X.509 certificate authentication mode. However, I want to avoid the mTLS with the X.509 certificate

Current Behavior

Not working just throw the error: OSError: : No such file or directory while the certificate exist in that path

Reproduction Steps

Code sample I used:

import AWSIoTPythonSDK.MQTTLib as AWSIoTPyMQTT
import json
import time as t
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0
# Define ENDPOINT, CLIENT_ID, PATH_TO_CERT, PATH_TO_KEY, PATH_TO_ROOT, MESSAGE, TOPIC, and RANGE
ENDPOINT = "endpoint-ats.iot.us-east-1.amazonaws.com"
CLIENT_ID = "a1b23cd45e"
# PATH_TO_CERT = "certificates/device.pem.crt"
# PATH_TO_KEY = "certificates/private.pem.key"
PATH_TO_ROOT = "certificates/AmazonRootCA1.pem"
AccessKeyId = "AAAAAAAAAAAAAA"
SecretKey = "DLFJLDJFLDJFLDJFLDJFLDFD"
MESSAGE = "Hello World"
TOPIC = "test/testing"
RANGE = 20
myAWSIoTMQTTClient = AWSIoTPyMQTT.AWSIoTMQTTClient(CLIENT_ID)
myAWSIoTMQTTClient.configureEndpoint(ENDPOINT, 443)
myAWSIoTMQTTClient.configureCredentials("certificates/AmazonRootCA1.pem")
myAWSIoTMQTTClient.configureIAMCredentials(AccessKeyId, SecretKey)

# myAWSIoTMQTTClient.configureCredentials(PATH_TO_ROOT, PATH_TO_KEY, PATH_TO_CERT)
myAWSIoTMQTTClient.connect()
print('Begin Publish')
for i in range(RANGE):
    data = "{} [{}]".format(MESSAGE, i+1)
    message = {"message": data}
    myAWSIoTMQTTClient.publish(TOPIC, json.dumps(message), 1)
    print("Published: '" + json.dumps(message) +
          "' to the topic: " + "'test/testing'")
    t.sleep(0.1)
print('Publish End')
myAWSIoTMQTTClient.disconnect()

You can just run this code sample with python3 fileName

Possible Solution

No response

Additional Information/Context

No response

SDK version used

v1.5.4 Latest

Environment details (OS name and version, etc.)

MacBook macOS 14.5

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThis issue is a bug.needs-triageThis issue or PR still needs to be triaged.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions