2011-08-09 13 views
9

मुझे आशा है कि एंड्रॉइड डिवाइस पर प्रोग्रामेटिक रूप से केंद्रीय विश्वसनीय कीस्टोर तक पहुंचने का एक तरीका है। मुझे पता है कि कम से कम एसएसएल कनेक्शन आदि की पुष्टि करने के लिए मौजूद है, जो प्रमाण पत्र, ब्राउज़िंग इत्यादि जोड़ने के लिए एक आसान टूल के साथ आता है। (सेटिंग्स के तहत पाया गया-> स्थान & सुरक्षा-> भरोसेमंद प्रमाणपत्र प्रबंधित करें)एंड्रॉइड सेंट्रल कीस्टोर

मैं चाहता था फ़ाइलों को एन्क्रिप्ट करने के उद्देश्य से प्रोग्राम की सार्वजनिक कुंजी को प्रोग्रामेटिक रूप से पुनर्प्राप्त करने में सक्षम होना चाहिए।

उपलब्ध दस्तावेज को देखते हुए, ऐसा लगता है कि अन्य ऐप डेवलपर्स अपने ऐप के भीतर अपने स्वयं के कीस्टोर का प्रबंधन कर रहे हैं, जो अनावश्यक लगता है।

कोई विचार?

+0

आपको जो प्रमाणपत्र मिलेगा वह सर्वर प्रमाणपत्र है, जो आपके द्वारा पहले से उल्लिखित उद्देश्यों के लिए उपयोगी है। जो आपको नहीं मिलेगा - और जोड़ना नहीं चाहता, मुझे लगता है - व्यक्तिगत प्रमाण पत्र फ़ाइल एन्क्रिप्शन, आपके निर्दिष्ट उद्देश्य के लिए उपयोगी है। – Earl

+0

ठीक है वे केवल सीए certs होने लगते हैं। मुझे अभी भी यह पता लगाने में दिलचस्पी होगी कि उन्हें प्रोग्रामेटिक रूप से एक्सेस/संशोधित किया जा सकता है और यह भी कि कोई अन्य केंद्रीय कीस्टोर ईमेल प्रमाणपत्र आदि के लिए मौजूद है या नहीं। – Nick

+0

आप निश्चित रूप से ट्रस्ट स्टोर तक पहुंच सकते हैं और इसे लोड कर सकते हैं, लेकिन इसके लिए कोई आधिकारिक API नहीं है इस। यह एक नियमित बाउंसी कैसल कीस्टोर है, आप बस कीस्टोर कक्षा का उपयोग कर सकते हैं। –

उत्तर

9

यह समर्थित नहीं है, भविष्य के संस्करणों में तोड़ सकता है, लेकिन यहां विश्वसनीय प्रमाणपत्रों की सूची प्राप्त करने का तरीका बताया गया है। आप रूट एक्सेस के बिना नए जोड़ नहीं सकते हैं, क्योंकि/सिस्टम केवल पढ़ने के लिए आरोहित है। लेकिन अगर आपके पास रूट पहुंच है, तो आप प्रमाण पत्र जोड़ने के लिए नियमित KeyStore एपीआई का उपयोग कर सकते हैं।

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

संपादित करें: यह कीस्ट्रोक के लिए पथ हार्डकोड करने की आवश्यकता होगी, साथ काम करना चाहिए:

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

और निश्चित रूप से यह तोड़ दिया ... कम से कम मोटोरोला XOOM टैबलेट पर 4.x तक अपग्रेड किया गया; /etc/security/cacerts.bks को निर्देशिका/etc/security/cacerts/के साथ प्रतिस्थापित किया गया था जिसमें व्यक्तिगत पीईएम एन्कोडेड फ़ाइलों के रूप में certs शामिल थे। – Nick

+3

आप एपीआई के माध्यम से आईसीएस में प्रमाण पत्र जोड़ सकते हैं। मैंने इसके बारे में भी लिखा है :) http://nelenkov.blogspot.com/2011/12/ics-trust-store-implementation.html –

+0

यह एक त्रुटि दिखा रहा है "फ़ाइल अपवाद नहीं मिला" .. इसके लिए क्या करना है? –

1

आईसीएस (एंड्रॉयड 4.0/एपीआई 14) की शुरुआत की TrustedCertificateStore (सीधे एसडीके में उपलब्ध नहीं) जो आपको बिल्कुल ऐसा करने में सक्षम बनाता है। आप इसे जेसीए कीस्टोर एपीआई का उपयोग करके एक्सेस कर सकते हैं:

/** 
* 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> 
} 
संबंधित मुद्दे