2017-07-05 3 views
1

Wir entwickeln eine sicherheitsbewusste Anwendung und benötigen eine Anwendung, um uns das für die Verbindung verwendete Zertifikat zu senden.Laden Sie das SSL-Zertifikat von der Website herunter und senden Sie es an

Ist es möglich, das Zertifikat herunterzuladen und es auf Android zu senden. Wir müssen dies tun, damit wir überprüfen können, ob das Zertifikat kompromittiert wurde. Oder wäre es besser, Details aus dem Zertifikat zu holen, in ein Protokoll zu schreiben und es dann zu senden. Wir haben eine api, die die Details

Antwort

0

ich Sie vorher für Pinning gefragt siehe schicken ...

Sie das Zertifikat in der folgenden Art und Weise kann pinnen

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

du nach dem Lauf kann Verbindung wurde dann verbunden, wenn der Pin nicht übereinstimmt, können Sie vor dem Senden von Daten abbrechen. Hinweis: Der obige Code pinnt den öffentlichen Schlüssel des Zertifikats, nicht das Zertifikat.

Wenn Sie nur das Zertifikat möchten, können Sie einfach cert.toString()

+0

, wenn ich 'URL url = new URL (PATH) versuchen und laufen;' 'HttpsURLConnection Verbindung = (HttpsURLConnection) url.openConnection();' und ' connection.connect(); 'Ich bekomme eine' javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Vertrauensanker für den Zertifizierungspfad nicht gefunden ', wenn ich einen Proxy auf meinem Android-Gerät verwende (mitmproxy und fiddler), aber nicht Wenn Sie keinen Proxy verwenden –

+0

Ich nehme an, Sie verwenden ein M + Gerät, in diesem Fall müssen Sie Ihr Proxy-SSL-Zertifikat zur Netzwerksicherheitskonfiguration hinzufügen. – Ryan

+0

Ich führe dies auf Android 6.0 und 7.0. Ich weiß nicht, wie die Netzwerksicherheitskonfiguration konfiguriert wird. Es scheint in Android 6.0 zu funktionieren. –

Verwandte Themen