2016-06-27 3 views
1

Ich habe dieses Szenario, wo meine App Anforderungen an einen sicheren Server (NON http (s), in Wirklichkeit ist es über SIP-Protokoll, aber die Frage sollte zu gelten jedes nicht-HTTP-Protokoll), und ich muss in der Lage sein zu sagen, ob der Server als vertrauenswürdig angesehen wird, basierend auf den vertrauenswürdigen Systemstandardzertifikaten, die im Schlüsselspeicher meines Android-Geräts installiert sind.Kann ich Zugriff auf Trusted Certificate Entries in Android von meiner App

Das Problem ist, dass nach der Überprüfung aller APIs für Zertifikate (wie KeyStore, KeyChain, etc) ich keine Lösung finden konnte.

Scheint, dass jede App, obwohl sie Zugriff auf den Systemstandard-Schlüsselspeicher des Geräts erhalten kann, nur auf ihre eigenen Ressourcen zugreifen kann, nicht global, selbst wenn wir über Einträge vom Typ TrustedCertificateEntry sprechen.

Gibt es etwas, das ich hier vermisse?

Es scheint ein ziemlich gültigen Anwendungsfall für Nicht-https-Authentifizierung

Mit freundlichen Grüßen, Antonis

Antwort

3

schließlich einen Weg zu finden, es geschafft, dies zu tun, so lassen Sie mich dies im Falle teilen nützlich sein kann, zu anderen. Android bietet Zugriff auf systemweite vertrauenswürdige Zertifikate. Das Detail hier (und der Grund, warum es bisher nicht für mich arbeitet) war die Schlüsselspeicher ‚Typ‘ Kennung, die ich verwenden:

KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); 

das glaube ich versucht tatsächliche Schlüssel zu finden, der sollte vom Kurs nicht Geteilt werden. Nach einigem Graben fand ich heraus, dass es einen separaten Typ gibt, AndroidCAStore, der den Trick für mich gemacht hat. Also hier ist ein Arbeitscode-Auszug, der nur Zertifikate ausdruckt:

try { 
    KeyStore ks = KeyStore.getInstance("AndroidCAStore"); 
    ks.load(null); 

    try { 
    Enumeration<String> aliases = ks.aliases(); 
    while (aliases.hasMoreElements()) { 
     Certificate cert = ks.getCertificate(aliases.nextElement()); 
     Log.e(TAG, "Certificate: " + cert.toString()); 
    } 
    } 
    catch(Exception e) { 
    e.printStackTrace(); 
    } 
} 
catch (IOException|NoSuchAlgorithmException|KeyStoreException|CertificateException e) { 
    e.printStackTrace(); 
} 
Verwandte Themen