こんにちは,M1の西です.
GN グループで開発している hiyoco というアプリケーションについて,gRPC で SSL 通信を行うための検討をしたので紹介します.
(GitHubリポジトリ: https://github.com/nomlab/hiyoco)
hiyoco は,Google カレンダーの予定共有を支援するシステムです.
また,本システムは gRPC を用いたマイクロサービスアーキテクチャにより実装を行っています.
hiyoco を構成するサービスは以下の3つです.
- calendar_watcher
Google カレンダーから予定の取得して他のサービスに取得した予定を送信する. - informant
calendar_watcher 受信した予定を,Slack に投稿する. - sounder
calendar_wathcer から受信した予定の内容を,AIY Voice Kit を利用して読み上げるサービス.
※ AIY Voice Kit とは,Raspberry PI を用いた AI スピーカー自作キット.詳細はこちら.
上記の3つのサービスが gRPC を用いて通信を行いますが,現在は SSL を用いた暗号化通信に対応できていません.
そこで,本記事では現在設計中の SSL 通信を行う場合のサーバ構成を紹介します.
hiyoco には今後もサービスが追加されると考えられます.
このため,サービスが増えた場合でも対応できるように,1つのルート証明書により各サービスへのサーバ証明書を発行する方式がよいと考えました.
今回は,自己署名証明書(いわゆるオレオレ証明書)を使用した認証局を作成し,各サービスへの証明書の発行を行います.
これにより,認証局のルート証明書をクライアントに登録しておくことで,すべてのサービスとの SSL 通信が可能です.
サーバ構成と,例として informant へのサーバ証明書発行の流れを以下の図に示します.
図中の赤枠で囲んでいるサーバ証明書発行は,以下の手順で行います.
- サーバとなるサービスで証明書署名要求(CSR)を作成
- 証明書署名要求を認証局へ送信
- 認証局で証明書署名要求(CSR)に署名を行いサーバ証明書を発行
- 発行したサーバ証明書をサーバサービス送信
クライアントサービスに認証局のルート証明書を組み込んでおくことで,認証局から発行されたサーバ証明書の存在するサーバサービスと SSL 通信が可能となります.
以上が現在検討している hiyoco のサーバ構成です.
マイクロサービスや SSL 通信については,まだ勉強中なのでもっとこうした方がいいという意見があればよろしくお願いします!