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()
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 –
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
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. –