2017-07-17 5 views
0

J'ai développé une application andorid qui doit être connectée à un serveur pour une demande de repos.Andorid https-tls sur un serveur spécifique

Je suis nouveau dans https et (dispite des 2 derniers jours passés à chercher sur le web) je n'ai rien compris.

Le serveur a un certificat fait avec Comodo (ou GeoTrust) et un KeyStore (pas faite par moi).

J'ai essayé d'utiliser:

Puis j'ai essayé ceci. Trusting all certificates using HttpClient over HTTPS

Et fonctionne. Le problème est que je dois le rendre spécifique à l'accès du serveur et aucun autre.

Ceci est mon code pour la demande 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; 
     } 

Je dois savoir ce que dois-je faire, étape par étape.

Qu'est-ce que vous avez besoin de savoir pour m'aider?

https://www.ssllabs.com/ssltest dit:

  • TLS 1,2
  • TLS 1,1
  • TLS 1,0
  • clés RSA 2048 bits (e 65537)
  • Émetteur GeoTrust DV CA SSL - G3
  • algorithme de signature SHA256withRSA
  • Certificat Transparence Oui (certificat)

Merci à vous tous.

+0

je ne peux pas voir un problème spécifique sta tement ici. Avez-vous un problème avec la validation du certificat lorsque vous utilisez curl dans Android? – halfer

+0

Fondamentalement, vous devez configurer la connexion https pour utiliser un trustore personnalisé qui contient le certificat racine de l'autorité de certification. Essayez ceci et postez les erreurs https://developer.android.com/training/articlessecurity/-ssl.html – pedrofb

Répondre

0

Merci de me répondre, les deux. @pedrofb votre lien ne fonctionne pas.

J'ai trouvé que la solution lisant la documentation andorid avait un esprit clair le matin.

Mon certificat est fait par GEOTRUST (un CA -> quelqu'un qui dit "votre certificat est 'plus' valide 'à travers nous"). Andorid a une gamme de CA de confiance (de cette façon, la configuration est simple).

Lorsque votre CA est pas présent dans le favori Android, vous devez dire andorid que vous pouvez faire confiance à ce certificat de cette CA -> https://developer.android.com/training/articles/security-ssl.html

Ce que je n'est de prendre le certificat de serveur et l'utiliser dans le code suivant (de liaison ci-dessus) afin de générer le SSLSocketFactory et l'utiliser dans le httpsURLConnection.setSSLSocketFactory (socket):

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(); 
      } 
    } 
}