ふと、「中間者攻撃なりBCGハイジャックなり、なんらかの理由で意図したところにアクセス出来てなかった場合、unityちゃん(正確にはUnityWebRequest)はちゃんとエラー吐いてくれるか」が猛烈に気になったため確認した。
なお、特別に証明書のインストール等はしておらず、Windows10環境です。
とりあえず結論
当該記事での検証手順であれば、ちゃんとエラーになった。
手順(簡易)
適当なドメインを取る
当該記事では example.dev
で説明します。勿論、こんな買ったら高そうなドメインは自分は持ち合わせておりません。
サブドメ2つ振る
test1.example.dev
test2.example.dev
とします。
nginxサーバを2台立ててlet's encryptでSSL対応
手順は割愛します。ぐぐればすぐ出てくるのでそんなに難しくないです。
立てたサーバにさっきとったサブドメでAレコード設定
ここまでやったらブラウザで
https://test1.example.dev
https://test2.example.dev
アクセスして正常を確認します。
俺(私)たち入れ替わってるー
入れ替える必要まではないんですが
test1.example.devの向き先IPをtest2サーバのIPに書き換えます。
反映されたあたりでブラウザアクセスして
NET::ERR_CERT_COMMON_NAME_INVALID
あたりが出ることを確認します。
unity
HTTPメソッドは何でも良いので UnityWebRequest
使って SendWebRequest
します。
Curl error 51: Cert verify failed: UNITYTLS_X509VERIFY_FLAG_CN_MISMATCH
こんなエラーが出ます。
isNetworkError
のほうがtrue返すようになりますが、中身吐いてもUnknown Error
です。
結論(2回目)
ちゃんとエラーになる。
余談
なんとなく勘付く方もいるかと思いますが、基本的にOSにインストールされている証明書を使うようです。
軽く調べた限りだと、Win/Mac/iOSあたりだとOSにインストールしさえすれば自己署名でもいけるらしいのですが、
androidはアカンようで、その場合検証用の実装を自前で書く必要があるようです。
もしSSL関係でブラウザではいけるのにunityでは証明書の検証エラーが出るような場合この辺りを踏んでるかもしれませんね。