2017-07-17 5 views
0

私はRest Requestのためにサーバーに接続する必要のあるandoridアプリケーションを開発しました。アンドロイド特定のサーバー上のhttps - tls

私はhttpsで新しく、(ウェブ上での検索に最後の2日間を費やしました)私は何も理解していません。

サーバーは、COMODO(またはジオトラスト)で作られた証明書を持っており、キーストア(私がなされていない)を持っています。

私が使用してみました:

私はこれを試しました。 Trusting all certificates using HttpClient over HTTPS

そして、動作します。問題は、私はそれがサーバーのアクセスとそれ以外のアクセスを特定のものにする必要があるということです。

これはGET/DELETE要求のための私のコードです:

 public static HttpsURLConnection setHttpsURLConnection(String type, URL url, Activity activity) throws IOException { 

      trustEveryone(); //from the link above 

      HttpsURLConnection response=(HttpsURLConnection) url.openConnection(); 
      response.setConnectTimeout(Costanti.connectionTimeout); 
      response.setReadTimeout(Costanti.connectionTimeout); 
      response.setRequestProperty("Content-type", "application/json"); 
      response.setRequestProperty("Accept", "application/json"); 
      response.setRequestProperty("Authorization", "Basic tfhtrhsthLkO="); 
      response.setRequestMethod(type); 
      return response; 
     } 

私は、私は何をすべきステップバイステップを知っている必要があります。

私を助けるために必要な情報

https://www.ssllabs.com/ssltestは言う:

  • TLS 1.2
  • TLS 1.1
  • TLS 1.0
  • 鍵RSA 2048ビット(E 65537)
  • 発行者ジオトラストDV SSL CA - G3
  • 署名アルゴリズムSHA256withRSA
  • 証明書の透明はい(証明書)

おかげで、あなたのすべて。

+0

私は特定の問題のSTAを見ることができませんここのテント。 Androidでカールを使用しているときに証明書の検証に問題がありますか? – halfer

+0

基本的には、認証局のルート証明書を含むカスタムトラストを使用するようにhttps接続を設定する必要があります。これを試して、エラーを投稿してください。https://developer.android.com/training/articlessecurity/-ssl.html – pedrofb

答えて

0

回答ありがとうございました。 @pedrofbあなたのリンクはうまくいきません。

私は解決策を読んでいて、午前は明瞭な心地のドキュメントを見つけました。

私の証明書はGEOTRUST(CA - >あなたの証明書は「私たちの価値がある」と言う人)によって作られたものです。 Andoridには信頼できるCAの範囲があります(このように構成は簡単です)。

あなたのCAはあなたがCA ことから、この証明書を信頼できるとandorid言う必要があるのAndroidお気に入りの中に存在していない - 私がやったこと> https://developer.android.com/training/articles/security-ssl.html

は、サーバーの証明書を取得し、それを使用しています(上記のリンクから)次のコード順のSSLSocketFactoryを生成し、httpsURLConnection.setSSLSocketFactory(ソケット)でそれを使用するには:

public static final String CERTIFICATO=("-----BEGIN CERTIFICATE-----\n" + 
      "MIIFuDCCBKCgA....kqhkiG9w0BAQsFADBm\n" + 
      "MQswCQYDVQQGEwJ...SW5jLjEdMBsGA1UECxMU\n" + 
      "RG9tYWluIFZhbGlk....ERWIFNTTCBD\n" + 
      "QSAtIEczMB4XDTE....k1OVowGzEZMBcGA1UE\n" + 
      "AwwQdGVzdDIuYmNzb2....ADggEPADCCAQoC\n" + 
      "ggEBAMEIbF7hHdy2...d6nWJE0zRSG1IzL6qTe\n" + 
      "tan8UGyIUdHTx0Cy...VRhchXab628VxP\n" + 
      "1Ngd2ffFUKBO9...N0/Fphr\n" + 
      "9yKJCwgbcb2PAsH....knT5q\n" + 
      "T6qkfug0jBVdKmaG5...Vg694vGZYVkFi\n" + 
      "NbDFAaF7f1oS...BKCEHRl\n" + 
      "c3QyLmJjc29mdC....hpodHRw\n" + 
      "Oi8vZ3Quc3ltY2I...gZngQwBAgEw\n" + 
      "gYQwPwYIKwY...N0LmNvbS9yZXNvdXJj\n" + 
      "ZXMvcmVw...RwczovL3d3dy5n\n" + 
      "ZW90cnVzdC5jb...WwwHwYDVR0jBBgw\n" + 
      "FoAUrWUihZ...B0GA1UdJQQW\n" + 
      "MBQGCCsGAQU....wHwYIKwYBBQUH\n" + 
      "MAGGE2h0d...0dHA6Ly9ndC5z\n" + 
      "eW1jYi5jb20vZ3Q...wDxAHYA3esdK3oN\n" + 
      "T6Ygi4GtgWhwf...RzBFAiBp54lk\n" + 
      "UV/yv5lgSW0w...K4uzyiBfJQMMe1\n" + 
      "OVzA+x/INw9...5G9+443fNDsgN\n" + 
      "3BAAAAFc9Ao..WRNuoF/GR\n" + 
      "ckf1umsC...NBgkqhkiG\n" + 
      "9w0BAQsFAA...lcKFn1fk\n" + 
      "N6tnsHI...JKA4fjAgV\n" + 
      "k5VMllg...pkVGqing\n" + 
      "h+pkAJg19u...suEdhrpK8c\n" + 
      "6ZU6kjpyNuIiVX9nAEA2..LkKM3Yi6LE\n" + 
      "N9TlYfz4B...nQd3bZAg==\n" + 
      "-----END CERTIFICATE-----\n"); 

public static SSLSocketFactory socket=null; 

static { 
    // Load CAs from an InputStream 
    // (could be from a resource or ByteArrayInputStream or ...) 
    InputStream in=null; 
    try { 
     CertificateFactory cf = CertificateFactory.getInstance("X.509"); 

     Certificate ca; 

     in = new ByteArrayInputStream(Costanti.CERTIFICATO.getBytes()); 

     ca = cf.generateCertificate(in); 

     // Create a KeyStore containing our trusted CAs 
     String keyStoreType = KeyStore.getDefaultType(); 
     KeyStore keyStore = KeyStore.getInstance(keyStoreType); 
     keyStore.load(null, null); 
     keyStore.setCertificateEntry("ca", ca); 

     // Create a TrustManager that trusts the CAs in our KeyStore 
     String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); 
     TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); 
     tmf.init(keyStore); 

     // Create an SSLContext that uses our TrustManager 
     SSLContext context = SSLContext.getInstance("TLS"); 
     context.init(null, tmf.getTrustManagers(), null); 
     socket=context.getSocketFactory(); 
    }catch (Exception e){ 
     e.printStackTrace(); 
     LogManage.logError(LogManage.Type.Connection, Costanti.class, null, "Problema con SSL conf"); 
     socket=null; 
    } 
    finally { 
     if (in!=null) 
      try { 
       in.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
    } 
} 
関連する問題