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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

MQTT

MQTT(Message Queue Telemetry Transport)とは、TCP/IPネットワークで利用可能な通信プロトコルの一つで、IoT/M2M向けに開発された軽量なプロトコルです。ヘッダ部分は最小2バイトと小さく、通信量・CPU負荷・電力消費量などを抑えることができます。

Q&A

0回答

729閲覧

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

usimaru

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

MQTT

MQTT(Message Queue Telemetry Transport)とは、TCP/IPネットワークで利用可能な通信プロトコルの一つで、IoT/M2M向けに開発された軽量なプロトコルです。ヘッダ部分は最小2バイトと小さく、通信量・CPU負荷・電力消費量などを抑えることができます。

0グッド

1クリップ

投稿2017/11/13 01:42

編集2017/11/21 01:08

###前提・実現したいこと
.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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問