質問: FingerPrint) { UnityEngine.Debug.Log("Correct!"); return true; } return false; } ``` ■質問1 プログラム上で自分たちのプロジェクトのサーバーから送られてきたものであることを どのようにチェックすれば良いでしょうか? ■質問2 下記URLから購入したサーバー証明書と通信に使用している証明書のハッシュ値は 一致したのですが、このページは誰でもみれるので誰でもなりすませるのではないかと 思っています。 ユニークである事はどのように判断しているのでしょうか? ■質問3 **RemoteCertificateChainErrors**はサーバーとの認証に失敗しているという事だと 思うのですが、X509Chain .ChainPolicy.ExtraStoreに サーバー証明書もしくは付随する中間証明書を追加すれば良いでしょうか?
回答: まず、`RemoteCertificateChainErrors`を解決しましょう。CAが署名した証明書で検証に失敗すると言うことは何かが間違っています。たとえばWebサーバで中間証明書の配信の設定をしていないとか間違っているとか。Apache + OpenSSL ジオトラスト クイックSSL プレミアム インストール手順 (新規) 普通はプログラム側で何かをする必要はありませんし、すべきではありません。 > > ■質問1 > > プログラム上で自分たちのプロジェクトのサーバーから送られてきたものであることをどのようにチェックすれば良いでしょうか? > > > Certificate pinningとかPublic key pinningとか呼ばれる手法になります。 余計なことをして本来やるべき検証が漏れていたなどと言うことになるとやらない方がマシということになりますので、十分に理解した上で必要性を検討したうえで行ってください。普通はサーバ証明書の検証で十分です。 > > ■質問2 > > > 中間CA証明書の正当性は上流の証明書によって検証されます。誰かが「中間証明書」なるものを配布していたとしてもそれが正当に署名されていない限り意味はありません。