2017-07-05 3 views
1

Nous développons une application de sécurité et nous avons besoin d'application pour nous envoyer le certificat qui a été utilisé pour la connexion.Télécharger certificat SSL du site et l'envoyer

Est-il possible de télécharger le certificat et l'envoyer sur Android. Nous devons le faire pour que nous puissions vérifier si le certificat a été compromis. Ou serait préférable de récupérer les détails du certificat l'écrire dans un journal, puis l'envoyer. Nous avons un api qui peut envoyer les détails

Répondre

0

Je vois que vous avez demandé précédemment épingler ...

Vous pouvez épingler le certificat de la manière

Certificate[] certs = conn.getServerCertificates(); 
MessageDigest md = MessageDigest.getInstance("SHA-256"); 
for (Certificate cert : certs) { 
    X509Certificate x509Certificate = (X509Certificate) cert; 
    byte[] key = x509Certificate.getPublicKey().getEncoded(); 
    md.update(key, 0, key.length); 
    byte[] hashBytes = md.digest(); 
    StringBuilder hexHash = new StringBuilder(); 
    for (byte hashByte : hashBytes) { 
     int k = 0xFF & hashByte; 
     String tmp = (k < 16) ? "0" : ""; 
     tmp += Integer.toHexString(0xFF & hashByte); 
     hexHash.append(tmp); 
    } 
    // You can even log cert.toString() 
    Log.d(TAG, hexHash.toString()); get the hash from here 
    // If you create `pins` as a Set with all the valid pins from above 
    if (pins.contains(hexHash.toString())) { 
     return true; 
    } 
} 

suivant Vous pouvez exécuter cette après la connexion conn a été connecté puis si la broche ne correspond pas, vous pouvez annuler avant d'envoyer des données. Note: le code ci-dessus épingle la clé publique du certificat et non le certificat.

Si vous voulez juste le certificat que vous pouvez juste obtenir cert.toString()

+0

Lorsque je tente de lancer 'URL url = new URL (PATH),' 'connexion HttpsURLConnection = (HttpsURLConnection) url.openConnection();' et ' connection.connect(); 'J'obtiens un' javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: ancre de confiance pour le chemin de certification non trouvé' en utilisant un proxy sur mon appareil Android (mitmproxy et fiddler) mais pas lorsque vous n'utilisez pas un proxy –

+0

Je suppose que vous utilisez un périphérique M +, dans ce cas, vous devez ajouter votre certificat SSL proxy à la configuration de sécurité réseau. – Ryan

+0

Je cours ceci sur Android 6.0 et 7.0. Je ne sais pas comment configurer la configuration de la sécurité du réseau. Il semble fonctionner dans Android 6.0. –