किस्टोर फाइलों में सर्टिफिकेट नाम और उर्फ ​​की जांच कैसे करें?


410

मेरे पास .keystore फ़ाइलों का एक गुच्छा है और विशिष्ट CN और उपनाम के साथ एक खोजने की आवश्यकता है। क्या यह कीटल, जार्सिग्नर या किसी अन्य उपकरण के साथ करने का एक तरीका है? मुझे यह जांचने का एक तरीका मिला कि क्या विशिष्ट कीस्टॉर का उपयोग विशिष्ट एपीके पर हस्ताक्षर करने के लिए किया गया था, लेकिन मुझे प्रत्येक फाइल में उपनाम और प्रमाणपत्र नाम प्राप्त करने की आवश्यकता है।

जवाबों:


720

आप अपनी कीस्टोर फ़ाइल (और उपनाम नाम) की सामग्री को सूचीबद्ध करने के लिए निम्नलिखित कमांड चला सकते हैं:

keytool -v -list -keystore .keystore

यदि आप एक विशिष्ट उपनाम की तलाश में हैं, तो आप इसे कमांड में भी निर्दिष्ट कर सकते हैं:

keytool -list -keystore .keystore -alias foo

यदि उपनाम नहीं मिला है, तो यह एक अपवाद प्रदर्शित करेगा:

keytool त्रुटि: java.lang.Exception: उपनाम मौजूद नहीं है


1
नमस्ते मैं कुंजी उपनाम नाम प्रदर्शित कर सकता हूं यदि मुझे कुंजी उपनाम नाम पता है और किस्टोर प्रमाणपत्र और कीस्टोर पासवर्ड है
Prateek

11
@prateek आप नहीं कर सकते। कीस्टोर या की-पासवर्ड होने की बहुत बात नहीं होगी अगर आप सिर्फ कमांड लाइन टूल के साथ प्रदर्शित कर सकते हैं।
लोरेन के मार्किस

2
आप अपनी कीस्टोर फ़ाइल की सामग्री को सूचीबद्ध करने के लिए निम्न कमांड चला सकते हैं: keytool -list -keystore .keystore उपर्युक्त कॉमोड उपनाम का नाम प्रदान नहीं कर रहा है
मनमोहन सोनी

1
@ManmohanSoni मैंने इसे शामिल करने के लिए अद्यतन किया है -v तर्क जो उपनाम का खुलासा करता है
स्टीवन मार्क फोर्ड

10
मुझे लगता है कि /path/to/keystoreइसके बजाय .keystoreपाठक को अधिक स्पष्ट होगा। वैसे भी यह सही उत्तर है!
एंड्रिया

261

सभी विवरण प्राप्त करने के लिए मुझे रोमान्टाज़ जवाब के लिए -v विकल्प जोड़ना होगा:

keytool -v -list -keystore <FileName>.keystore

4
keytool -v -list -keystore <FileName> .jks
पीयूष सिंह

1
keytool -v -list -keystore cacerts
अंकुर श्रीवास्तव

2
"यदि -vविकल्प निर्दिष्ट किया गया है, तो प्रमाण पत्र मानव-पठनीय प्रारूप में मुद्रित किया जाता है , अतिरिक्त जानकारी जैसे कि स्वामी, जारीकर्ता, सीरियल नंबर, और किसी भी एक्सटेंशन के साथ।" (देखें: जावा एसई टूल्स संदर्भ, प्रदर्शन डेटा कमांड,
-लिस्ट

64

आप जावा कोड से चला सकते हैं।

try {

        File file = new File(keystore location);
        InputStream is = new FileInputStream(file);
        KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
        String password = "password";
        keystore.load(is, password.toCharArray());


        Enumeration<String> enumeration = keystore.aliases();
        while(enumeration.hasMoreElements()) {
            String alias = enumeration.nextElement();
            System.out.println("alias name: " + alias);
            Certificate certificate = keystore.getCertificate(alias);
            System.out.println(certificate.toString());

        }

    } catch (java.security.cert.CertificateException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (KeyStoreException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if(null != is)
            try {
                is.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

प्रमाणपत्र वर्ग कीस्टोर के बारे में सभी जानकारी रखता है।

अद्यतन- OBTAIN निजी कुंजी

Key key = keyStore.getKey(alias, password.toCharArray());
String encodedKey = new Base64Encoder().encode(key.getEncoded());
System.out.println("key ? " + encodedKey);

@prateek आशा है कि आप यही देख रहे होंगे!


आयात java.io.File; आयात java.io.FileInputStream; आयात java.io.FileNotFoundException; आयात java.io.IOException; आयात java.security.cert.Certificate; आयात java.security.KeyStore; आयात java.security.KeyStoreException; आयात java.security.NoSuchAlgorithmException; आयात java.util.numeration;
प्रतिबंध-जियोइंजीनियरिंग

1
@Renjith हैलो यह कोड उपनाम के साथ जुड़े पासवर्ड को छोड़कर सब कुछ प्रदर्शित करता है, मैं इसे कैसे प्रदर्शित कर सकता हूं। कृपया मेरी मदद करें
Prateek

@Renjith java.security.UnrecoverableKeyExceptionयह अपवाद है जब मैं इस कोड को वास्तविक रूप से आज़माता हूं, तो मैं उपनाम पासवर्ड प्राप्त करना चाहता हूं
Prateek

2
आपको लूप करते समय उपरोक्त स्निपेट के अंदर कोड स्निपेट का उपयोग करना चाहिए
Renjith

1
मैं Base64Encoder वर्ग नहीं है। क्या आप मुझे बता सकते हैं कि किस जार फ़ाइल में यह है? या यह एक .java फ़ाइल है?
जैक


17

बाश जैसे वातावरण में आप उपयोग कर सकते हैं:

keytool -list -v -keystore cacerts.jks | grep 'Alias name:' | grep -i foo

इस कमांड में 3 भाग होते हैं। जैसा कि ऊपर कहा गया है, 1 भाग सभी विश्वसनीय प्रमाणपत्रों को सभी विवरणों के साथ सूचीबद्ध करेगा और इसीलिए उन विवरणों के लिए केवल 2 अन्य जानकारी को फ़िल्टर करने के लिए 2 भाग आता है। और अंत में तीसरे भाग में आप एक विशिष्ट उपनाम (या इसके भाग) की खोज कर सकते हैं। मैं बदल जाता है पर केस संवेदी मोड। इस प्रकार दी गई कमांड सभी उपनामों को प्राप्त करेगी जिसमें अधिक जानकारी के लिए 'फू', फ़ू, 123_FOO, fooBar, आदि पैटर्न शामिल हैं man grep


12

यह सभी प्रमाणपत्रों की सूची देगा:

keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"

यह केवल JDK के ट्रस्ट स्टोर में संग्रहीत प्रमाणपत्रों को सूचीबद्ध करेगा जो समान है लेकिन एक कीस्टोर के लिए एक अलग उद्देश्य के लिए (जिसे पूछा गया था)। यहाँ एक अच्छा भेदभाव है: http://stackoverflow.com/questions/17935619/what-is-difference-between-cacerts-and-keystore
डेविड लेवी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.