ダーク/ライト切り替え

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

投稿日2022-02-22

Picture of the logo


目次

目次を読み込み中...

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対応はきちんとしておきましょう。オレオレ証明書はあくまでもお試し用です。






関連記事

GO言語サーバーとUnityクライアント(C#)をgRPCで接続テストしてみた【入門レベル】

blog

UnityでgRPCをする場合、Magic Onionを使うのがお手軽ですが、今回はGO言語でサーバーを構築してみたかったので最低限の接続機能を自作してみました。備忘録を兼ね書き残しておきます。

【Unity】Go言語でDLLをビルドしてUnityからネイティブプラグインとして呼び出す【備忘録】

blog

Unity用ネイティブプラグインをGo言語で作成した時に手こずった部分を個人的備忘録も兼ねてまとめましたので、似たような事を考えている人はご参考までに。

UNITYで扇形を作ってみた

blog

Unity上で扇形を作る機能が標準ではついてない?ようなので自作してみました。

UNITYからMYSQLデータベースにアクセスする【初心者向け】

blog

UnityからMySQL等のデータベースにアクセスする簡単なサンプルプログラムを紹介します。若干Java Scriptの知識も必要になります。

UnityでFirebase Storeからデータを読み書きする

blog

FirebaseのFireStoreのデータをUnityから読み書きする手順を紹介します。入門レベル。

【Unity X Node.js】クライアント~サーバー間でAES暗号通信してみた

blog

Unityの暗号ライブラリCryptgraphyを使って暗号通信してみたかったので試してみました。

Unityで端末情報、IPアドレスを取得する方法

blog

Unityにて端末固有情報などをC#コードから取得する方法をまとめました。

UnityでTrail Rendererを使ってオブジェクトの軌跡を描画する

blog

今回はUnityでTrail Rendererを使ってオブジェクトの軌跡を描画する方法についてご紹介します。Trail Rendererを使うことで、オブジェクトがどのような軌跡を描いたかを可視化することができます。

【Unity】Json,CSVファイルを相互に変換する方法【備忘録】

blog

個人的備忘録も兼ねてUnityでインスペクタ上でテキストファイルを指定して、そのファイルから結果を取得する方法をいくつか紹介します。

【Unity】複数のシーンがあるアプリでシーン遷移を軽くするための工夫

blog

Unityでゲームアプリを作る際にシーンをまたぐ時に少しでもシーン遷移を軽くする方法を個人的備忘録も兼ねて書き残しておきます。


スポンサーリンク

このサイトをシェアする