2015-05-19 13 views
15

Sertifika programlı olarak yükledim.Yüklü kullanıcı sertifikası nasıl program aracılığıyla silinir?

ben programlı sertifikayı kaldırmak istediğiniz Settings -> Security -> Trusted Credentials -> User -> Choose the certificate and click the remove button

giderek elle kaldırmanız mümkün.

Denediğim kod işte ama işe yaramadı. Ben burada deleteEntry

seçtim için

javax.security.cert.X509Certificate x509 = javax.security.cert.X509Certificate.getInstance(caRootCertBytes); 

KeyStore ks = KeyStore.getInstance("AndroidCAStore") 
if (ks != null) 
{ 
    ks.load(null, null); 
    Enumeration<String> aliases = ks.aliases(); 
    while (aliases.hasMoreElements()) 
    { 
     String alias = (String) aliases.nextElement(); 
     java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias); 
     String name = x509.getIssuerDN().getName();        
     if (cert.getIssuerDN().getName().contains(name)) 
     { 
      ks. deleteEntry(alias) 
     } 
    } 
} 

Ref Bu soru biraz benim diğer question

ilgilidir Herhangi bir yardım takdir ben

05-19 18:27:40.789: W/System.err(14588): java.lang.UnsupportedOperationException 
05-19 18:27:40.792: W/System.err(14588): at com.android.org.conscrypt.TrustedCertificateKeyStoreSpi.engineDeleteEntry(TrustedCertificateKeyStoreSpi.java:82) 
05-19 18:27:40.792: W/System.err(14588): at java.security.KeyStore.deleteEntry(KeyStore.java:410) 
05-19 18:27:40.792: W/System.err(14588): at com.proj.test.MyActivity$4.onClick(MyActivity.java:336) 
05-19 18:27:40.792: W/System.err(14588): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162) 
05-19 18:27:40.792: W/System.err(14588): at android.os.Handler.dispatchMessage(Handler.java:102) 
05-19 18:27:40.792: W/System.err(14588): at android.os.Looper.loop(Looper.java:135) 
05-19 18:27:40.793: W/System.err(14588): at android.app.ActivityThread.main(ActivityThread.java:5254) 
05-19 18:27:40.793: W/System.err(14588): at java.lang.reflect.Method.invoke(Native Method) 
05-19 18:27:40.794: W/System.err(14588): at java.lang.reflect.Method.invoke(Method.java:372) 
05-19 18:27:40.794: W/System.err(14588): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
05-19 18:27:40.794: W/System.err(14588): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

var hata günlüğü olduğunu! Sen uninstallCaCert() yöntemini kullanarak bir cihaz sahibi ile Android 5.x yapabilirsiniz

@Override 
public void engineDeleteEntry(String alias) { 
    throw new UnsupportedOperationException(); 
} 

https://android.googlesource.com/platform/external/conscrypt/+/master/src/platform/java/org/conscrypt/TrustedCertificateKeyStoreSpi.java#81

+0

AOSP Hata Reporter İlgili: [Sayı 174.714: programlı yüklü bir CA certifcate kaldırmak için Genel amaçlı yöntem] (https://code.google.com/p/ android/sorunlar/detay? id = 174714). – jww

+0

@jww - Raporlama için teşekkürler. –

cevap

6

sadece kaldırılmasını desteklemez KeyStoreSpi arayüzünün o uygulanmasına benziyor. Bir cihaz sahibi, ancak cihaz önceden sağlanmadan önce yüklenebilir.

https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#uninstallCaCert(android.content.ComponentName

, bayt [])

+0

Yüklü sertifikayı programsal olarak kaldırmak için yine de var mı? –

+1

Muhtemelen normal bir kullanıcı uygulamasından değil. Ancak, Android Ayarlarının bunu nasıl gerçekleştirdiğine göz atabilirsiniz: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.4.4_r1/com/ android/settings/TrustedCredentialsSettings.java # TrustedCredentialsSettings – Buddy

+0

'IKeyChainService' ve' KeyChainConnection' import edemiyorum ** Simge ** hatası çözülemiyor. –

5

:

+1

o 'TrustedCertificateStore' sınıf ve' deleteCertificateEntry' kullanmak mümkün mü * kullanıcılar takdirine göre hareket edecektir bazı 'uninstallintent' sağlayabilirdi Keychain'? [ICS Trust Store'daki blog'unuz] (http://nelenkov.blogspot.com/2011/12/ics-trust-store-implementation.html) 'TrustedCertificateStore''dan bahseder. – jww

+0

Kısa cevap: Hayır. Uzun cevap: Sistem düzeyindeki izinler olmadan sistem dosyalarına bulaşamazsınız. Büyük olasılıkla kök erişimi olan bir şey yapabilirsiniz, ancak genellikle harika bir fikir değildir. Uygulamanın ne yaptığından emin değil, ancak sertifika yalnızca uygulamanız tarafından kullanılıyorsa, sistem deposuna hiç yüklemeyin. –

+0

@Durai: * "SSL trafiğini incelemek için SSL delme yapıyoruz ..." * - TLS Çalışma Grubundaki milletlere bunun hakkında yorum yapıyordum. Veya daha doğru bir şekilde, web/tarayıcı güvenlik modeli nedeniyle standartların kirliliği. [TLS: İstemcilerde <1.2 yasağını yasaklayın (ancak sunuculara izin verin)] (https://www.ietf.org/mail-archive/web/tls/current/msg16495.html). – jww

İlgili konular