2017-03-27 3 views
0

M2MQttライブラリを使用して、ルートCA、クライアント証明書、およびキーを使用してAWS MQTTブローカに接続しようとしています。しかし私は、これはFormatExceptionエラーで失敗しルートCA、鍵、および証明書を使用してAWSブローカに接続するC#m2mqtt

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()); 

を次のC#クライアントの接続コードを使用しています。おそらく、私はこの接続の秘密鍵をどこに渡すべきかわからないという事実に関連しています。これは私がすでに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') 

誰もこれが動作するようになっているか知っていますか?

答えて

0

私は私の問題を理解しました。手掛かりは、AWSに対して適切に認証するためには、MqttClient()コンストラクタに渡す方法を理解できなかった証明書(私の場合はPEM)と秘密鍵の両方を提供する必要があります。なぜなら、 1つの "証明書"のみを取得します。

解決策は、PFX/P12証明書を使用することです。この証明書には、PEMと秘密鍵の両方が含まれています(異なる点は、マイクロソフトに感謝します)。 PEM +キー(例:here、ここではherehereなど)から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()); 
です)。
関連する問題