2011-08-09 21 views
9

Android cihazında merkezi güvenilir bir anahtar deposuna program aracılığıyla erişmenin bir yolu olduğunu umuyorum. En azından sertifika ekleme, tarama, vb. Için kullanışlı bir araçla birlikte gelen SSL bağlantılarını vb. Doğrulamak için var olduğunu biliyorum. (Ayarlar altında>> & güvenlik-> güvenilir sertifikaları yönet)Android Central Keystore

Dosyaların şifrelenmesi amacıyla bunlardan ortak anahtarların program aracılığıyla alınabilmesi gibi.

Diğer uygulama geliştiricileri, kendi uygulamalarını kendi uygulamalarında yönetiyor gibi görünebilir.

Herhangi bir fikrin var mı?

+0

Ne bulacağınız, zaten ana hatlarıyla belirttiğiniz amaçlar için yararlı olan sunucu sertifikalarıdır. Ne bulamayacağınızı - ve eklemek istemediğinizi - düşünürdüm - dosya şifreleme için yararlı olan kişisel sertifikalarınız, belirtilen amacınız. – Earl

+0

Doğru, sadece CA sertifikaları gibi görünüyorlar. Programlı olarak erişilip değiştirilmeyeceklerini veya e-posta sertifikaları için başka bir merkezi anahtar deposu bulunup bulunmadığını da öğrenmek isterim. – Nick

+0

Güven deposuna kesinlikle erişebilir ve yükleyebilirsiniz, ancak bunun için resmi bir API yoktur. bu. Bu sıradan bir Bouncy Castle anahtar deposu, sadece KeyStore sınıfını kullanabilirsiniz. –

cevap

9

Bu desteklenmiyor, gelecekteki sürümlerde vb. Kırılabilir, ancak burada güvenilir sertifikaların bir listesini edinebilirsiniz. Root erişimi olmayan yenilerini ekleyemezsiniz, çünkü/system salt okunur olarak kurulur. Ancak root erişiminiz varsa, sertifika eklemek için normal KeyStore API'lerini kullanabilirsiniz.

KeyStore ks = KeyStore.getInstance("BKS"); 
InputStream is = new FileInputStream("/etc/security/cacerts.bks"); 
ks.load(is, "changeit".toCharArray()); 

List<X509Certificate> certs = new ArrayList<X509Certificate>(); 
Enumeration<String> aliases = ks.aliases(); 
while (aliases.hasMoreElements()) { 
    String alias = aliases.nextElement(); 
    X509Certificate cert = (X509Certificate) ks.getCertificate(alias); 
    certs.add(cert); 
} 

DÜZENLEME: Bu keystore'da yolunu hardcode gerek birlikte çalışması gerekir:

TrustManagerFactory tmf = TrustManagerFactory 
        .getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
tmf.init((KeyStore) null); 
X509TrustManager xtm = (X509TrustManager) tmf.getTrustManagers()[0]; 
for (X509Certificate cert : xtm.getAcceptedIssuers()) { 
    String certStr = "S:" + cert.getSubjectDN().getName() + "\nI:" 
         + cert.getIssuerDN().getName(); 
    Log.d(TAG, certStr); 
} 
+0

Ve tabiki de bozuldu ... en azından bir Motorola XOOM tabletinde 4.x'e yükseltildi; /etc/security/cacerts.bks,/etc/security/cacerts/dizinleri ayrı ayrı PEM kodlu dosyalar olarak içeren dizini ile değiştirildi. – Nick

+3

ICS'de sertifikaları API aracılığıyla ekleyebilirsiniz. Bunun hakkında bile yazdım :) http://nelenkov.blogspot.com/2011/12/ics-trust-store-implementation.html –

+0

Bu, "Dosya bulunamadı istisna" hatası veriyor .. bunun için ne yapmalı? –

1

ICS (Android 4.0/API 14) (SDK doğrudan kullanılamaz) TrustedCertificateStore tanıtıldı Bu tam olarak bunu yapmanızı sağlar. Buna benzer JCA Anahtar Deposu API'sını kullanarak erişebilirsiniz:

/** 
* Android Central Keystore repo usually located on /data/misc/keychain 
* including the system trusted anchors located on /system/etc/security 
*/ 
KeyStore keyStore = KetStore.getInstance("AndroidCAStore"); 
keyStore.load(null, null); //Load default system keystore 
Enumeration<String> keyAliases = keyStore.aliases(); 

while(keyAliases.hasMoreElements()){ 
    String alias = aliases.nextElement(); 
    X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias); 

    //<User cert in whatever way you want> 
} 
İlgili konular