ダーク/ライト切り替え

【Unity】MagicOnionサーバを立ち上げて自己証明書でSSL通信してみる

投稿日 2022-02-22T20:46:14+09:00

【Unity】MagicOnionサーバを立ち上げて自己証明書でSSL通信してみる

タグ一覧

目次

目次を読み込み中...

NGINXを介した接続やSSL化に少々手こずったので備忘録も兼ね書き残す事にしました。(2022年2月時点)

実証環境&バージョン

一部バージョンに依存して動かない事もあるそうなので今回実際に使用したものを書き残しておきます。

今回動作を確認した環境

  • windows10
  • unity 2020.3.26f
  • Visual Studio 2022
  • docker v20.10.12
  • nginx v1.21.6

バージョン

サーバーサイド

  • .Net Core 5
  • MagicOnion 4.4.0
  • MagicOnion.MSBuild.Tasks 4.4.0
  • MagicOnion.Shared 4.4.0
  • MessagePack.MSBuild.Tasks 2.3.85
  • MessagePack.UnityShims 2.3.85

クライアントサイド

  • MagicOnion.Client.Unity.unitypackage 4.4.0
  • grpc_unity_package.2.40.0

ManicOnionのダウンロードとインストール

まずは公式githubのreadmeやコチラのサイトなどを参考にすればwebサーバー(NGINX等)を通さない単純なHTTP接続ならすぐ出来るでしょう。

.net5を選択しよう

dockerでNGINXを立ち上げる

docker-composeで下記のようにdocker-compose.ymlファイルを作りdocker-compose up -dで起動する

起動されたらconf.d配下に下記のconfファイルを作る。一見長いように見えるけどほぼこちらのコピペです。若干追記してます。

confファイルの追加と後述の証明書ファイルの作成が済んだらnginx -s reloadで再起動する。

upstream内のhost.docker.internal:5000はNGINXがdockerコンテナ内にある場合の記述です。dockerコンテナ内のnginxからはlocalhost:5000```では繋がりません。

オレオレ証明書の作成

こちらのサイトを参考にlocalhost宛ての証明書を作成し、/ssl/ディレクトリに保存しました。nginxコンテナ内のconfファイルと、volumeを介してホスト側のunityクライアントでも参照出来るようにしました。

接続テスト

ここまでの作業でManicOnion-ServerとNGINX、サーバーのSSL化が完了しました。最後に残るのはunity側のSSL対応です。これは公式githubのasyncsumを呼び出すサンプルプログラムを下記のように書き変える。

最初にまずAssets配下のディレクトリに、

  • ルート証明書(localCA.crt)
  • サーバー証明書(localhost.crt)
  • サーバー鍵(localhost.key)

Assets配下に証明書を用意

この3つのファイルをコピーしておく。そしてそれらのファイルを元にキーペアを作り
channel = GrpcChannel.ForAddress("https://localhost:5001");となっている部分をchannel = new Channel(host, port, new SslCredentials(cacert, keyCertificatePair));と書き換える。

SumAsyncメソッドの中身は公式サンプルのままです。MagicOnionサーバー、webサーバー(NGINX)を立ち上げてからunity上で実行してみると、実行結果の123が表示されるはずです。

実行結果

さいごに

onDestroy対応はきちんとしておきましょう。オレオレ証明書はあくまでもお試し用です。


準備中

このサイトをシェアする

【Unity】MagicOnionサーバを立ち上げて自己証明書でSSL通信してみる