2017-03-27 8 views
0

M2MQtt 라이브러리를 사용하여 루트 CA, 클라이언트 인증서 및 키를 사용하여 AWS MQTT 브로커에 연결하려고합니다. 다음 C# 클라이언트 연결 코드를 사용하고 있습니다.루트 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()); 

그러나이 오류는 FormatException 오류와 함께 실패합니다. 아마이 연결을 위해 개인 키를 어디에 전달해야할지 모르겠다는 사실과 관련이 있습니다. 이

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') 

사람이이 일을 가정하는 방법을 알고 있나요 (아래 참조) AWSIoTPythonSDK를 사용하여 파이썬에서 프로토 타입 이미 작업이 무언가를인가?

답변

0

나는 내 문제를 파악했습니다. 실마리는 AWS에 대해 제대로 인증을 받기 위해서는 MqttClient() 생성자로 전달하는 방법을 파악할 수없는 개인 키뿐만 아니라 인증서 (내 경우에는 PEM)를 제공해야합니다. 하나의 "인증서"만받습니다.

해결 방법은 PEM과 개인 키를 모두 포함하는 PFX/P12 인증서를 사용하는 것입니다 (Microsoft는 감사합니다.). PEM + 키로 PFX를 만드는 방법을 설명하는 많은 리소스가 있습니다 (예 : here, 여기 here, here 등). 그런 다음 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()); 
입니다.