質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.04%

.NET Micoro FrameworkでのX.509v.3証明書の読み込み方で困っています

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,108

usimaru

score 4

前提・実現したいこと

.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

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる