注目キーワード

【Arduino】HTTPSリクエストで使用するルート証明書の取得・組み込み方法

すけろく
普段、何気なくブラウザでインターネットサイトを
見ているが、URLの最初のHttpsとはなんだ?
げんろく
httpsはHttpの通信を暗号化して行うものだ。
ちょっと違いを押さえてみるか。
すけろく
あと、Arduino IDEでプログラムを作る際の
注意点なんかも頼む。
げんろく
わかった。
プログラムに組み込む方法も見てみよう。
皆さんが普段パソコン(PC)やスマホ、タブレットのブラウザ(Chrome、Edge、Safariなど)でインターネットを閲覧する際に画面の上の部分に表示される宛先(URL)について、意識して使われていますか?
宛先(URL)の最初に書かれる「http://」や「https://」ありますよね。
最近では、ほとんどのサイトが「https://」でアクセスするようになってきています。
ではこの2つ(「http://」と「https://」)の違いとは何でしょうか。
この記事では、2つの違いとプログラムで記述する際に考慮が必要となるものについてご紹介していきます。
表題はArduinoとしていますが、他のプログラム言語などでも共通の考え方です。

「http://」と「https://」って何?

URLの構造

まず、普段使っているブラウザに表示されるURLの構造から押さえていきましょう。

URL(ユーアールエル)とは「Uniform Resource Locator」の略で、簡単にいえばインターネット上のホームページ(Webサイト)やファイルの位置や情報を示すものです。

URLは以下の構造になっています。

http://とhttps://の違い

通信方法である、HTTP(Hyper Text Transfer Protocol)と、HTTPS(Hypertext Transfer Protocol Secure)はホームページを見るときにどんな通信手段を用いるのかというルールです。

URLの始まりが「https://」だと通信内容が暗号化されます。「http://」から始まっていると暗号しないで通信しています。

郵便サービスに例えるならば、はがき(http://)と封筒(https://)になります。はがきは配達途中で外部の人に中身を見られたり、改ざんされたりする可能性がありますが、封筒であれば内容は見られず、改ざんも難しくなります。

インターネットサイトでは、個人情報などを入力することが多くなってきているため、その内容を保護するために最近では「https://」でアクセスするものがほとんどです。

HTTPS通信の仕組み

HTTPSで配信するには、インターネットサイトを構成するサーバーに「SSLサーバー証明書」がインストールされている必要があります。

SSLサーバー証明書は 3 または 4階層からできていて、その最上位の階層にあるのが「ルート証明書」です。

HTTP通信は次の図のような仕組みで暗号化通信を確立します。

注目は、ユーザー側のルート証明書です。

「ルート証明書」はWebブラウザ(ChromeやEdgeなど)にあらかじめ登録されていて、アクセスしたサイトのサーバーから送られてくる証明書と照合します。

この時、ハッシュ関数というアルゴリズムを用いて「証明書が改竄されていないか」といったことを確認します。

照合した結果、ルート証明書にある認証局の署名が一致すれば、信頼できる証明書と判断します。

ブラウザに登録されるルート証明書は、ブラウザのバージョンアップなどに伴ってアップデートされていて、新たなルート証明書の追加や、安全性に疑いのある証明書の削除などが随時行われています。

 

このように、ブラウザからHTTPSサイトへアクセスする際には、ユーザーは何もする必要がありません。

しかし、自作のプログラムでHTTPS通信する場合は、作成するプログラム内に「ルート証明書」を登録しておかないと、HTTPS通信が行えないということになります。

 

ルート証明書の確認とプログラムに記載する方法

プログラム内にルート証明書を定義するために必要な手法を説明します。

手法は次の2つの手順にわかれます。

  1. ブラウザからルート証明書をPCに保存する
  2. プログラム内に証明書を記載する

1.ブラウザからルート証明書をPCに保存する

下記の例は以下のブラウザについて説明しています。

  • Chrome

ブラウザのURL部分の左側にある鍵アイコンをクリックします。

「この接続は保護されています」をクリックします。

「証明書は有効です」をクリックします。

一番上(ルート)もしくは中間証明書を選択して「証明書の表示」を選択します。

証明書が表示されます。

「詳細タブ」を選択し、画面下の「ファイルにコピー」をクリックします。

証明書のエクスポートウィザード画面が表示されます。
「次へ」をクリックします。

「Base 64 encoded X.509」形式を選択して「次へ」をクリックします。

保存先のパス名およびファイル名を指定します。
※ファイル名のみでは保存できません。
(例:Dドライブに「ow_cert.cer」として保存)
「次へ」をクリックします。
10
完了画面にて「次へ」をクリックします。
11
エクスプローラで保存した場所を参照し、ファイルができていることを確認します。
ファイルをメモ帳で開きます。
12
画像のような証明書が表示されます。
「—–BEGIN CERTIFICATE—–」と「—–END CERTIFICATE—–」を含めて一つのデータになります。

 

2.プログラム内に証明書を記載する

取得した証明書のデータをプログラム内に記述して定義します。

以下の例はArduino IDEで定義する手順を示しています。


メモ帳で証明書ファイルを開き、表示されるすべてを選択してコピーします。
「—–BEGIN CERTIFICATE—–」と「—–END CERTIFICATE—–」を含めて一つのデータになります。

Arduino IDEを開き、証明書を記載するプログラムを開きます。
コピーした内容をペーストします。

ペーストしたすべての行に以下の通り追加します。
(1)文頭に「”」を付与
(2)文末に「\n” \」を付与

証明書を格納する定数を頭部分に付与します。
以上で、Arduino IDEで証明書を記載する手順は完了です。
いかがだったでしょうか。これでArduino IDEのプログラムに対して証明書を記述することができました。
HTTPS通信を行う準備ができましたね。
今回の記事は以上となります。
最後までご覧いただきありがとうございました。

これからはじめる方にお勧めの参考図書はこちら!

created by Rinker
¥3,089 (2024/04/18 22:02:20時点 Amazon調べ-詳細)
created by Rinker
¥2,310 (2024/04/18 17:27:18時点 Amazon調べ-詳細)
created by Rinker
技術評論社
¥3,278 (2024/04/18 22:02:21時点 Amazon調べ-詳細)
created by Rinker
¥2,420 (2024/04/18 22:02:21時点 Amazon調べ-詳細)