teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

解決用ソース追加

2020/01/24 03:27

投稿

XENO_SuperGamer
XENO_SuperGamer

スコア8

answer CHANGED
@@ -1,4 +1,36 @@
1
1
  解決できました。
2
2
  まず、Httpsに接続する際は証明書の検証する必要があります。
3
3
  Unityではその検証機能はあるのですが、デフォルトではAndroidのみ出来なく(不便ですよね)
4
- 検証する機能をつけないとダメです。
4
+ 検証する機能をつけないとダメです。
5
+
6
+
7
+ まず、証明書の検証するためのクラスを用意します。
8
+
9
+ class AcceptAllCertificatesSignedWithASpecificKeyPublicKey : CertificateHandler
10
+ {
11
+ // Encoded RSAPublicKey
12
+ private static string PUB_KEY = "証明証の公開鍵を入れる";
13
+ protected override bool ValidateCertificate(byte[] certificateData)
14
+ {
15
+ X509Certificate2 certificate = new X509Certificate2(certificateData);
16
+ string pk = certificate.GetPublicKeyString();
17
+ if (pk.Equals(PUB_KEY))//公開鍵があっているか検証
18
+ return true;
19
+ // Bad dog
20
+ return false;
21
+ }
22
+ }
23
+
24
+ そして、
25
+ UnityWebRequest が行われている次の処理で、上記の処理を呼び出します。
26
+
27
+ //UnityWebRequestを生成
28
+ //URLはセキュリティ上の問題で、伏せさせていただきます。
29
+ UnityWebRequest request = UnityWebRequest.Post("https://www.×××.com/××××××/×××.php", form);
30
+
31
+ request.certificateHandler = new AcceptAllCertificatesSignedWithASpecificKeyPublicKey();//追加
32
+
33
+ //タイムアウト
34
+ request.timeout = 5;
35
+
36
+ このような感じで接続できました。