###前提・実現したいこと
.NET Micoro Frameworkを用いてMQTT通信でAWS IoTへ接続する仕組みを作成したいと考えています。
###発生している問題・エラーメッセージ
MQTT通信接続時にX509Certificateクラスのインスタンス作成時にファイルを読み込ませようとすると
以下のエラーが発生します。
#### Exception System.IO.IOException - CLR_E_INVALID_DRIVER (1) #### #### Message: #### Microsoft.SPOT.IO.NativeIO::GetAttributes [IP: 0000] #### #### System.IO.FileStream::.ctor [IP: 005c] #### #### System.IO.FileStream::.ctor [IP: 0009] #### #### PinKitIoTHubApp.Program::readfile [IP: 0007] #### #### PinKitIoTHubApp.Program::AWSMessageSend [IP: 000a] #### #### PinKitIoTHubApp.Program::TryAWSConnect [IP: 000c] #### #### PinKitIoTHubApp.Program::ProgramInitialize [IP: 0041] #### #### PinKitIoTHubApp.Program::Main [IP: 000f] ####
###該当のソースコード
//CA証明書:第一引数→証明書ファイルのパス/第二引数→証明書のパス X509Certificate cafile = new X509Certificate(readfile(AWS_IOT_ROOT_CA_FILENAME), AWS_IOT_ROOT_CA_PASSWORD); //モノの証明書:第一引数→モノの証明書のパス X509Certificate certificatefile = new X509Certificate(Encoding.UTF8.GetBytes(AWS_IOT_CERTIFICATE_FILENAME)); //第一引数→AWS側のホスト名/第二引数→ポート番号 MqttClient client = new MqttClient(AWS_IOT_MQTT_HOST, AWS_IOT_MQTT_PORT, true, cafile, certificatefile, MqttSslProtocols.TLSv1_0); //センサーのデータ var message = in_Message; //モノのARN client.Connect("arn:aws:iot:us-east-2:xxxxxxxxx:thing/xxxx"); client.Publish(Topic, Encoding.UTF8.GetBytes(message));
###試したこと
検証にあたりまず通常の.NET Framework側で接続確認を行いデータがAWS上のDBへ
格納されていることを確認出来ています。
そのため証明書やパスについては問題無いと考えています。
現状で違いがある箇所とすればX509Certificateクラスの第一引数の使い方に問題があると考えています。
というのも.NET Framework側ではファイルのパスとパスワードを入力するクラスが用意されていたのですが
.Net Micro Framework側では以下のクラスしか提供されていないようです。
1.public X509Certificate();
2.public X509Certificate(byte[] certificate);
3.public X509Certificate(byte[] certificate, string password);
おそらく3を使うと良いのではないかと考えておりますが、certificateには
どういった情報を渡してあげれば良いのか困ってます。
--2017/11/21追記--
byte型の変換は出来たのですが.NET FrameWorkで同様に変換した際のbyteサイズが800程に対して
.NET MF側ではbyteサイズが2300程にふくれてしまいやはり同じ箇所で落ちてしまいました。
文字コードの違いとかでしょうか?
###補足情報(言語/FW/ツール等のバージョンなど)
言語:C#
開発環境:Visual Studio 2013
フレームワーク:.Net Micro Framework 4.3
あなたの回答
tips
プレビュー