2015-05-19 8 views
15

मैंने प्रोग्रामेटिक रूप से प्रमाणपत्र स्थापित किया था।उपयोगकर्ता स्थापित प्रमाणपत्र प्रोग्रामेटिक रूप से कैसे हटाएं?

मैं Settings -> Security -> Trusted Credentials -> User -> Choose the certificate and click the remove button

जा रहा करके स्वयं भी इसकी स्थापना रद्द करने में सक्षम हूँ मैं प्रोग्राम के रूप में प्रमाण पत्र निकालना चाहते हैं।

यहां वह कोड है जिसकी मैंने कोशिश की लेकिन यह काम नहीं किया।

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

कारण है कि मैं deleteEntry

चुना है यहाँ के लिए रेफरी त्रुटि लॉग कि मैं

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) 

मिला यह सवाल कुछ हद तक मेरे दूसरे question

से संबंधित है किसी भी मदद की सराहना की है!

+0

AOSP बग रिपोर्टर पर संबंधित: [जारी करना 174,714: एक CA certifcate कि प्रोग्राम के रूप में स्थापित किया गया था दूर करने के लिए कोई सामान्य प्रयोजन विधि] (https://code.google.com/p/ एंड्रॉयड/मुद्दों/विस्तार? id = 174,714)। – jww

+0

@jww - रिपोर्टिंग के लिए धन्यवाद। –

उत्तर

6

KeyStoreSpi इंटरफेस के क्रियान्वयन की तरह लग रहा है बस हटाने का समर्थन नहीं करता:

@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

तो प्रोग्राम स्थापित रूप से स्थापित प्रमाणपत्र को हटाने के लिए वैसे भी नहीं हैं? –

+1

शायद सामान्य उपयोगकर्ता एप्लिकेशन से नहीं। लेकिन आप यह देख सकते हैं कि एंड्रॉइड सेटिंग्स कैसे करता है: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.4.4_r1/com/ एंड्रॉइड/सेटिंग्स/विश्वसनीय क्रेडेंशियलसेटिंग.जावा # विश्वसनीय क्रेडेंशियल्स सेटिंग्स – Buddy

+0

मैं 'IKeyChainService' और 'KeyChainConnection' आयात नहीं कर सका .. मुझे मिलता है ** प्रतीक ** त्रुटि हल नहीं कर सकता। –

5

आप uninstallCaCert() विधि का उपयोग कर एक डिवाइस के मालिक के साथ Android 5.x में ऐसा कर सकते हैं। डिवाइस के प्रावधान के ठीक पहले डिवाइस डिवाइस को केवल इंस्टॉल किया जा सकता है।

https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#uninstallCaCert(android.content.ComponentName, बाइट [])

+1

पर कार्य करेगा, क्या यह 'विश्वसनीय मुद्रित स्टोर' वर्ग और 'DeleteCertificateEntry' का उपयोग करना संभव है? आपका [आईसीएस ट्रस्ट स्टोर पर ब्लॉग] (http://nelenkov.blogspot.com/2011/12/ics-trust-store-implementation.html) 'विश्वसनीय प्रमाणपत्र प्रमाणपत्र' का उल्लेख करता है। – jww

+0

संक्षिप्त उत्तर: नहीं। लंबा उत्तर: आप सिस्टम-स्तरीय अनुमतियों के बिना सिस्टम फ़ाइलों के साथ गड़बड़ नहीं कर सकते हैं। आप शायद रूट पहुंच के साथ कुछ कर सकते हैं, लेकिन आमतौर पर बहुत अच्छा विचार नहीं है। यह सुनिश्चित नहीं है कि ऐप क्या करता है, लेकिन अगर प्रमाण केवल आपके ऐप द्वारा उपयोग किया जाता है, तो इसे सिस्टम स्टोर में इंस्टॉल न करें। –

+0

@ दुबई: * "एसएसएल यातायात का निरीक्षण करने के लिए हम एसएसएल भेदी कर रहे हैं ..." * - मैं इस बारे में टीएलएस वर्किंग ग्रुप में लोगों से टिप्पणी कर रहा था। या अधिक सही ढंग से, वेब/ब्राउज़र सुरक्षा मॉडल के कारण मानकों का प्रदूषण। देखें [टीएलएस: ग्राहकों पर <1.2 प्रतिबंधित करें (लेकिन सर्वरों को अनुमति दें)] (https://www.ietf.org/mail-archive/web/tls/current/msg16495.html)। – jww

संबंधित मुद्दे

 संबंधित मुद्दे