C# m2mqtt 使用根 CA、密钥和证书连接到 AWS 代理



我正在尝试使用 M2MQtt 库通过根 CA、客户端证书和密钥连接到 AWS MQTT 代理。我正在使用以下 C# 客户端连接代码

MqttClient client = new MqttClient(
    endPoint, 
    MqttSettings.MQTT_BROKER_DEFAULT_SSL_PORT,
    true,
    new X509Certificate2(@"ca.pem"),
    new X509Certificate2(@"certificate.pem"),
    MqttSslProtocols.TLSv1_2 
    );
client.Connect(Guid.NewGuid().ToString());

但是,此操作失败并出现格式异常错误。这可能与我不知道将私钥传递到哪里进行此连接有关。这是我已经在工作的东西,使用AWSIoTPythonSDK在Python中原型化(见下文(

from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
f = open('mqttEndpoint.txt', 'r')
awsHost = f.read()
f.close()
myAWSIoTMQTTClient = AWSIoTMQTTClient('foo')
myAWSIoTMQTTClient.configureEndpoint(awsHost, 8883)
myAWSIoTMQTTClient.configureCredentials('ca.pem', 'id_rsa', 'certificate.pem')

有谁知道这应该如何工作?

我想出了我的问题。线索是,要正确针对 AWS 进行身份验证,您需要提供证书(在我的情况下是 PEM(和私钥,我不知道如何将其传递到 MqttClient(( 构造函数中,因为它只需要一个"证书"。

解决方案是使用 PFX/P12 证书,其中包含 PEM 和私钥(Microsoft谢谢你与众不同(。有许多资源可以解释如何从 PEM+密钥创建 PFX(即此处、此处、此处、此处等(。然后,您必须使用 X509Certificate2(( 类来拉入 PFX 文件(即"2"是

MqttClient client = new MqttClient(
    endPoint,
    MqttSettings.MQTT_BROKER_DEFAULT_SSL_PORT,
    true,
    rootCa,
    new X509Certificate2(@"certificate.pfx", @""); // My PFX was created with a blank password, hence empty string as 2nd arg
    MqttSslProtocols.TLSv1_2
    );
client.Connect(Guid.NewGuid().ToString());

相关内容

  • 没有找到相关文章

最新更新